// 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  S3352C4_nt  {
  int s3352c4f0[2];
  void  mf3352c4(); // _ZN10S3352C4_nt8mf3352c4Ev
};
//SIG(-1 S3352C4_nt) C1{ m Fi[2]}


void  S3352C4_nt ::mf3352c4(){}

//skip512 S3352C4_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3352C3_nt  {
  int s3352c3f0;
  __tsi64 s3352c3f1;
  void *s3352c3f2[4];
  int s3352c3f3[2];
  void *s3352c3f4;
  ::S3352C4_nt s3352c3f5;
  void *s3352c3f6[2];
  virtual  ~S3352C3_nt(); // _ZN10S3352C3_ntD1Ev
  virtual void  v6(); // _ZN10S3352C3_nt2v6Ev
  virtual void  v7(); // _ZN10S3352C3_nt2v7Ev
  virtual void  v8(); // _ZN10S3352C3_nt2v8Ev
  virtual void  v9(); // _ZN10S3352C3_nt2v9Ev
  virtual void  v10(); // _ZN10S3352C3_nt3v10Ev
  virtual void  v11(); // _ZN10S3352C3_nt3v11Ev
  virtual void  v12(); // _ZN10S3352C3_nt3v12Ev
  virtual void  v13(); // _ZN10S3352C3_nt3v13Ev
  virtual void  v14(); // _ZN10S3352C3_nt3v14Ev
  virtual void  v15(); // _ZN10S3352C3_nt3v15Ev
  virtual void  v16(); // _ZN10S3352C3_nt3v16Ev
  virtual void  v17(); // _ZN10S3352C3_nt3v17Ev
  virtual void  v18(); // _ZN10S3352C3_nt3v18Ev
  virtual void  v19(); // _ZN10S3352C3_nt3v19Ev
  virtual void  v20(); // _ZN10S3352C3_nt3v20Ev
  virtual void  v21(); // _ZN10S3352C3_nt3v21Ev
  virtual void  v22(); // _ZN10S3352C3_nt3v22Ev
  virtual void  v23(); // _ZN10S3352C3_nt3v23Ev
  virtual void  v24(); // _ZN10S3352C3_nt3v24Ev
  virtual void  v25(); // _ZN10S3352C3_nt3v25Ev
  virtual void  v26(); // _ZN10S3352C3_nt3v26Ev
  virtual void  v27(); // _ZN10S3352C3_nt3v27Ev
  virtual void  v28(); // _ZN10S3352C3_nt3v28Ev
  virtual void  v29(); // _ZN10S3352C3_nt3v29Ev
  virtual void  v30(); // _ZN10S3352C3_nt3v30Ev
  virtual void  v31(); // _ZN10S3352C3_nt3v31Ev
  virtual void  v32(); // _ZN10S3352C3_nt3v32Ev
  virtual void  v33(); // _ZN10S3352C3_nt3v33Ev
  virtual void  v34(); // _ZN10S3352C3_nt3v34Ev
  virtual void  v35(); // _ZN10S3352C3_nt3v35Ev
  virtual void  v36(); // _ZN10S3352C3_nt3v36Ev
  virtual void  v37(); // _ZN10S3352C3_nt3v37Ev
  virtual void  v38(); // _ZN10S3352C3_nt3v38Ev
  virtual void  v39(); // _ZN10S3352C3_nt3v39Ev
  virtual void  v40(); // _ZN10S3352C3_nt3v40Ev
  virtual void  v41(); // _ZN10S3352C3_nt3v41Ev
  virtual void  v42(); // _ZN10S3352C3_nt3v42Ev
  virtual void  v43(); // _ZN10S3352C3_nt3v43Ev
  virtual void  v44(); // _ZN10S3352C3_nt3v44Ev
  virtual void  v45(); // _ZN10S3352C3_nt3v45Ev
  virtual void  v46(); // _ZN10S3352C3_nt3v46Ev
  virtual void  v47(); // _ZN10S3352C3_nt3v47Ev
  virtual void  v48(); // _ZN10S3352C3_nt3v48Ev
  virtual void  v49(); // _ZN10S3352C3_nt3v49Ev
  virtual void  v50(); // _ZN10S3352C3_nt3v50Ev
  virtual void  v51(); // _ZN10S3352C3_nt3v51Ev
  virtual void  v52(); // _ZN10S3352C3_nt3v52Ev
  virtual void  v53(); // _ZN10S3352C3_nt3v53Ev
  virtual void  v54(); // _ZN10S3352C3_nt3v54Ev
  virtual void  v55(); // _ZN10S3352C3_nt3v55Ev
  virtual void  v56(); // _ZN10S3352C3_nt3v56Ev
  virtual void  v57(); // _ZN10S3352C3_nt3v57Ev
  virtual void  v58(); // _ZN10S3352C3_nt3v58Ev
  virtual void  v59(); // _ZN10S3352C3_nt3v59Ev
  virtual void  v60(); // _ZN10S3352C3_nt3v60Ev
  virtual void  v61(); // _ZN10S3352C3_nt3v61Ev
  virtual void  v62(); // _ZN10S3352C3_nt3v62Ev
  virtual void  v63(); // _ZN10S3352C3_nt3v63Ev
  virtual void  v64(); // _ZN10S3352C3_nt3v64Ev
  virtual void  v65(); // _ZN10S3352C3_nt3v65Ev
  virtual void  v66(); // _ZN10S3352C3_nt3v66Ev
  virtual void  v67(); // _ZN10S3352C3_nt3v67Ev
  virtual void  v68(); // _ZN10S3352C3_nt3v68Ev
  virtual void  v69(); // _ZN10S3352C3_nt3v69Ev
  S3352C3_nt(); // tgen
};
//SIG(-1 S3352C3_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]}


 S3352C3_nt ::~S3352C3_nt(){ note_dtor("S3352C3_nt", this);}
void  S3352C3_nt ::v6(){vfunc_called(this, "_ZN10S3352C3_nt2v6Ev");}
void  S3352C3_nt ::v7(){vfunc_called(this, "_ZN10S3352C3_nt2v7Ev");}
void  S3352C3_nt ::v8(){vfunc_called(this, "_ZN10S3352C3_nt2v8Ev");}
void  S3352C3_nt ::v9(){vfunc_called(this, "_ZN10S3352C3_nt2v9Ev");}
void  S3352C3_nt ::v10(){vfunc_called(this, "_ZN10S3352C3_nt3v10Ev");}
void  S3352C3_nt ::v11(){vfunc_called(this, "_ZN10S3352C3_nt3v11Ev");}
void  S3352C3_nt ::v12(){vfunc_called(this, "_ZN10S3352C3_nt3v12Ev");}
void  S3352C3_nt ::v13(){vfunc_called(this, "_ZN10S3352C3_nt3v13Ev");}
void  S3352C3_nt ::v14(){vfunc_called(this, "_ZN10S3352C3_nt3v14Ev");}
void  S3352C3_nt ::v15(){vfunc_called(this, "_ZN10S3352C3_nt3v15Ev");}
void  S3352C3_nt ::v16(){vfunc_called(this, "_ZN10S3352C3_nt3v16Ev");}
void  S3352C3_nt ::v17(){vfunc_called(this, "_ZN10S3352C3_nt3v17Ev");}
void  S3352C3_nt ::v18(){vfunc_called(this, "_ZN10S3352C3_nt3v18Ev");}
void  S3352C3_nt ::v19(){vfunc_called(this, "_ZN10S3352C3_nt3v19Ev");}
void  S3352C3_nt ::v20(){vfunc_called(this, "_ZN10S3352C3_nt3v20Ev");}
void  S3352C3_nt ::v21(){vfunc_called(this, "_ZN10S3352C3_nt3v21Ev");}
void  S3352C3_nt ::v22(){vfunc_called(this, "_ZN10S3352C3_nt3v22Ev");}
void  S3352C3_nt ::v23(){vfunc_called(this, "_ZN10S3352C3_nt3v23Ev");}
void  S3352C3_nt ::v24(){vfunc_called(this, "_ZN10S3352C3_nt3v24Ev");}
void  S3352C3_nt ::v25(){vfunc_called(this, "_ZN10S3352C3_nt3v25Ev");}
void  S3352C3_nt ::v26(){vfunc_called(this, "_ZN10S3352C3_nt3v26Ev");}
void  S3352C3_nt ::v27(){vfunc_called(this, "_ZN10S3352C3_nt3v27Ev");}
void  S3352C3_nt ::v28(){vfunc_called(this, "_ZN10S3352C3_nt3v28Ev");}
void  S3352C3_nt ::v29(){vfunc_called(this, "_ZN10S3352C3_nt3v29Ev");}
void  S3352C3_nt ::v30(){vfunc_called(this, "_ZN10S3352C3_nt3v30Ev");}
void  S3352C3_nt ::v31(){vfunc_called(this, "_ZN10S3352C3_nt3v31Ev");}
void  S3352C3_nt ::v32(){vfunc_called(this, "_ZN10S3352C3_nt3v32Ev");}
void  S3352C3_nt ::v33(){vfunc_called(this, "_ZN10S3352C3_nt3v33Ev");}
void  S3352C3_nt ::v34(){vfunc_called(this, "_ZN10S3352C3_nt3v34Ev");}
void  S3352C3_nt ::v35(){vfunc_called(this, "_ZN10S3352C3_nt3v35Ev");}
void  S3352C3_nt ::v36(){vfunc_called(this, "_ZN10S3352C3_nt3v36Ev");}
void  S3352C3_nt ::v37(){vfunc_called(this, "_ZN10S3352C3_nt3v37Ev");}
void  S3352C3_nt ::v38(){vfunc_called(this, "_ZN10S3352C3_nt3v38Ev");}
void  S3352C3_nt ::v39(){vfunc_called(this, "_ZN10S3352C3_nt3v39Ev");}
void  S3352C3_nt ::v40(){vfunc_called(this, "_ZN10S3352C3_nt3v40Ev");}
void  S3352C3_nt ::v41(){vfunc_called(this, "_ZN10S3352C3_nt3v41Ev");}
void  S3352C3_nt ::v42(){vfunc_called(this, "_ZN10S3352C3_nt3v42Ev");}
void  S3352C3_nt ::v43(){vfunc_called(this, "_ZN10S3352C3_nt3v43Ev");}
void  S3352C3_nt ::v44(){vfunc_called(this, "_ZN10S3352C3_nt3v44Ev");}
void  S3352C3_nt ::v45(){vfunc_called(this, "_ZN10S3352C3_nt3v45Ev");}
void  S3352C3_nt ::v46(){vfunc_called(this, "_ZN10S3352C3_nt3v46Ev");}
void  S3352C3_nt ::v47(){vfunc_called(this, "_ZN10S3352C3_nt3v47Ev");}
void  S3352C3_nt ::v48(){vfunc_called(this, "_ZN10S3352C3_nt3v48Ev");}
void  S3352C3_nt ::v49(){vfunc_called(this, "_ZN10S3352C3_nt3v49Ev");}
void  S3352C3_nt ::v50(){vfunc_called(this, "_ZN10S3352C3_nt3v50Ev");}
void  S3352C3_nt ::v51(){vfunc_called(this, "_ZN10S3352C3_nt3v51Ev");}
void  S3352C3_nt ::v52(){vfunc_called(this, "_ZN10S3352C3_nt3v52Ev");}
void  S3352C3_nt ::v53(){vfunc_called(this, "_ZN10S3352C3_nt3v53Ev");}
void  S3352C3_nt ::v54(){vfunc_called(this, "_ZN10S3352C3_nt3v54Ev");}
void  S3352C3_nt ::v55(){vfunc_called(this, "_ZN10S3352C3_nt3v55Ev");}
void  S3352C3_nt ::v56(){vfunc_called(this, "_ZN10S3352C3_nt3v56Ev");}
void  S3352C3_nt ::v57(){vfunc_called(this, "_ZN10S3352C3_nt3v57Ev");}
void  S3352C3_nt ::v58(){vfunc_called(this, "_ZN10S3352C3_nt3v58Ev");}
void  S3352C3_nt ::v59(){vfunc_called(this, "_ZN10S3352C3_nt3v59Ev");}
void  S3352C3_nt ::v60(){vfunc_called(this, "_ZN10S3352C3_nt3v60Ev");}
void  S3352C3_nt ::v61(){vfunc_called(this, "_ZN10S3352C3_nt3v61Ev");}
void  S3352C3_nt ::v62(){vfunc_called(this, "_ZN10S3352C3_nt3v62Ev");}
void  S3352C3_nt ::v63(){vfunc_called(this, "_ZN10S3352C3_nt3v63Ev");}
void  S3352C3_nt ::v64(){vfunc_called(this, "_ZN10S3352C3_nt3v64Ev");}
void  S3352C3_nt ::v65(){vfunc_called(this, "_ZN10S3352C3_nt3v65Ev");}
void  S3352C3_nt ::v66(){vfunc_called(this, "_ZN10S3352C3_nt3v66Ev");}
void  S3352C3_nt ::v67(){vfunc_called(this, "_ZN10S3352C3_nt3v67Ev");}
void  S3352C3_nt ::v68(){vfunc_called(this, "_ZN10S3352C3_nt3v68Ev");}
void  S3352C3_nt ::v69(){vfunc_called(this, "_ZN10S3352C3_nt3v69Ev");}
S3352C3_nt ::S3352C3_nt(){ note_ctor("S3352C3_nt", this);} // tgen

//skip512 S3352C3_nt

#else // __cplusplus

extern void _ZN10S3352C3_ntC1Ev();
extern void _ZN10S3352C3_ntD1Ev();
Name_Map name_map_S3352C3_nt[] = {
  NSPAIR(_ZN10S3352C3_ntC1Ev),
  NSPAIR(_ZN10S3352C3_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S3352C3_nt[];
extern void _ZN10S3352C3_ntD1Ev();
extern void _ZN10S3352C3_ntD0Ev();
extern void _ZN10S3352C3_nt2v6Ev();
extern void _ZN10S3352C3_nt2v7Ev();
extern void _ZN10S3352C3_nt2v8Ev();
extern void _ZN10S3352C3_nt2v9Ev();
extern void _ZN10S3352C3_nt3v10Ev();
extern void _ZN10S3352C3_nt3v11Ev();
extern void _ZN10S3352C3_nt3v12Ev();
extern void _ZN10S3352C3_nt3v13Ev();
extern void _ZN10S3352C3_nt3v14Ev();
extern void _ZN10S3352C3_nt3v15Ev();
extern void _ZN10S3352C3_nt3v16Ev();
extern void _ZN10S3352C3_nt3v17Ev();
extern void _ZN10S3352C3_nt3v18Ev();
extern void _ZN10S3352C3_nt3v19Ev();
extern void _ZN10S3352C3_nt3v20Ev();
extern void _ZN10S3352C3_nt3v21Ev();
extern void _ZN10S3352C3_nt3v22Ev();
extern void _ZN10S3352C3_nt3v23Ev();
extern void _ZN10S3352C3_nt3v24Ev();
extern void _ZN10S3352C3_nt3v25Ev();
extern void _ZN10S3352C3_nt3v26Ev();
extern void _ZN10S3352C3_nt3v27Ev();
extern void _ZN10S3352C3_nt3v28Ev();
extern void _ZN10S3352C3_nt3v29Ev();
extern void _ZN10S3352C3_nt3v30Ev();
extern void _ZN10S3352C3_nt3v31Ev();
extern void _ZN10S3352C3_nt3v32Ev();
extern void _ZN10S3352C3_nt3v33Ev();
extern void _ZN10S3352C3_nt3v34Ev();
extern void _ZN10S3352C3_nt3v35Ev();
extern void _ZN10S3352C3_nt3v36Ev();
extern void _ZN10S3352C3_nt3v37Ev();
extern void _ZN10S3352C3_nt3v38Ev();
extern void _ZN10S3352C3_nt3v39Ev();
extern void _ZN10S3352C3_nt3v40Ev();
extern void _ZN10S3352C3_nt3v41Ev();
extern void _ZN10S3352C3_nt3v42Ev();
extern void _ZN10S3352C3_nt3v43Ev();
extern void _ZN10S3352C3_nt3v44Ev();
extern void _ZN10S3352C3_nt3v45Ev();
extern void _ZN10S3352C3_nt3v46Ev();
extern void _ZN10S3352C3_nt3v47Ev();
extern void _ZN10S3352C3_nt3v48Ev();
extern void _ZN10S3352C3_nt3v49Ev();
extern void _ZN10S3352C3_nt3v50Ev();
extern void _ZN10S3352C3_nt3v51Ev();
extern void _ZN10S3352C3_nt3v52Ev();
extern void _ZN10S3352C3_nt3v53Ev();
extern void _ZN10S3352C3_nt3v54Ev();
extern void _ZN10S3352C3_nt3v55Ev();
extern void _ZN10S3352C3_nt3v56Ev();
extern void _ZN10S3352C3_nt3v57Ev();
extern void _ZN10S3352C3_nt3v58Ev();
extern void _ZN10S3352C3_nt3v59Ev();
extern void _ZN10S3352C3_nt3v60Ev();
extern void _ZN10S3352C3_nt3v61Ev();
extern void _ZN10S3352C3_nt3v62Ev();
extern void _ZN10S3352C3_nt3v63Ev();
extern void _ZN10S3352C3_nt3v64Ev();
extern void _ZN10S3352C3_nt3v65Ev();
extern void _ZN10S3352C3_nt3v66Ev();
extern void _ZN10S3352C3_nt3v67Ev();
extern void _ZN10S3352C3_nt3v68Ev();
extern void _ZN10S3352C3_nt3v69Ev();
static  VTBL_ENTRY vtc_S3352C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S3352C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S3352C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v41Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v42Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v43Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v44Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v45Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v46Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v47Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v48Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v49Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v50Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v51Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v52Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v53Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v54Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v55Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v56Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v57Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v58Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v59Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v60Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v61Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v62Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v63Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v64Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v65Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v66Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v67Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v68Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v69Ev,
};
extern VTBL_ENTRY _ZTI10S3352C3_nt[];
VTBL_ENTRY *P__ZTI10S3352C3_nt = _ZTI10S3352C3_nt; 
extern  VTBL_ENTRY _ZTV10S3352C3_nt[];
Class_Descriptor cd_S3352C3_nt = {  "S3352C3_nt", // class name
  0,0,//no base classes
  &(vtc_S3352C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI10S3352C3_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S3352C3_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  S3352C7_nt  {
  void *s3352c7f0;
  int s3352c7f1[2];
  void  mf3352c7(); // _ZN10S3352C7_nt8mf3352c7Ev
};
//SIG(-1 S3352C7_nt) C1{ m Fp Fi[2]}


void  S3352C7_nt ::mf3352c7(){}

//skip512 S3352C7_nt

#else // __cplusplus

Class_Descriptor cd_S3352C7_nt = {  "S3352C7_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  S3352C6_nt  : S3352C7_nt {
};
//SIG(-1 S3352C6_nt) C1{ BC2{ m Fp Fi[2]}}



//skip512 S3352C6_nt

#else // __cplusplus

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



//skip512 S3352C5_nt

#else // __cplusplus

extern Class_Descriptor cd_S3352C7_nt;
extern Class_Descriptor cd_S3352C6_nt;
static Base_Class bases_S3352C5_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3352C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3352C6_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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  S3352C8_nt  {
  int s3352c8f0;
  void  mf3352c8(); // _ZN10S3352C8_nt8mf3352c8Ev
};
//SIG(-1 S3352C8_nt) C1{ m Fi}


void  S3352C8_nt ::mf3352c8(){}

//skip512 S3352C8_nt

#else // __cplusplus

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

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

#ifdef __cplusplus

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



static void Test_S3352C12()
{
  extern Class_Descriptor cd_S3352C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S3352C12, buf);
    S3352C12 &lv = *(new (buf) S3352C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S3352C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3352C12)");
    check_base_class_offset(lv, (S3352C7_nt*), 0, "S3352C12");
    test_class_info(&lv, &cd_S3352C12);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3352C12(Test_S3352C12, "S3352C12", ABISELECT(16,12));

#else // __cplusplus

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



static void Test_S3352C11()
{
  extern Class_Descriptor cd_S3352C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S3352C11, buf);
    S3352C11 &lv = *(new (buf) S3352C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S3352C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3352C11)");
    check_base_class_offset(lv, (S3352C7_nt*)(S3352C12*), 0, "S3352C11");
    check_base_class_offset(lv, (S3352C12*), 0, "S3352C11");
    test_class_info(&lv, &cd_S3352C11);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3352C11(Test_S3352C11, "S3352C11", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S3352C7_nt;
extern Class_Descriptor cd_S3352C12;
static Base_Class bases_S3352C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3352C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3352C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S3352C11 = {  "S3352C11", // class name
  bases_S3352C11, 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  S3352C13_nt  {
  int s3352c13f0[3];
  void  mf3352c13(); // _ZN11S3352C13_nt9mf3352c13Ev
};
//SIG(-1 S3352C13_nt) C1{ m Fi[3]}


void  S3352C13_nt ::mf3352c13(){}

//skip512 S3352C13_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_S3352C18()
{
  extern Class_Descriptor cd_S3352C18;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S3352C18, buf);
    S3352C18 &lv = *(new (buf) S3352C18());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S3352C18)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3352C18)");
    check_base_class_offset(lv, (S3352C7_nt*), 0, "S3352C18");
    test_class_info(&lv, &cd_S3352C18);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3352C18(Test_S3352C18, "S3352C18", ABISELECT(16,12));

#else // __cplusplus

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



static void Test_S3352C17()
{
  extern Class_Descriptor cd_S3352C17;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S3352C17, buf);
    S3352C17 &lv = *(new (buf) S3352C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S3352C17)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3352C17)");
    check_base_class_offset(lv, (S3352C7_nt*)(S3352C18*), 0, "S3352C17");
    check_base_class_offset(lv, (S3352C18*), 0, "S3352C17");
    test_class_info(&lv, &cd_S3352C17);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3352C17(Test_S3352C17, "S3352C17", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S3352C7_nt;
extern Class_Descriptor cd_S3352C18;
static Base_Class bases_S3352C17[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3352C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3352C18,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S3352C17 = {  "S3352C17", // class name
  bases_S3352C17, 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  S3352C2_nt  : S3352C3_nt {
  ::S3352C5_nt s3352c2f0;
  ::S3352C5_nt s3352c2f1;
  ::S3352C8_nt s3352c2f2;
  int s3352c2f3;
  char s3352c2f4[4];
  void *s3352c2f5[2];
  ::S3352C5_nt s3352c2f6;
  unsigned int s3352c2f7:1;
  unsigned int s3352c2f8:1;
  unsigned int s3352c2f9:1;
  unsigned int s3352c2f10:1;
  unsigned int s3352c2f11:1;
  unsigned int s3352c2f12:1;
  unsigned int s3352c2f13:1;
  unsigned int s3352c2f14:1;
  unsigned int s3352c2f15:1;
  unsigned int s3352c2f16:1;
  unsigned int s3352c2f17:1;
  unsigned int s3352c2f18:1;
  unsigned int s3352c2f19:1;
  unsigned int s3352c2f20:1;
  unsigned int s3352c2f21:1;
  unsigned int s3352c2f22:1;
  unsigned int s3352c2f23:1;
  unsigned int s3352c2f24:1;
  unsigned int s3352c2f25:1;
  unsigned int s3352c2f26:1;
  unsigned int s3352c2f27:1;
  unsigned int s3352c2f28:1;
  unsigned int s3352c2f29:1;
  unsigned int s3352c2f30:1;
  unsigned int s3352c2f31:1;
  unsigned int s3352c2f32:1;
  unsigned int s3352c2f33:1;
  unsigned int s3352c2f34:1;
  unsigned int s3352c2f35:1;
  unsigned int s3352c2f36:1;
  unsigned int s3352c2f37:1;
  unsigned int s3352c2f38:1;
  unsigned int s3352c2f39:1;
  unsigned int s3352c2f40:1;
  unsigned int s3352c2f41:1;
  unsigned int s3352c2f42:1;
  unsigned int s3352c2f43:1;
  unsigned int s3352c2f44:1;
  unsigned int s3352c2f45:1;
  unsigned int s3352c2f46:1;
  unsigned int s3352c2f47:1;
  unsigned int s3352c2f48:1;
  unsigned int s3352c2f49:1;
  unsigned int s3352c2f50:1;
  unsigned int s3352c2f51:1;
  unsigned int s3352c2f52:1;
  unsigned int s3352c2f53:1;
  unsigned int s3352c2f54:1;
  unsigned int s3352c2f55:1;
  unsigned int s3352c2f56:1;
  unsigned int s3352c2f57:1;
  unsigned int s3352c2f58:1;
  unsigned int s3352c2f59:1;
  unsigned int s3352c2f60:1;
  unsigned int s3352c2f61:1;
  unsigned int s3352c2f62:1;
  unsigned int s3352c2f63:1;
  unsigned int s3352c2f64:1;
  unsigned int s3352c2f65:1;
  unsigned int s3352c2f66:1;
  unsigned int s3352c2f67:1;
  unsigned int s3352c2f68:1;
  unsigned int s3352c2f69:1;
  unsigned int s3352c2f70:1;
  unsigned int s3352c2f71:1;
  unsigned int s3352c2f72:1;
  unsigned int s3352c2f73:1;
  unsigned int s3352c2f74:1;
  unsigned int s3352c2f75:1;
  unsigned int s3352c2f76:1;
  unsigned int s3352c2f77:1;
  unsigned int s3352c2f78:1;
  unsigned int s3352c2f79:1;
  unsigned int s3352c2f80:1;
  unsigned int s3352c2f81:1;
  unsigned int s3352c2f82:1;
  unsigned int s3352c2f83:1;
  int s3352c2f84[5];
  void *s3352c2f85[2];
  int s3352c2f86[3];
  ::S3352C4_nt s3352c2f87;
  ::S3352C4_nt s3352c2f88;
  ::S3352C4_nt s3352c2f89;
  ::S3352C11 s3352c2f90;
  ::S3352C11 s3352c2f91;
  int s3352c2f92;
  void *s3352c2f93[2];
  ::S3352C13_nt s3352c2f94;
  ::S3352C13_nt s3352c2f95;
  ::S3352C13_nt s3352c2f96;
  ::S3352C13_nt s3352c2f97;
  void *s3352c2f98;
  ::S3352C4_nt s3352c2f99;
  ::S3352C11 s3352c2f100;
  ::S3352C13_nt s3352c2f101;
  ::S3352C13_nt s3352c2f102;
  int s3352c2f103;
  ::S3352C13_nt s3352c2f104;
  ::S3352C13_nt s3352c2f105;
  void *s3352c2f106;
  int s3352c2f107;
  char s3352c2f108;
  ::S3352C13_nt s3352c2f109;
  ::S3352C13_nt s3352c2f110;
  void *s3352c2f111;
  int s3352c2f112;
  void *s3352c2f113;
  ::S3352C11 s3352c2f114;
  ::S3352C17 s3352c2f115;
  ::S3352C17 s3352c2f116;
  virtual  ~S3352C2_nt(); // _ZN10S3352C2_ntD1Ev
  virtual void  v70(); // _ZN10S3352C2_nt3v70Ev
  virtual void  v71(); // _ZN10S3352C2_nt3v71Ev
  virtual void  v72(); // _ZN10S3352C2_nt3v72Ev
  virtual void  v73(); // _ZN10S3352C2_nt3v73Ev
  virtual void  v74(); // _ZN10S3352C2_nt3v74Ev
  virtual void  v75(); // _ZN10S3352C2_nt3v75Ev
  virtual void  v76(); // _ZN10S3352C2_nt3v76Ev
  virtual void  v77(); // _ZN10S3352C2_nt3v77Ev
  virtual void  v78(); // _ZN10S3352C2_nt3v78Ev
  virtual void  v79(); // _ZN10S3352C2_nt3v79Ev
  virtual void  v80(); // _ZN10S3352C2_nt3v80Ev
  virtual void  v81(); // _ZN10S3352C2_nt3v81Ev
  virtual void  v82(); // _ZN10S3352C2_nt3v82Ev
  virtual void  v83(); // _ZN10S3352C2_nt3v83Ev
  virtual void  v84(); // _ZN10S3352C2_nt3v84Ev
  virtual void  v85(); // _ZN10S3352C2_nt3v85Ev
  virtual void  v86(); // _ZN10S3352C2_nt3v86Ev
  virtual void  v87(); // _ZN10S3352C2_nt3v87Ev
  virtual void  v88(); // _ZN10S3352C2_nt3v88Ev
  virtual void  v89(); // _ZN10S3352C2_nt3v89Ev
  virtual void  v90(); // _ZN10S3352C2_nt3v90Ev
  virtual void  v91(); // _ZN10S3352C2_nt3v91Ev
  virtual void  v92(); // _ZN10S3352C2_nt3v92Ev
  virtual void  v93(); // _ZN10S3352C2_nt3v93Ev
  virtual void  v94(); // _ZN10S3352C2_nt3v94Ev
  virtual void  v95(); // _ZN10S3352C2_nt3v95Ev
  virtual void  v96(); // _ZN10S3352C2_nt3v96Ev
  virtual void  v97(); // _ZN10S3352C2_nt3v97Ev
  virtual void  v98(); // _ZN10S3352C2_nt3v98Ev
  virtual void  v99(); // _ZN10S3352C2_nt3v99Ev
  virtual void  v100(); // _ZN10S3352C2_nt4v100Ev
  virtual void  v101(); // _ZN10S3352C2_nt4v101Ev
  virtual void  v102(); // _ZN10S3352C2_nt4v102Ev
  virtual void  v103(); // _ZN10S3352C2_nt4v103Ev
  virtual void  v104(); // _ZN10S3352C2_nt4v104Ev
  virtual void  v105(); // _ZN10S3352C2_nt4v105Ev
  virtual void  v106(); // _ZN10S3352C2_nt4v106Ev
  virtual void  v107(); // _ZN10S3352C2_nt4v107Ev
  virtual void  v108(); // _ZN10S3352C2_nt4v108Ev
  virtual void  v109(); // _ZN10S3352C2_nt4v109Ev
  virtual void  v110(); // _ZN10S3352C2_nt4v110Ev
  virtual void  v111(); // _ZN10S3352C2_nt4v111Ev
  virtual void  v112(); // _ZN10S3352C2_nt4v112Ev
  virtual void  v113(); // _ZN10S3352C2_nt4v113Ev
  virtual void  v114(); // _ZN10S3352C2_nt4v114Ev
  virtual void  v115(); // _ZN10S3352C2_nt4v115Ev
  virtual void  v116(); // _ZN10S3352C2_nt4v116Ev
  virtual void  v117(); // _ZN10S3352C2_nt4v117Ev
  virtual void  v118(); // _ZN10S3352C2_nt4v118Ev
  virtual void  v119(); // _ZN10S3352C2_nt4v119Ev
  virtual void  v120(); // _ZN10S3352C2_nt4v120Ev
  virtual void  v121(); // _ZN10S3352C2_nt4v121Ev
  virtual void  v122(); // _ZN10S3352C2_nt4v122Ev
  virtual void  v123(); // _ZN10S3352C2_nt4v123Ev
  virtual void  v124(); // _ZN10S3352C2_nt4v124Ev
  virtual void  v125(); // _ZN10S3352C2_nt4v125Ev
  virtual void  v126(); // _ZN10S3352C2_nt4v126Ev
  virtual void  v127(); // _ZN10S3352C2_nt4v127Ev
  virtual void  v128(); // _ZN10S3352C2_nt4v128Ev
  virtual void  v129(); // _ZN10S3352C2_nt4v129Ev
  virtual void  v130(); // _ZN10S3352C2_nt4v130Ev
  virtual void  v131(); // _ZN10S3352C2_nt4v131Ev
  virtual void  v132(); // _ZN10S3352C2_nt4v132Ev
  virtual void  v133(); // _ZN10S3352C2_nt4v133Ev
  virtual void  v134(); // _ZN10S3352C2_nt4v134Ev
  virtual void  v135(); // _ZN10S3352C2_nt4v135Ev
  virtual void  v136(); // _ZN10S3352C2_nt4v136Ev
  virtual void  v137(); // _ZN10S3352C2_nt4v137Ev
  virtual void  v138(); // _ZN10S3352C2_nt4v138Ev
  virtual void  v139(); // _ZN10S3352C2_nt4v139Ev
  virtual void  v140(); // _ZN10S3352C2_nt4v140Ev
  virtual void  v141(); // _ZN10S3352C2_nt4v141Ev
  virtual void  v142(); // _ZN10S3352C2_nt4v142Ev
  virtual void  v143(); // _ZN10S3352C2_nt4v143Ev
  virtual void  v144(); // _ZN10S3352C2_nt4v144Ev
  virtual void  v145(); // _ZN10S3352C2_nt4v145Ev
  virtual void  v146(); // _ZN10S3352C2_nt4v146Ev
  virtual void  v147(); // _ZN10S3352C2_nt4v147Ev
  virtual void  v148(); // _ZN10S3352C2_nt4v148Ev
  virtual void  v149(); // _ZN10S3352C2_nt4v149Ev
  virtual void  v150(); // _ZN10S3352C2_nt4v150Ev
  virtual void  v151(); // _ZN10S3352C2_nt4v151Ev
  virtual void  v152(); // _ZN10S3352C2_nt4v152Ev
  virtual void  v153(); // _ZN10S3352C2_nt4v153Ev
  virtual void  v154(); // _ZN10S3352C2_nt4v154Ev
  virtual void  v155(); // _ZN10S3352C2_nt4v155Ev
  virtual void  v156(); // _ZN10S3352C2_nt4v156Ev
  virtual void  v157(); // _ZN10S3352C2_nt4v157Ev
  virtual void  v158(); // _ZN10S3352C2_nt4v158Ev
  virtual void  v159(); // _ZN10S3352C2_nt4v159Ev
  virtual void  v160(); // _ZN10S3352C2_nt4v160Ev
  virtual void  v161(); // _ZN10S3352C2_nt4v161Ev
  virtual void  v162(); // _ZN10S3352C2_nt4v162Ev
  virtual void  v163(); // _ZN10S3352C2_nt4v163Ev
  virtual void  v164(); // _ZN10S3352C2_nt4v164Ev
  virtual void  v165(); // _ZN10S3352C2_nt4v165Ev
  virtual void  v166(); // _ZN10S3352C2_nt4v166Ev
  virtual void  v167(); // _ZN10S3352C2_nt4v167Ev
  virtual void  v168(); // _ZN10S3352C2_nt4v168Ev
  virtual void  v169(); // _ZN10S3352C2_nt4v169Ev
  virtual void  v170(); // _ZN10S3352C2_nt4v170Ev
  virtual void  v171(); // _ZN10S3352C2_nt4v171Ev
  virtual void  v172(); // _ZN10S3352C2_nt4v172Ev
  virtual void  v173(); // _ZN10S3352C2_nt4v173Ev
  virtual void  v174(); // _ZN10S3352C2_nt4v174Ev
  virtual void  v175(); // _ZN10S3352C2_nt4v175Ev
  virtual void  v176(); // _ZN10S3352C2_nt4v176Ev
  virtual void  v177(); // _ZN10S3352C2_nt4v177Ev
  virtual void  v178(); // _ZN10S3352C2_nt4v178Ev
  virtual void  v179(); // _ZN10S3352C2_nt4v179Ev
  virtual void  v180(); // _ZN10S3352C2_nt4v180Ev
  virtual void  v181(); // _ZN10S3352C2_nt4v181Ev
  virtual void  v182(); // _ZN10S3352C2_nt4v182Ev
  virtual void  v183(); // _ZN10S3352C2_nt4v183Ev
  virtual void  v184(); // _ZN10S3352C2_nt4v184Ev
  virtual void  v185(); // _ZN10S3352C2_nt4v185Ev
  virtual void  v186(); // _ZN10S3352C2_nt4v186Ev
  virtual void  v187(); // _ZN10S3352C2_nt4v187Ev
  virtual void  v188(); // _ZN10S3352C2_nt4v188Ev
  virtual void  v189(); // _ZN10S3352C2_nt4v189Ev
  virtual void  v190(); // _ZN10S3352C2_nt4v190Ev
  virtual void  v191(); // _ZN10S3352C2_nt4v191Ev
  virtual void  v192(); // _ZN10S3352C2_nt4v192Ev
  virtual void  v193(); // _ZN10S3352C2_nt4v193Ev
  virtual void  v194(); // _ZN10S3352C2_nt4v194Ev
  virtual void  v195(); // _ZN10S3352C2_nt4v195Ev
  virtual void  v196(); // _ZN10S3352C2_nt4v196Ev
  virtual void  v197(); // _ZN10S3352C2_nt4v197Ev
  virtual void  v198(); // _ZN10S3352C2_nt4v198Ev
  virtual void  v199(); // _ZN10S3352C2_nt4v199Ev
  virtual void  v200(); // _ZN10S3352C2_nt4v200Ev
  virtual void  v201(); // _ZN10S3352C2_nt4v201Ev
  virtual void  v202(); // _ZN10S3352C2_nt4v202Ev
  virtual void  v203(); // _ZN10S3352C2_nt4v203Ev
  virtual void  v204(); // _ZN10S3352C2_nt4v204Ev
  virtual void  v205(); // _ZN10S3352C2_nt4v205Ev
  virtual void  v206(); // _ZN10S3352C2_nt4v206Ev
  virtual void  v207(); // _ZN10S3352C2_nt4v207Ev
  virtual void  v208(); // _ZN10S3352C2_nt4v208Ev
  virtual void  v209(); // _ZN10S3352C2_nt4v209Ev
  virtual void  v210(); // _ZN10S3352C2_nt4v210Ev
  virtual void  v211(); // _ZN10S3352C2_nt4v211Ev
  virtual void  v212(); // _ZN10S3352C2_nt4v212Ev
  S3352C2_nt(); // tgen
};
//SIG(-1 S3352C2_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}


 S3352C2_nt ::~S3352C2_nt(){ note_dtor("S3352C2_nt", this);}
void  S3352C2_nt ::v70(){vfunc_called(this, "_ZN10S3352C2_nt3v70Ev");}
void  S3352C2_nt ::v71(){vfunc_called(this, "_ZN10S3352C2_nt3v71Ev");}
void  S3352C2_nt ::v72(){vfunc_called(this, "_ZN10S3352C2_nt3v72Ev");}
void  S3352C2_nt ::v73(){vfunc_called(this, "_ZN10S3352C2_nt3v73Ev");}
void  S3352C2_nt ::v74(){vfunc_called(this, "_ZN10S3352C2_nt3v74Ev");}
void  S3352C2_nt ::v75(){vfunc_called(this, "_ZN10S3352C2_nt3v75Ev");}
void  S3352C2_nt ::v76(){vfunc_called(this, "_ZN10S3352C2_nt3v76Ev");}
void  S3352C2_nt ::v77(){vfunc_called(this, "_ZN10S3352C2_nt3v77Ev");}
void  S3352C2_nt ::v78(){vfunc_called(this, "_ZN10S3352C2_nt3v78Ev");}
void  S3352C2_nt ::v79(){vfunc_called(this, "_ZN10S3352C2_nt3v79Ev");}
void  S3352C2_nt ::v80(){vfunc_called(this, "_ZN10S3352C2_nt3v80Ev");}
void  S3352C2_nt ::v81(){vfunc_called(this, "_ZN10S3352C2_nt3v81Ev");}
void  S3352C2_nt ::v82(){vfunc_called(this, "_ZN10S3352C2_nt3v82Ev");}
void  S3352C2_nt ::v83(){vfunc_called(this, "_ZN10S3352C2_nt3v83Ev");}
void  S3352C2_nt ::v84(){vfunc_called(this, "_ZN10S3352C2_nt3v84Ev");}
void  S3352C2_nt ::v85(){vfunc_called(this, "_ZN10S3352C2_nt3v85Ev");}
void  S3352C2_nt ::v86(){vfunc_called(this, "_ZN10S3352C2_nt3v86Ev");}
void  S3352C2_nt ::v87(){vfunc_called(this, "_ZN10S3352C2_nt3v87Ev");}
void  S3352C2_nt ::v88(){vfunc_called(this, "_ZN10S3352C2_nt3v88Ev");}
void  S3352C2_nt ::v89(){vfunc_called(this, "_ZN10S3352C2_nt3v89Ev");}
void  S3352C2_nt ::v90(){vfunc_called(this, "_ZN10S3352C2_nt3v90Ev");}
void  S3352C2_nt ::v91(){vfunc_called(this, "_ZN10S3352C2_nt3v91Ev");}
void  S3352C2_nt ::v92(){vfunc_called(this, "_ZN10S3352C2_nt3v92Ev");}
void  S3352C2_nt ::v93(){vfunc_called(this, "_ZN10S3352C2_nt3v93Ev");}
void  S3352C2_nt ::v94(){vfunc_called(this, "_ZN10S3352C2_nt3v94Ev");}
void  S3352C2_nt ::v95(){vfunc_called(this, "_ZN10S3352C2_nt3v95Ev");}
void  S3352C2_nt ::v96(){vfunc_called(this, "_ZN10S3352C2_nt3v96Ev");}
void  S3352C2_nt ::v97(){vfunc_called(this, "_ZN10S3352C2_nt3v97Ev");}
void  S3352C2_nt ::v98(){vfunc_called(this, "_ZN10S3352C2_nt3v98Ev");}
void  S3352C2_nt ::v99(){vfunc_called(this, "_ZN10S3352C2_nt3v99Ev");}
void  S3352C2_nt ::v100(){vfunc_called(this, "_ZN10S3352C2_nt4v100Ev");}
void  S3352C2_nt ::v101(){vfunc_called(this, "_ZN10S3352C2_nt4v101Ev");}
void  S3352C2_nt ::v102(){vfunc_called(this, "_ZN10S3352C2_nt4v102Ev");}
void  S3352C2_nt ::v103(){vfunc_called(this, "_ZN10S3352C2_nt4v103Ev");}
void  S3352C2_nt ::v104(){vfunc_called(this, "_ZN10S3352C2_nt4v104Ev");}
void  S3352C2_nt ::v105(){vfunc_called(this, "_ZN10S3352C2_nt4v105Ev");}
void  S3352C2_nt ::v106(){vfunc_called(this, "_ZN10S3352C2_nt4v106Ev");}
void  S3352C2_nt ::v107(){vfunc_called(this, "_ZN10S3352C2_nt4v107Ev");}
void  S3352C2_nt ::v108(){vfunc_called(this, "_ZN10S3352C2_nt4v108Ev");}
void  S3352C2_nt ::v109(){vfunc_called(this, "_ZN10S3352C2_nt4v109Ev");}
void  S3352C2_nt ::v110(){vfunc_called(this, "_ZN10S3352C2_nt4v110Ev");}
void  S3352C2_nt ::v111(){vfunc_called(this, "_ZN10S3352C2_nt4v111Ev");}
void  S3352C2_nt ::v112(){vfunc_called(this, "_ZN10S3352C2_nt4v112Ev");}
void  S3352C2_nt ::v113(){vfunc_called(this, "_ZN10S3352C2_nt4v113Ev");}
void  S3352C2_nt ::v114(){vfunc_called(this, "_ZN10S3352C2_nt4v114Ev");}
void  S3352C2_nt ::v115(){vfunc_called(this, "_ZN10S3352C2_nt4v115Ev");}
void  S3352C2_nt ::v116(){vfunc_called(this, "_ZN10S3352C2_nt4v116Ev");}
void  S3352C2_nt ::v117(){vfunc_called(this, "_ZN10S3352C2_nt4v117Ev");}
void  S3352C2_nt ::v118(){vfunc_called(this, "_ZN10S3352C2_nt4v118Ev");}
void  S3352C2_nt ::v119(){vfunc_called(this, "_ZN10S3352C2_nt4v119Ev");}
void  S3352C2_nt ::v120(){vfunc_called(this, "_ZN10S3352C2_nt4v120Ev");}
void  S3352C2_nt ::v121(){vfunc_called(this, "_ZN10S3352C2_nt4v121Ev");}
void  S3352C2_nt ::v122(){vfunc_called(this, "_ZN10S3352C2_nt4v122Ev");}
void  S3352C2_nt ::v123(){vfunc_called(this, "_ZN10S3352C2_nt4v123Ev");}
void  S3352C2_nt ::v124(){vfunc_called(this, "_ZN10S3352C2_nt4v124Ev");}
void  S3352C2_nt ::v125(){vfunc_called(this, "_ZN10S3352C2_nt4v125Ev");}
void  S3352C2_nt ::v126(){vfunc_called(this, "_ZN10S3352C2_nt4v126Ev");}
void  S3352C2_nt ::v127(){vfunc_called(this, "_ZN10S3352C2_nt4v127Ev");}
void  S3352C2_nt ::v128(){vfunc_called(this, "_ZN10S3352C2_nt4v128Ev");}
void  S3352C2_nt ::v129(){vfunc_called(this, "_ZN10S3352C2_nt4v129Ev");}
void  S3352C2_nt ::v130(){vfunc_called(this, "_ZN10S3352C2_nt4v130Ev");}
void  S3352C2_nt ::v131(){vfunc_called(this, "_ZN10S3352C2_nt4v131Ev");}
void  S3352C2_nt ::v132(){vfunc_called(this, "_ZN10S3352C2_nt4v132Ev");}
void  S3352C2_nt ::v133(){vfunc_called(this, "_ZN10S3352C2_nt4v133Ev");}
void  S3352C2_nt ::v134(){vfunc_called(this, "_ZN10S3352C2_nt4v134Ev");}
void  S3352C2_nt ::v135(){vfunc_called(this, "_ZN10S3352C2_nt4v135Ev");}
void  S3352C2_nt ::v136(){vfunc_called(this, "_ZN10S3352C2_nt4v136Ev");}
void  S3352C2_nt ::v137(){vfunc_called(this, "_ZN10S3352C2_nt4v137Ev");}
void  S3352C2_nt ::v138(){vfunc_called(this, "_ZN10S3352C2_nt4v138Ev");}
void  S3352C2_nt ::v139(){vfunc_called(this, "_ZN10S3352C2_nt4v139Ev");}
void  S3352C2_nt ::v140(){vfunc_called(this, "_ZN10S3352C2_nt4v140Ev");}
void  S3352C2_nt ::v141(){vfunc_called(this, "_ZN10S3352C2_nt4v141Ev");}
void  S3352C2_nt ::v142(){vfunc_called(this, "_ZN10S3352C2_nt4v142Ev");}
void  S3352C2_nt ::v143(){vfunc_called(this, "_ZN10S3352C2_nt4v143Ev");}
void  S3352C2_nt ::v144(){vfunc_called(this, "_ZN10S3352C2_nt4v144Ev");}
void  S3352C2_nt ::v145(){vfunc_called(this, "_ZN10S3352C2_nt4v145Ev");}
void  S3352C2_nt ::v146(){vfunc_called(this, "_ZN10S3352C2_nt4v146Ev");}
void  S3352C2_nt ::v147(){vfunc_called(this, "_ZN10S3352C2_nt4v147Ev");}
void  S3352C2_nt ::v148(){vfunc_called(this, "_ZN10S3352C2_nt4v148Ev");}
void  S3352C2_nt ::v149(){vfunc_called(this, "_ZN10S3352C2_nt4v149Ev");}
void  S3352C2_nt ::v150(){vfunc_called(this, "_ZN10S3352C2_nt4v150Ev");}
void  S3352C2_nt ::v151(){vfunc_called(this, "_ZN10S3352C2_nt4v151Ev");}
void  S3352C2_nt ::v152(){vfunc_called(this, "_ZN10S3352C2_nt4v152Ev");}
void  S3352C2_nt ::v153(){vfunc_called(this, "_ZN10S3352C2_nt4v153Ev");}
void  S3352C2_nt ::v154(){vfunc_called(this, "_ZN10S3352C2_nt4v154Ev");}
void  S3352C2_nt ::v155(){vfunc_called(this, "_ZN10S3352C2_nt4v155Ev");}
void  S3352C2_nt ::v156(){vfunc_called(this, "_ZN10S3352C2_nt4v156Ev");}
void  S3352C2_nt ::v157(){vfunc_called(this, "_ZN10S3352C2_nt4v157Ev");}
void  S3352C2_nt ::v158(){vfunc_called(this, "_ZN10S3352C2_nt4v158Ev");}
void  S3352C2_nt ::v159(){vfunc_called(this, "_ZN10S3352C2_nt4v159Ev");}
void  S3352C2_nt ::v160(){vfunc_called(this, "_ZN10S3352C2_nt4v160Ev");}
void  S3352C2_nt ::v161(){vfunc_called(this, "_ZN10S3352C2_nt4v161Ev");}
void  S3352C2_nt ::v162(){vfunc_called(this, "_ZN10S3352C2_nt4v162Ev");}
void  S3352C2_nt ::v163(){vfunc_called(this, "_ZN10S3352C2_nt4v163Ev");}
void  S3352C2_nt ::v164(){vfunc_called(this, "_ZN10S3352C2_nt4v164Ev");}
void  S3352C2_nt ::v165(){vfunc_called(this, "_ZN10S3352C2_nt4v165Ev");}
void  S3352C2_nt ::v166(){vfunc_called(this, "_ZN10S3352C2_nt4v166Ev");}
void  S3352C2_nt ::v167(){vfunc_called(this, "_ZN10S3352C2_nt4v167Ev");}
void  S3352C2_nt ::v168(){vfunc_called(this, "_ZN10S3352C2_nt4v168Ev");}
void  S3352C2_nt ::v169(){vfunc_called(this, "_ZN10S3352C2_nt4v169Ev");}
void  S3352C2_nt ::v170(){vfunc_called(this, "_ZN10S3352C2_nt4v170Ev");}
void  S3352C2_nt ::v171(){vfunc_called(this, "_ZN10S3352C2_nt4v171Ev");}
void  S3352C2_nt ::v172(){vfunc_called(this, "_ZN10S3352C2_nt4v172Ev");}
void  S3352C2_nt ::v173(){vfunc_called(this, "_ZN10S3352C2_nt4v173Ev");}
void  S3352C2_nt ::v174(){vfunc_called(this, "_ZN10S3352C2_nt4v174Ev");}
void  S3352C2_nt ::v175(){vfunc_called(this, "_ZN10S3352C2_nt4v175Ev");}
void  S3352C2_nt ::v176(){vfunc_called(this, "_ZN10S3352C2_nt4v176Ev");}
void  S3352C2_nt ::v177(){vfunc_called(this, "_ZN10S3352C2_nt4v177Ev");}
void  S3352C2_nt ::v178(){vfunc_called(this, "_ZN10S3352C2_nt4v178Ev");}
void  S3352C2_nt ::v179(){vfunc_called(this, "_ZN10S3352C2_nt4v179Ev");}
void  S3352C2_nt ::v180(){vfunc_called(this, "_ZN10S3352C2_nt4v180Ev");}
void  S3352C2_nt ::v181(){vfunc_called(this, "_ZN10S3352C2_nt4v181Ev");}
void  S3352C2_nt ::v182(){vfunc_called(this, "_ZN10S3352C2_nt4v182Ev");}
void  S3352C2_nt ::v183(){vfunc_called(this, "_ZN10S3352C2_nt4v183Ev");}
void  S3352C2_nt ::v184(){vfunc_called(this, "_ZN10S3352C2_nt4v184Ev");}
void  S3352C2_nt ::v185(){vfunc_called(this, "_ZN10S3352C2_nt4v185Ev");}
void  S3352C2_nt ::v186(){vfunc_called(this, "_ZN10S3352C2_nt4v186Ev");}
void  S3352C2_nt ::v187(){vfunc_called(this, "_ZN10S3352C2_nt4v187Ev");}
void  S3352C2_nt ::v188(){vfunc_called(this, "_ZN10S3352C2_nt4v188Ev");}
void  S3352C2_nt ::v189(){vfunc_called(this, "_ZN10S3352C2_nt4v189Ev");}
void  S3352C2_nt ::v190(){vfunc_called(this, "_ZN10S3352C2_nt4v190Ev");}
void  S3352C2_nt ::v191(){vfunc_called(this, "_ZN10S3352C2_nt4v191Ev");}
void  S3352C2_nt ::v192(){vfunc_called(this, "_ZN10S3352C2_nt4v192Ev");}
void  S3352C2_nt ::v193(){vfunc_called(this, "_ZN10S3352C2_nt4v193Ev");}
void  S3352C2_nt ::v194(){vfunc_called(this, "_ZN10S3352C2_nt4v194Ev");}
void  S3352C2_nt ::v195(){vfunc_called(this, "_ZN10S3352C2_nt4v195Ev");}
void  S3352C2_nt ::v196(){vfunc_called(this, "_ZN10S3352C2_nt4v196Ev");}
void  S3352C2_nt ::v197(){vfunc_called(this, "_ZN10S3352C2_nt4v197Ev");}
void  S3352C2_nt ::v198(){vfunc_called(this, "_ZN10S3352C2_nt4v198Ev");}
void  S3352C2_nt ::v199(){vfunc_called(this, "_ZN10S3352C2_nt4v199Ev");}
void  S3352C2_nt ::v200(){vfunc_called(this, "_ZN10S3352C2_nt4v200Ev");}
void  S3352C2_nt ::v201(){vfunc_called(this, "_ZN10S3352C2_nt4v201Ev");}
void  S3352C2_nt ::v202(){vfunc_called(this, "_ZN10S3352C2_nt4v202Ev");}
void  S3352C2_nt ::v203(){vfunc_called(this, "_ZN10S3352C2_nt4v203Ev");}
void  S3352C2_nt ::v204(){vfunc_called(this, "_ZN10S3352C2_nt4v204Ev");}
void  S3352C2_nt ::v205(){vfunc_called(this, "_ZN10S3352C2_nt4v205Ev");}
void  S3352C2_nt ::v206(){vfunc_called(this, "_ZN10S3352C2_nt4v206Ev");}
void  S3352C2_nt ::v207(){vfunc_called(this, "_ZN10S3352C2_nt4v207Ev");}
void  S3352C2_nt ::v208(){vfunc_called(this, "_ZN10S3352C2_nt4v208Ev");}
void  S3352C2_nt ::v209(){vfunc_called(this, "_ZN10S3352C2_nt4v209Ev");}
void  S3352C2_nt ::v210(){vfunc_called(this, "_ZN10S3352C2_nt4v210Ev");}
void  S3352C2_nt ::v211(){vfunc_called(this, "_ZN10S3352C2_nt4v211Ev");}
void  S3352C2_nt ::v212(){vfunc_called(this, "_ZN10S3352C2_nt4v212Ev");}
S3352C2_nt ::S3352C2_nt(){ note_ctor("S3352C2_nt", this);} // tgen

//skip512 S3352C2_nt

#else // __cplusplus

extern void _ZN10S3352C2_ntC1Ev();
extern void _ZN10S3352C2_ntD1Ev();
Name_Map name_map_S3352C2_nt[] = {
  NSPAIR(_ZN10S3352C2_ntC1Ev),
  NSPAIR(_ZN10S3352C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3352C3_nt;
extern VTBL_ENTRY _ZTI10S3352C3_nt[];
extern  VTBL_ENTRY _ZTV10S3352C3_nt[];
static Base_Class bases_S3352C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3352C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S3352C2_nt[];
extern void _ZN10S3352C2_ntD1Ev();
extern void _ZN10S3352C2_ntD0Ev();
extern void _ZN10S3352C3_nt2v6Ev();
extern void _ZN10S3352C3_nt2v7Ev();
extern void _ZN10S3352C3_nt2v8Ev();
extern void _ZN10S3352C3_nt2v9Ev();
extern void _ZN10S3352C3_nt3v10Ev();
extern void _ZN10S3352C3_nt3v11Ev();
extern void _ZN10S3352C3_nt3v12Ev();
extern void _ZN10S3352C3_nt3v13Ev();
extern void _ZN10S3352C3_nt3v14Ev();
extern void _ZN10S3352C3_nt3v15Ev();
extern void _ZN10S3352C3_nt3v16Ev();
extern void _ZN10S3352C3_nt3v17Ev();
extern void _ZN10S3352C3_nt3v18Ev();
extern void _ZN10S3352C3_nt3v19Ev();
extern void _ZN10S3352C3_nt3v20Ev();
extern void _ZN10S3352C3_nt3v21Ev();
extern void _ZN10S3352C3_nt3v22Ev();
extern void _ZN10S3352C3_nt3v23Ev();
extern void _ZN10S3352C3_nt3v24Ev();
extern void _ZN10S3352C3_nt3v25Ev();
extern void _ZN10S3352C3_nt3v26Ev();
extern void _ZN10S3352C3_nt3v27Ev();
extern void _ZN10S3352C3_nt3v28Ev();
extern void _ZN10S3352C3_nt3v29Ev();
extern void _ZN10S3352C3_nt3v30Ev();
extern void _ZN10S3352C3_nt3v31Ev();
extern void _ZN10S3352C3_nt3v32Ev();
extern void _ZN10S3352C3_nt3v33Ev();
extern void _ZN10S3352C3_nt3v34Ev();
extern void _ZN10S3352C3_nt3v35Ev();
extern void _ZN10S3352C3_nt3v36Ev();
extern void _ZN10S3352C3_nt3v37Ev();
extern void _ZN10S3352C3_nt3v38Ev();
extern void _ZN10S3352C3_nt3v39Ev();
extern void _ZN10S3352C3_nt3v40Ev();
extern void _ZN10S3352C3_nt3v41Ev();
extern void _ZN10S3352C3_nt3v42Ev();
extern void _ZN10S3352C3_nt3v43Ev();
extern void _ZN10S3352C3_nt3v44Ev();
extern void _ZN10S3352C3_nt3v45Ev();
extern void _ZN10S3352C3_nt3v46Ev();
extern void _ZN10S3352C3_nt3v47Ev();
extern void _ZN10S3352C3_nt3v48Ev();
extern void _ZN10S3352C3_nt3v49Ev();
extern void _ZN10S3352C3_nt3v50Ev();
extern void _ZN10S3352C3_nt3v51Ev();
extern void _ZN10S3352C3_nt3v52Ev();
extern void _ZN10S3352C3_nt3v53Ev();
extern void _ZN10S3352C3_nt3v54Ev();
extern void _ZN10S3352C3_nt3v55Ev();
extern void _ZN10S3352C3_nt3v56Ev();
extern void _ZN10S3352C3_nt3v57Ev();
extern void _ZN10S3352C3_nt3v58Ev();
extern void _ZN10S3352C3_nt3v59Ev();
extern void _ZN10S3352C3_nt3v60Ev();
extern void _ZN10S3352C3_nt3v61Ev();
extern void _ZN10S3352C3_nt3v62Ev();
extern void _ZN10S3352C3_nt3v63Ev();
extern void _ZN10S3352C3_nt3v64Ev();
extern void _ZN10S3352C3_nt3v65Ev();
extern void _ZN10S3352C3_nt3v66Ev();
extern void _ZN10S3352C3_nt3v67Ev();
extern void _ZN10S3352C3_nt3v68Ev();
extern void _ZN10S3352C3_nt3v69Ev();
extern void _ZN10S3352C2_nt3v70Ev();
extern void _ZN10S3352C2_nt3v71Ev();
extern void _ZN10S3352C2_nt3v72Ev();
extern void _ZN10S3352C2_nt3v73Ev();
extern void _ZN10S3352C2_nt3v74Ev();
extern void _ZN10S3352C2_nt3v75Ev();
extern void _ZN10S3352C2_nt3v76Ev();
extern void _ZN10S3352C2_nt3v77Ev();
extern void _ZN10S3352C2_nt3v78Ev();
extern void _ZN10S3352C2_nt3v79Ev();
extern void _ZN10S3352C2_nt3v80Ev();
extern void _ZN10S3352C2_nt3v81Ev();
extern void _ZN10S3352C2_nt3v82Ev();
extern void _ZN10S3352C2_nt3v83Ev();
extern void _ZN10S3352C2_nt3v84Ev();
extern void _ZN10S3352C2_nt3v85Ev();
extern void _ZN10S3352C2_nt3v86Ev();
extern void _ZN10S3352C2_nt3v87Ev();
extern void _ZN10S3352C2_nt3v88Ev();
extern void _ZN10S3352C2_nt3v89Ev();
extern void _ZN10S3352C2_nt3v90Ev();
extern void _ZN10S3352C2_nt3v91Ev();
extern void _ZN10S3352C2_nt3v92Ev();
extern void _ZN10S3352C2_nt3v93Ev();
extern void _ZN10S3352C2_nt3v94Ev();
extern void _ZN10S3352C2_nt3v95Ev();
extern void _ZN10S3352C2_nt3v96Ev();
extern void _ZN10S3352C2_nt3v97Ev();
extern void _ZN10S3352C2_nt3v98Ev();
extern void _ZN10S3352C2_nt3v99Ev();
extern void _ZN10S3352C2_nt4v100Ev();
extern void _ZN10S3352C2_nt4v101Ev();
extern void _ZN10S3352C2_nt4v102Ev();
extern void _ZN10S3352C2_nt4v103Ev();
extern void _ZN10S3352C2_nt4v104Ev();
extern void _ZN10S3352C2_nt4v105Ev();
extern void _ZN10S3352C2_nt4v106Ev();
extern void _ZN10S3352C2_nt4v107Ev();
extern void _ZN10S3352C2_nt4v108Ev();
extern void _ZN10S3352C2_nt4v109Ev();
extern void _ZN10S3352C2_nt4v110Ev();
extern void _ZN10S3352C2_nt4v111Ev();
extern void _ZN10S3352C2_nt4v112Ev();
extern void _ZN10S3352C2_nt4v113Ev();
extern void _ZN10S3352C2_nt4v114Ev();
extern void _ZN10S3352C2_nt4v115Ev();
extern void _ZN10S3352C2_nt4v116Ev();
extern void _ZN10S3352C2_nt4v117Ev();
extern void _ZN10S3352C2_nt4v118Ev();
extern void _ZN10S3352C2_nt4v119Ev();
extern void _ZN10S3352C2_nt4v120Ev();
extern void _ZN10S3352C2_nt4v121Ev();
extern void _ZN10S3352C2_nt4v122Ev();
extern void _ZN10S3352C2_nt4v123Ev();
extern void _ZN10S3352C2_nt4v124Ev();
extern void _ZN10S3352C2_nt4v125Ev();
extern void _ZN10S3352C2_nt4v126Ev();
extern void _ZN10S3352C2_nt4v127Ev();
extern void _ZN10S3352C2_nt4v128Ev();
extern void _ZN10S3352C2_nt4v129Ev();
extern void _ZN10S3352C2_nt4v130Ev();
extern void _ZN10S3352C2_nt4v131Ev();
extern void _ZN10S3352C2_nt4v132Ev();
extern void _ZN10S3352C2_nt4v133Ev();
extern void _ZN10S3352C2_nt4v134Ev();
extern void _ZN10S3352C2_nt4v135Ev();
extern void _ZN10S3352C2_nt4v136Ev();
extern void _ZN10S3352C2_nt4v137Ev();
extern void _ZN10S3352C2_nt4v138Ev();
extern void _ZN10S3352C2_nt4v139Ev();
extern void _ZN10S3352C2_nt4v140Ev();
extern void _ZN10S3352C2_nt4v141Ev();
extern void _ZN10S3352C2_nt4v142Ev();
extern void _ZN10S3352C2_nt4v143Ev();
extern void _ZN10S3352C2_nt4v144Ev();
extern void _ZN10S3352C2_nt4v145Ev();
extern void _ZN10S3352C2_nt4v146Ev();
extern void _ZN10S3352C2_nt4v147Ev();
extern void _ZN10S3352C2_nt4v148Ev();
extern void _ZN10S3352C2_nt4v149Ev();
extern void _ZN10S3352C2_nt4v150Ev();
extern void _ZN10S3352C2_nt4v151Ev();
extern void _ZN10S3352C2_nt4v152Ev();
extern void _ZN10S3352C2_nt4v153Ev();
extern void _ZN10S3352C2_nt4v154Ev();
extern void _ZN10S3352C2_nt4v155Ev();
extern void _ZN10S3352C2_nt4v156Ev();
extern void _ZN10S3352C2_nt4v157Ev();
extern void _ZN10S3352C2_nt4v158Ev();
extern void _ZN10S3352C2_nt4v159Ev();
extern void _ZN10S3352C2_nt4v160Ev();
extern void _ZN10S3352C2_nt4v161Ev();
extern void _ZN10S3352C2_nt4v162Ev();
extern void _ZN10S3352C2_nt4v163Ev();
extern void _ZN10S3352C2_nt4v164Ev();
extern void _ZN10S3352C2_nt4v165Ev();
extern void _ZN10S3352C2_nt4v166Ev();
extern void _ZN10S3352C2_nt4v167Ev();
extern void _ZN10S3352C2_nt4v168Ev();
extern void _ZN10S3352C2_nt4v169Ev();
extern void _ZN10S3352C2_nt4v170Ev();
extern void _ZN10S3352C2_nt4v171Ev();
extern void _ZN10S3352C2_nt4v172Ev();
extern void _ZN10S3352C2_nt4v173Ev();
extern void _ZN10S3352C2_nt4v174Ev();
extern void _ZN10S3352C2_nt4v175Ev();
extern void _ZN10S3352C2_nt4v176Ev();
extern void _ZN10S3352C2_nt4v177Ev();
extern void _ZN10S3352C2_nt4v178Ev();
extern void _ZN10S3352C2_nt4v179Ev();
extern void _ZN10S3352C2_nt4v180Ev();
extern void _ZN10S3352C2_nt4v181Ev();
extern void _ZN10S3352C2_nt4v182Ev();
extern void _ZN10S3352C2_nt4v183Ev();
extern void _ZN10S3352C2_nt4v184Ev();
extern void _ZN10S3352C2_nt4v185Ev();
extern void _ZN10S3352C2_nt4v186Ev();
extern void _ZN10S3352C2_nt4v187Ev();
extern void _ZN10S3352C2_nt4v188Ev();
extern void _ZN10S3352C2_nt4v189Ev();
extern void _ZN10S3352C2_nt4v190Ev();
extern void _ZN10S3352C2_nt4v191Ev();
extern void _ZN10S3352C2_nt4v192Ev();
extern void _ZN10S3352C2_nt4v193Ev();
extern void _ZN10S3352C2_nt4v194Ev();
extern void _ZN10S3352C2_nt4v195Ev();
extern void _ZN10S3352C2_nt4v196Ev();
extern void _ZN10S3352C2_nt4v197Ev();
extern void _ZN10S3352C2_nt4v198Ev();
extern void _ZN10S3352C2_nt4v199Ev();
extern void _ZN10S3352C2_nt4v200Ev();
extern void _ZN10S3352C2_nt4v201Ev();
extern void _ZN10S3352C2_nt4v202Ev();
extern void _ZN10S3352C2_nt4v203Ev();
extern void _ZN10S3352C2_nt4v204Ev();
extern void _ZN10S3352C2_nt4v205Ev();
extern void _ZN10S3352C2_nt4v206Ev();
extern void _ZN10S3352C2_nt4v207Ev();
extern void _ZN10S3352C2_nt4v208Ev();
extern void _ZN10S3352C2_nt4v209Ev();
extern void _ZN10S3352C2_nt4v210Ev();
extern void _ZN10S3352C2_nt4v211Ev();
extern void _ZN10S3352C2_nt4v212Ev();
static  VTBL_ENTRY vtc_S3352C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S3352C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S3352C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v41Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v42Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v43Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v44Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v45Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v46Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v47Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v48Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v49Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v50Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v51Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v52Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v53Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v54Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v55Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v56Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v57Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v58Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v59Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v60Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v61Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v62Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v63Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v64Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v65Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v66Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v67Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v68Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v69Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt3v70Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt3v71Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt3v72Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt3v73Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt3v74Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt3v75Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt3v76Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt3v77Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt3v78Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt3v79Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt3v80Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt3v81Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt3v82Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt3v83Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt3v84Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt3v85Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt3v86Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt3v87Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt3v88Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt3v89Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt3v90Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt3v91Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt3v92Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt3v93Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt3v94Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt3v95Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt3v96Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt3v97Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt3v98Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt3v99Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v100Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v101Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v102Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v103Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v104Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v105Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v106Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v107Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v108Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v109Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v110Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v111Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v112Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v113Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v114Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v115Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v116Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v117Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v118Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v119Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v120Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v121Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v122Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v123Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v124Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v125Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v126Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v127Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v128Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v129Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v130Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v131Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v132Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v133Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v134Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v135Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v136Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v137Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v138Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v139Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v140Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v141Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v142Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v143Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v144Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v145Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v146Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v147Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v148Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v149Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v150Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v151Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v152Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v153Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v154Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v155Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v156Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v157Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v158Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v159Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v160Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v161Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v162Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v163Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v164Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v165Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v166Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v167Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v168Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v169Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v170Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v171Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v172Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v173Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v174Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v175Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v176Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v177Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v178Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v179Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v180Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v181Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v182Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v183Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v184Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v185Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v186Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v187Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v188Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v189Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v190Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v191Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v192Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v193Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v194Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v195Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v196Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v197Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v198Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v199Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v200Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v201Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v202Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v203Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v204Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v205Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v206Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v207Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v208Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v209Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v210Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v211Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v212Ev,
};
extern VTBL_ENTRY _ZTI10S3352C2_nt[];
VTBL_ENTRY *P__ZTI10S3352C2_nt = _ZTI10S3352C2_nt; 
extern  VTBL_ENTRY _ZTV10S3352C2_nt[];
Class_Descriptor cd_S3352C2_nt = {  "S3352C2_nt", // class name
  bases_S3352C2_nt, 1,
  &(vtc_S3352C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(568,436), // object size
  NSPAIRA(_ZTI10S3352C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S3352C2_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  S3352C21_nt  {
  void  mf3352c21(); // _ZN11S3352C21_nt9mf3352c21Ev
};
//SIG(-1 S3352C21_nt) C1{ m}


void  S3352C21_nt ::mf3352c21(){}

//skip512 S3352C21_nt

#else // __cplusplus

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

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

#ifdef __cplusplus

struct  S3352C1  : S3352C2_nt {
  void *s3352c1f0;
  int s3352c1f1[4];
  char s3352c1f2[2];
  unsigned int s3352c1f3:1;
  unsigned int s3352c1f4:1;
  unsigned int s3352c1f5:1;
  unsigned int s3352c1f6:1;
  unsigned int s3352c1f7:1;
  int s3352c1f8;
  ::S3352C21_nt s3352c1f9;
  virtual  ~S3352C1(); // _ZN7S3352C1D1Ev
  virtual void  v1(); // _ZN7S3352C12v1Ev
  virtual void  v2(); // _ZN7S3352C12v2Ev
  virtual void  v3(); // _ZN7S3352C12v3Ev
  virtual void  v4(); // _ZN7S3352C12v4Ev
  virtual void  v5(); // _ZN7S3352C12v5Ev
  S3352C1(); // tgen
};
//SIG(1 S3352C1) C1{ BC2{ BC3{ vd v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 v117 v118 v119 v120 v121 v122 v123 v124 v125 v126 v127 v128 v129 v130 v131 v132 v133 v134 v135 v136 v137 v138 v139 v140 v141 v142 v143 v144 v145 v146 v147 v148 v149 v150 v151 v152 v153 v154 v155 v156 v157 v158 v159 v160 v161 v162 v163 v164 v165 v166 v167 v168 v169 v170 v171 v172 v173 v174 v175 v176 v177 v178 v179 v180 v181 v182 v183 v184 v185 v186 v187 v188 v189 v190 v191 v192 v193 v194 v195 v196 v197 v198 v199 v200 v201 v202 v203 v204 v205 v206 v207 v208 v209 v210 v211 v212 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 v3 v4 v5 Fp Fi[4] Fc[2] Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi FC14{ m}}


 S3352C1 ::~S3352C1(){ note_dtor("S3352C1", this);}
void  S3352C1 ::v1(){vfunc_called(this, "_ZN7S3352C12v1Ev");}
void  S3352C1 ::v2(){vfunc_called(this, "_ZN7S3352C12v2Ev");}
void  S3352C1 ::v3(){vfunc_called(this, "_ZN7S3352C12v3Ev");}
void  S3352C1 ::v4(){vfunc_called(this, "_ZN7S3352C12v4Ev");}
void  S3352C1 ::v5(){vfunc_called(this, "_ZN7S3352C12v5Ev");}
S3352C1 ::S3352C1(){ note_ctor("S3352C1", this);} // tgen

static void Test_S3352C1()
{
  extern Class_Descriptor cd_S3352C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(77,118)];
    init_test(&cd_S3352C1, buf);
    S3352C1 *dp, &lv = *(dp=new (buf) S3352C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(608,468), "sizeof(S3352C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3352C1)");
    check_base_class_offset(lv, (S3352C3_nt*)(S3352C2_nt*), 0, "S3352C1");
    check_base_class_offset(lv, (S3352C2_nt*), 0, "S3352C1");
    check_field_offset(lv, s3352c1f0, ABISELECT(568,436), "S3352C1.s3352c1f0");
    check_field_offset(lv, s3352c1f1, ABISELECT(576,440), "S3352C1.s3352c1f1");
    check_field_offset(lv, s3352c1f2, ABISELECT(592,456), "S3352C1.s3352c1f2");
    set_bf_and_test(lv, s3352c1f3, ABISELECT(594,458), 0, 1, 1, "S3352C1");
    set_bf_and_test(lv, s3352c1f4, ABISELECT(594,458), 1, 1, 1, "S3352C1");
    set_bf_and_test(lv, s3352c1f5, ABISELECT(594,458), 2, 1, 1, "S3352C1");
    set_bf_and_test(lv, s3352c1f6, ABISELECT(594,458), 3, 1, 1, "S3352C1");
    set_bf_and_test(lv, s3352c1f7, ABISELECT(594,458), 4, 1, 1, "S3352C1");
    check_field_offset(lv, s3352c1f8, ABISELECT(596,460), "S3352C1.s3352c1f8");
    check_field_offset(lv, s3352c1f9, ABISELECT(600,464), "S3352C1.s3352c1f9");
    test_class_info(&lv, &cd_S3352C1);
    dp->~S3352C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3352C1(Test_S3352C1, "S3352C1", ABISELECT(608,468));

#else // __cplusplus

extern void _ZN7S3352C1C1Ev();
extern void _ZN7S3352C1D1Ev();
Name_Map name_map_S3352C1[] = {
  NSPAIR(_ZN7S3352C1C1Ev),
  NSPAIR(_ZN7S3352C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3352C3_nt;
extern VTBL_ENTRY _ZTI10S3352C3_nt[];
extern  VTBL_ENTRY _ZTV10S3352C3_nt[];
extern Class_Descriptor cd_S3352C2_nt;
extern VTBL_ENTRY _ZTI10S3352C2_nt[];
extern  VTBL_ENTRY _ZTV10S3352C2_nt[];
static Base_Class bases_S3352C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3352C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3352C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S3352C1[];
extern void _ZN7S3352C1D1Ev();
extern void _ZN7S3352C1D0Ev();
extern void _ZN10S3352C3_nt2v6Ev();
extern void _ZN10S3352C3_nt2v7Ev();
extern void _ZN10S3352C3_nt2v8Ev();
extern void _ZN10S3352C3_nt2v9Ev();
extern void _ZN10S3352C3_nt3v10Ev();
extern void _ZN10S3352C3_nt3v11Ev();
extern void _ZN10S3352C3_nt3v12Ev();
extern void _ZN10S3352C3_nt3v13Ev();
extern void _ZN10S3352C3_nt3v14Ev();
extern void _ZN10S3352C3_nt3v15Ev();
extern void _ZN10S3352C3_nt3v16Ev();
extern void _ZN10S3352C3_nt3v17Ev();
extern void _ZN10S3352C3_nt3v18Ev();
extern void _ZN10S3352C3_nt3v19Ev();
extern void _ZN10S3352C3_nt3v20Ev();
extern void _ZN10S3352C3_nt3v21Ev();
extern void _ZN10S3352C3_nt3v22Ev();
extern void _ZN10S3352C3_nt3v23Ev();
extern void _ZN10S3352C3_nt3v24Ev();
extern void _ZN10S3352C3_nt3v25Ev();
extern void _ZN10S3352C3_nt3v26Ev();
extern void _ZN10S3352C3_nt3v27Ev();
extern void _ZN10S3352C3_nt3v28Ev();
extern void _ZN10S3352C3_nt3v29Ev();
extern void _ZN10S3352C3_nt3v30Ev();
extern void _ZN10S3352C3_nt3v31Ev();
extern void _ZN10S3352C3_nt3v32Ev();
extern void _ZN10S3352C3_nt3v33Ev();
extern void _ZN10S3352C3_nt3v34Ev();
extern void _ZN10S3352C3_nt3v35Ev();
extern void _ZN10S3352C3_nt3v36Ev();
extern void _ZN10S3352C3_nt3v37Ev();
extern void _ZN10S3352C3_nt3v38Ev();
extern void _ZN10S3352C3_nt3v39Ev();
extern void _ZN10S3352C3_nt3v40Ev();
extern void _ZN10S3352C3_nt3v41Ev();
extern void _ZN10S3352C3_nt3v42Ev();
extern void _ZN10S3352C3_nt3v43Ev();
extern void _ZN10S3352C3_nt3v44Ev();
extern void _ZN10S3352C3_nt3v45Ev();
extern void _ZN10S3352C3_nt3v46Ev();
extern void _ZN10S3352C3_nt3v47Ev();
extern void _ZN10S3352C3_nt3v48Ev();
extern void _ZN10S3352C3_nt3v49Ev();
extern void _ZN10S3352C3_nt3v50Ev();
extern void _ZN10S3352C3_nt3v51Ev();
extern void _ZN10S3352C3_nt3v52Ev();
extern void _ZN10S3352C3_nt3v53Ev();
extern void _ZN10S3352C3_nt3v54Ev();
extern void _ZN10S3352C3_nt3v55Ev();
extern void _ZN10S3352C3_nt3v56Ev();
extern void _ZN10S3352C3_nt3v57Ev();
extern void _ZN10S3352C3_nt3v58Ev();
extern void _ZN10S3352C3_nt3v59Ev();
extern void _ZN10S3352C3_nt3v60Ev();
extern void _ZN10S3352C3_nt3v61Ev();
extern void _ZN10S3352C3_nt3v62Ev();
extern void _ZN10S3352C3_nt3v63Ev();
extern void _ZN10S3352C3_nt3v64Ev();
extern void _ZN10S3352C3_nt3v65Ev();
extern void _ZN10S3352C3_nt3v66Ev();
extern void _ZN10S3352C3_nt3v67Ev();
extern void _ZN10S3352C3_nt3v68Ev();
extern void _ZN10S3352C3_nt3v69Ev();
extern void _ZN10S3352C2_nt3v70Ev();
extern void _ZN10S3352C2_nt3v71Ev();
extern void _ZN10S3352C2_nt3v72Ev();
extern void _ZN10S3352C2_nt3v73Ev();
extern void _ZN10S3352C2_nt3v74Ev();
extern void _ZN10S3352C2_nt3v75Ev();
extern void _ZN10S3352C2_nt3v76Ev();
extern void _ZN10S3352C2_nt3v77Ev();
extern void _ZN10S3352C2_nt3v78Ev();
extern void _ZN10S3352C2_nt3v79Ev();
extern void _ZN10S3352C2_nt3v80Ev();
extern void _ZN10S3352C2_nt3v81Ev();
extern void _ZN10S3352C2_nt3v82Ev();
extern void _ZN10S3352C2_nt3v83Ev();
extern void _ZN10S3352C2_nt3v84Ev();
extern void _ZN10S3352C2_nt3v85Ev();
extern void _ZN10S3352C2_nt3v86Ev();
extern void _ZN10S3352C2_nt3v87Ev();
extern void _ZN10S3352C2_nt3v88Ev();
extern void _ZN10S3352C2_nt3v89Ev();
extern void _ZN10S3352C2_nt3v90Ev();
extern void _ZN10S3352C2_nt3v91Ev();
extern void _ZN10S3352C2_nt3v92Ev();
extern void _ZN10S3352C2_nt3v93Ev();
extern void _ZN10S3352C2_nt3v94Ev();
extern void _ZN10S3352C2_nt3v95Ev();
extern void _ZN10S3352C2_nt3v96Ev();
extern void _ZN10S3352C2_nt3v97Ev();
extern void _ZN10S3352C2_nt3v98Ev();
extern void _ZN10S3352C2_nt3v99Ev();
extern void _ZN10S3352C2_nt4v100Ev();
extern void _ZN10S3352C2_nt4v101Ev();
extern void _ZN10S3352C2_nt4v102Ev();
extern void _ZN10S3352C2_nt4v103Ev();
extern void _ZN10S3352C2_nt4v104Ev();
extern void _ZN10S3352C2_nt4v105Ev();
extern void _ZN10S3352C2_nt4v106Ev();
extern void _ZN10S3352C2_nt4v107Ev();
extern void _ZN10S3352C2_nt4v108Ev();
extern void _ZN10S3352C2_nt4v109Ev();
extern void _ZN10S3352C2_nt4v110Ev();
extern void _ZN10S3352C2_nt4v111Ev();
extern void _ZN10S3352C2_nt4v112Ev();
extern void _ZN10S3352C2_nt4v113Ev();
extern void _ZN10S3352C2_nt4v114Ev();
extern void _ZN10S3352C2_nt4v115Ev();
extern void _ZN10S3352C2_nt4v116Ev();
extern void _ZN10S3352C2_nt4v117Ev();
extern void _ZN10S3352C2_nt4v118Ev();
extern void _ZN10S3352C2_nt4v119Ev();
extern void _ZN10S3352C2_nt4v120Ev();
extern void _ZN10S3352C2_nt4v121Ev();
extern void _ZN10S3352C2_nt4v122Ev();
extern void _ZN10S3352C2_nt4v123Ev();
extern void _ZN10S3352C2_nt4v124Ev();
extern void _ZN10S3352C2_nt4v125Ev();
extern void _ZN10S3352C2_nt4v126Ev();
extern void _ZN10S3352C2_nt4v127Ev();
extern void _ZN10S3352C2_nt4v128Ev();
extern void _ZN10S3352C2_nt4v129Ev();
extern void _ZN10S3352C2_nt4v130Ev();
extern void _ZN10S3352C2_nt4v131Ev();
extern void _ZN10S3352C2_nt4v132Ev();
extern void _ZN10S3352C2_nt4v133Ev();
extern void _ZN10S3352C2_nt4v134Ev();
extern void _ZN10S3352C2_nt4v135Ev();
extern void _ZN10S3352C2_nt4v136Ev();
extern void _ZN10S3352C2_nt4v137Ev();
extern void _ZN10S3352C2_nt4v138Ev();
extern void _ZN10S3352C2_nt4v139Ev();
extern void _ZN10S3352C2_nt4v140Ev();
extern void _ZN10S3352C2_nt4v141Ev();
extern void _ZN10S3352C2_nt4v142Ev();
extern void _ZN10S3352C2_nt4v143Ev();
extern void _ZN10S3352C2_nt4v144Ev();
extern void _ZN10S3352C2_nt4v145Ev();
extern void _ZN10S3352C2_nt4v146Ev();
extern void _ZN10S3352C2_nt4v147Ev();
extern void _ZN10S3352C2_nt4v148Ev();
extern void _ZN10S3352C2_nt4v149Ev();
extern void _ZN10S3352C2_nt4v150Ev();
extern void _ZN10S3352C2_nt4v151Ev();
extern void _ZN10S3352C2_nt4v152Ev();
extern void _ZN10S3352C2_nt4v153Ev();
extern void _ZN10S3352C2_nt4v154Ev();
extern void _ZN10S3352C2_nt4v155Ev();
extern void _ZN10S3352C2_nt4v156Ev();
extern void _ZN10S3352C2_nt4v157Ev();
extern void _ZN10S3352C2_nt4v158Ev();
extern void _ZN10S3352C2_nt4v159Ev();
extern void _ZN10S3352C2_nt4v160Ev();
extern void _ZN10S3352C2_nt4v161Ev();
extern void _ZN10S3352C2_nt4v162Ev();
extern void _ZN10S3352C2_nt4v163Ev();
extern void _ZN10S3352C2_nt4v164Ev();
extern void _ZN10S3352C2_nt4v165Ev();
extern void _ZN10S3352C2_nt4v166Ev();
extern void _ZN10S3352C2_nt4v167Ev();
extern void _ZN10S3352C2_nt4v168Ev();
extern void _ZN10S3352C2_nt4v169Ev();
extern void _ZN10S3352C2_nt4v170Ev();
extern void _ZN10S3352C2_nt4v171Ev();
extern void _ZN10S3352C2_nt4v172Ev();
extern void _ZN10S3352C2_nt4v173Ev();
extern void _ZN10S3352C2_nt4v174Ev();
extern void _ZN10S3352C2_nt4v175Ev();
extern void _ZN10S3352C2_nt4v176Ev();
extern void _ZN10S3352C2_nt4v177Ev();
extern void _ZN10S3352C2_nt4v178Ev();
extern void _ZN10S3352C2_nt4v179Ev();
extern void _ZN10S3352C2_nt4v180Ev();
extern void _ZN10S3352C2_nt4v181Ev();
extern void _ZN10S3352C2_nt4v182Ev();
extern void _ZN10S3352C2_nt4v183Ev();
extern void _ZN10S3352C2_nt4v184Ev();
extern void _ZN10S3352C2_nt4v185Ev();
extern void _ZN10S3352C2_nt4v186Ev();
extern void _ZN10S3352C2_nt4v187Ev();
extern void _ZN10S3352C2_nt4v188Ev();
extern void _ZN10S3352C2_nt4v189Ev();
extern void _ZN10S3352C2_nt4v190Ev();
extern void _ZN10S3352C2_nt4v191Ev();
extern void _ZN10S3352C2_nt4v192Ev();
extern void _ZN10S3352C2_nt4v193Ev();
extern void _ZN10S3352C2_nt4v194Ev();
extern void _ZN10S3352C2_nt4v195Ev();
extern void _ZN10S3352C2_nt4v196Ev();
extern void _ZN10S3352C2_nt4v197Ev();
extern void _ZN10S3352C2_nt4v198Ev();
extern void _ZN10S3352C2_nt4v199Ev();
extern void _ZN10S3352C2_nt4v200Ev();
extern void _ZN10S3352C2_nt4v201Ev();
extern void _ZN10S3352C2_nt4v202Ev();
extern void _ZN10S3352C2_nt4v203Ev();
extern void _ZN10S3352C2_nt4v204Ev();
extern void _ZN10S3352C2_nt4v205Ev();
extern void _ZN10S3352C2_nt4v206Ev();
extern void _ZN10S3352C2_nt4v207Ev();
extern void _ZN10S3352C2_nt4v208Ev();
extern void _ZN10S3352C2_nt4v209Ev();
extern void _ZN10S3352C2_nt4v210Ev();
extern void _ZN10S3352C2_nt4v211Ev();
extern void _ZN10S3352C2_nt4v212Ev();
extern void _ZN7S3352C12v1Ev();
extern void _ZN7S3352C12v2Ev();
extern void _ZN7S3352C12v3Ev();
extern void _ZN7S3352C12v4Ev();
extern void _ZN7S3352C12v5Ev();
static  VTBL_ENTRY vtc_S3352C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3352C1[0]),
  (VTBL_ENTRY)&_ZN7S3352C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3352C1D0Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v41Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v42Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v43Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v44Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v45Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v46Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v47Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v48Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v49Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v50Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v51Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v52Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v53Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v54Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v55Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v56Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v57Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v58Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v59Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v60Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v61Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v62Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v63Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v64Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v65Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v66Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v67Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v68Ev,
  (VTBL_ENTRY)&_ZN10S3352C3_nt3v69Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt3v70Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt3v71Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt3v72Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt3v73Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt3v74Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt3v75Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt3v76Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt3v77Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt3v78Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt3v79Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt3v80Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt3v81Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt3v82Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt3v83Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt3v84Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt3v85Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt3v86Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt3v87Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt3v88Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt3v89Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt3v90Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt3v91Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt3v92Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt3v93Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt3v94Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt3v95Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt3v96Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt3v97Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt3v98Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt3v99Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v100Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v101Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v102Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v103Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v104Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v105Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v106Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v107Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v108Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v109Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v110Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v111Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v112Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v113Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v114Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v115Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v116Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v117Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v118Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v119Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v120Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v121Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v122Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v123Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v124Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v125Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v126Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v127Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v128Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v129Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v130Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v131Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v132Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v133Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v134Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v135Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v136Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v137Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v138Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v139Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v140Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v141Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v142Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v143Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v144Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v145Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v146Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v147Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v148Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v149Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v150Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v151Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v152Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v153Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v154Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v155Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v156Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v157Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v158Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v159Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v160Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v161Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v162Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v163Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v164Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v165Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v166Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v167Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v168Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v169Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v170Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v171Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v172Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v173Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v174Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v175Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v176Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v177Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v178Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v179Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v180Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v181Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v182Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v183Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v184Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v185Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v186Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v187Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v188Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v189Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v190Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v191Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v192Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v193Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v194Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v195Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v196Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v197Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v198Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v199Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v200Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v201Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v202Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v203Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v204Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v205Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v206Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v207Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v208Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v209Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v210Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v211Ev,
  (VTBL_ENTRY)&_ZN10S3352C2_nt4v212Ev,
  (VTBL_ENTRY)&_ZN7S3352C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3352C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3352C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3352C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3352C12v5Ev,
};
extern VTBL_ENTRY _ZTI7S3352C1[];
extern  VTBL_ENTRY _ZTV7S3352C1[];
Class_Descriptor cd_S3352C1 = {  "S3352C1", // class name
  bases_S3352C1, 2,
  &(vtc_S3352C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(608,468), // object size
  NSPAIRA(_ZTI7S3352C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3352C1),216, //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  S2120C8_nt  {
  void  mf2120c8(); // _ZN10S2120C8_nt8mf2120c8Ev
};
//SIG(-1 S2120C8_nt) C1{ m}


void  S2120C8_nt ::mf2120c8(){}

//skip512 S2120C8_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2120C6_nt  {
  void *s2120c6f0;
  int s2120c6f1;
  ::S3352C21_nt s2120c6f2;
  ::S2120C8_nt s2120c6f3;
  void  mf2120c6(); // _ZN10S2120C6_nt8mf2120c6Ev
};
//SIG(-1 S2120C6_nt) C1{ m Fp Fi FC2{ m} FC3{ m}}


void  S2120C6_nt ::mf2120c6(){}

//skip512 S2120C6_nt

#else // __cplusplus

Class_Descriptor cd_S2120C6_nt = {  "S2120C6_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  S2120C5_nt  : S2120C6_nt {
};
//SIG(-1 S2120C5_nt) C1{ BC2{ m Fp Fi FC3{ m} FC4{ m}}}



//skip512 S2120C5_nt

#else // __cplusplus

extern Class_Descriptor cd_S2120C6_nt;
static Base_Class bases_S2120C5_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2120C6_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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  S2120C4_nt  {
  void *s2120c4f0;
  int s2120c4f1;
  ::S2120C5_nt s2120c4f2;
  ::S2120C5_nt s2120c4f3;
  int s2120c4f4;
  virtual  ~S2120C4_nt(); // _ZN10S2120C4_ntD1Ev
  virtual void  v2(); // _ZN10S2120C4_nt2v2Ev
  virtual void  v3(); // _ZN10S2120C4_nt2v3Ev
  virtual void  v4(); // _ZN10S2120C4_nt2v4Ev
  virtual void  v5(); // _ZN10S2120C4_nt2v5Ev
  virtual void  v6(); // _ZN10S2120C4_nt2v6Ev
  virtual void  v7(); // _ZN10S2120C4_nt2v7Ev
  virtual void  v8(); // _ZN10S2120C4_nt2v8Ev
  virtual void  v9(); // _ZN10S2120C4_nt2v9Ev
  virtual void  v10(); // _ZN10S2120C4_nt3v10Ev
  virtual void  v11(); // _ZN10S2120C4_nt3v11Ev
  virtual void  v12(); // _ZN10S2120C4_nt3v12Ev
  virtual void  v13(); // _ZN10S2120C4_nt3v13Ev
  virtual void  v14(); // _ZN10S2120C4_nt3v14Ev
  virtual void  v15(); // _ZN10S2120C4_nt3v15Ev
  virtual void  v16(); // _ZN10S2120C4_nt3v16Ev
  virtual void  v17(); // _ZN10S2120C4_nt3v17Ev
  virtual void  v18(); // _ZN10S2120C4_nt3v18Ev
  virtual void  v19(); // _ZN10S2120C4_nt3v19Ev
  virtual void  v20(); // _ZN10S2120C4_nt3v20Ev
  virtual void  v21(); // _ZN10S2120C4_nt3v21Ev
  virtual void  v22(); // _ZN10S2120C4_nt3v22Ev
  virtual void  v23(); // _ZN10S2120C4_nt3v23Ev
  virtual void  v24(); // _ZN10S2120C4_nt3v24Ev
  S2120C4_nt(); // tgen
};
//SIG(-1 S2120C4_nt) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 Fp Fi FC2{ BC3{ m Fp Fi FC4{ m} FC5{ m}}} FC2 Fi}


 S2120C4_nt ::~S2120C4_nt(){ note_dtor("S2120C4_nt", this);}
void  S2120C4_nt ::v2(){vfunc_called(this, "_ZN10S2120C4_nt2v2Ev");}
void  S2120C4_nt ::v3(){vfunc_called(this, "_ZN10S2120C4_nt2v3Ev");}
void  S2120C4_nt ::v4(){vfunc_called(this, "_ZN10S2120C4_nt2v4Ev");}
void  S2120C4_nt ::v5(){vfunc_called(this, "_ZN10S2120C4_nt2v5Ev");}
void  S2120C4_nt ::v6(){vfunc_called(this, "_ZN10S2120C4_nt2v6Ev");}
void  S2120C4_nt ::v7(){vfunc_called(this, "_ZN10S2120C4_nt2v7Ev");}
void  S2120C4_nt ::v8(){vfunc_called(this, "_ZN10S2120C4_nt2v8Ev");}
void  S2120C4_nt ::v9(){vfunc_called(this, "_ZN10S2120C4_nt2v9Ev");}
void  S2120C4_nt ::v10(){vfunc_called(this, "_ZN10S2120C4_nt3v10Ev");}
void  S2120C4_nt ::v11(){vfunc_called(this, "_ZN10S2120C4_nt3v11Ev");}
void  S2120C4_nt ::v12(){vfunc_called(this, "_ZN10S2120C4_nt3v12Ev");}
void  S2120C4_nt ::v13(){vfunc_called(this, "_ZN10S2120C4_nt3v13Ev");}
void  S2120C4_nt ::v14(){vfunc_called(this, "_ZN10S2120C4_nt3v14Ev");}
void  S2120C4_nt ::v15(){vfunc_called(this, "_ZN10S2120C4_nt3v15Ev");}
void  S2120C4_nt ::v16(){vfunc_called(this, "_ZN10S2120C4_nt3v16Ev");}
void  S2120C4_nt ::v17(){vfunc_called(this, "_ZN10S2120C4_nt3v17Ev");}
void  S2120C4_nt ::v18(){vfunc_called(this, "_ZN10S2120C4_nt3v18Ev");}
void  S2120C4_nt ::v19(){vfunc_called(this, "_ZN10S2120C4_nt3v19Ev");}
void  S2120C4_nt ::v20(){vfunc_called(this, "_ZN10S2120C4_nt3v20Ev");}
void  S2120C4_nt ::v21(){vfunc_called(this, "_ZN10S2120C4_nt3v21Ev");}
void  S2120C4_nt ::v22(){vfunc_called(this, "_ZN10S2120C4_nt3v22Ev");}
void  S2120C4_nt ::v23(){vfunc_called(this, "_ZN10S2120C4_nt3v23Ev");}
void  S2120C4_nt ::v24(){vfunc_called(this, "_ZN10S2120C4_nt3v24Ev");}
S2120C4_nt ::S2120C4_nt(){ note_ctor("S2120C4_nt", this);} // tgen

//skip512 S2120C4_nt

#else // __cplusplus

extern void _ZN10S2120C4_ntC1Ev();
extern void _ZN10S2120C4_ntD1Ev();
Name_Map name_map_S2120C4_nt[] = {
  NSPAIR(_ZN10S2120C4_ntC1Ev),
  NSPAIR(_ZN10S2120C4_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S2120C4_nt[];
extern void _ZN10S2120C4_ntD1Ev();
extern void _ZN10S2120C4_ntD0Ev();
extern void _ZN10S2120C4_nt2v2Ev();
extern void _ZN10S2120C4_nt2v3Ev();
extern void _ZN10S2120C4_nt2v4Ev();
extern void _ZN10S2120C4_nt2v5Ev();
extern void _ZN10S2120C4_nt2v6Ev();
extern void _ZN10S2120C4_nt2v7Ev();
extern void _ZN10S2120C4_nt2v8Ev();
extern void _ZN10S2120C4_nt2v9Ev();
extern void _ZN10S2120C4_nt3v10Ev();
extern void _ZN10S2120C4_nt3v11Ev();
extern void _ZN10S2120C4_nt3v12Ev();
extern void _ZN10S2120C4_nt3v13Ev();
extern void _ZN10S2120C4_nt3v14Ev();
extern void _ZN10S2120C4_nt3v15Ev();
extern void _ZN10S2120C4_nt3v16Ev();
extern void _ZN10S2120C4_nt3v17Ev();
extern void _ZN10S2120C4_nt3v18Ev();
extern void _ZN10S2120C4_nt3v19Ev();
extern void _ZN10S2120C4_nt3v20Ev();
extern void _ZN10S2120C4_nt3v21Ev();
extern void _ZN10S2120C4_nt3v22Ev();
extern void _ZN10S2120C4_nt3v23Ev();
extern void _ZN10S2120C4_nt3v24Ev();
static  VTBL_ENTRY vtc_S2120C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S2120C4_nt[0]),
  (VTBL_ENTRY)&_ZN10S2120C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S2120C4_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S2120C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S2120C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S2120C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S2120C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S2120C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S2120C4_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S2120C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S2120C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S2120C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S2120C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S2120C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S2120C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S2120C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S2120C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S2120C4_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S2120C4_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S2120C4_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S2120C4_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S2120C4_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S2120C4_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S2120C4_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S2120C4_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S2120C4_nt3v24Ev,
};
extern VTBL_ENTRY _ZTI10S2120C4_nt[];
VTBL_ENTRY *P__ZTI10S2120C4_nt = _ZTI10S2120C4_nt; 
extern  VTBL_ENTRY _ZTV10S2120C4_nt[];
Class_Descriptor cd_S2120C4_nt = {  "S2120C4_nt", // class name
  0,0,//no base classes
  &(vtc_S2120C4_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,40), // object size
  NSPAIRA(_ZTI10S2120C4_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S2120C4_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  S2120C14_nt  {
  __tsi64 s2120c14f0[2];
  void  mf2120c14(); // _ZN11S2120C14_nt9mf2120c14Ev
};
//SIG(-1 S2120C14_nt) C1{ m FL[2]}


void  S2120C14_nt ::mf2120c14(){}

//skip512 S2120C14_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2120C13_nt  {
  ::S2120C14_nt s2120c13f0;
  void  mf2120c13(); // _ZN11S2120C13_nt9mf2120c13Ev
};
//SIG(-1 S2120C13_nt) C1{ m FC2{ m FL[2]}}


void  S2120C13_nt ::mf2120c13(){}

//skip512 S2120C13_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2120C17_nt  {
  ::S2120C13_nt s2120c17f0;
  void  mf2120c17(); // _ZN11S2120C17_nt9mf2120c17Ev
};
//SIG(-1 S2120C17_nt) C1{ m FC2{ m FC3{ m FL[2]}}}


void  S2120C17_nt ::mf2120c17(){}

//skip512 S2120C17_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2120C18_nt  {
  ::S2120C13_nt s2120c18f0;
  ::S2120C13_nt s2120c18f1;
  ::S2120C13_nt s2120c18f2;
  ::S2120C13_nt s2120c18f3;
  void  mf2120c18(); // _ZN11S2120C18_nt9mf2120c18Ev
};
//SIG(-1 S2120C18_nt) C1{ m FC2{ m FC3{ m FL[2]}} FC2 FC2 FC2}


void  S2120C18_nt ::mf2120c18(){}

//skip512 S2120C18_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2120C20_nt  {
  void *s2120c20f0;
  int s2120c20f1;
  ::S2120C8_nt s2120c20f2;
  void  mf2120c20(); // _ZN11S2120C20_nt9mf2120c20Ev
};
//SIG(-1 S2120C20_nt) C1{ m Fp Fi FC2{ m}}


void  S2120C20_nt ::mf2120c20(){}

//skip512 S2120C20_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2120C19_nt  {
  ::S2120C20_nt s2120c19f0;
  int s2120c19f1;
  void  mf2120c19(); // _ZN11S2120C19_nt9mf2120c19Ev
};
//SIG(-1 S2120C19_nt) C1{ m FC2{ m Fp Fi FC3{ m}} Fi}


void  S2120C19_nt ::mf2120c19(){}

//skip512 S2120C19_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2120C23  {
  void  mf2120c23(); // _ZN8S2120C239mf2120c23Ev
};
//SIG(-1 S2120C23) C1{ m}


void  S2120C23 ::mf2120c23(){}

static void Test_S2120C23()
{
  {
    init_simple_test("S2120C23");
    S2120C23 lv;
    check2(sizeof(lv), 1, "sizeof(S2120C23)");
    check2(__alignof__(lv), 1, "__alignof__(S2120C23)");
  }
}
static Arrange_To_Call_Me vS2120C23(Test_S2120C23, "S2120C23", 1);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2120C22  {
  void *s2120c22f0;
  int s2120c22f1;
  ::S2120C23 s2120c22f2;
  ::S2120C23 s2120c22f3;
  void  mf2120c22(); // _ZN8S2120C229mf2120c22Ev
};
//SIG(-1 S2120C22) C1{ m Fp Fi FC2{ m} FC2}


void  S2120C22 ::mf2120c22(){}

static void Test_S2120C22()
{
  {
    init_simple_test("S2120C22");
    S2120C22 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S2120C22)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2120C22)");
    check_field_offset(lv, s2120c22f0, 0, "S2120C22.s2120c22f0");
    check_field_offset(lv, s2120c22f1, ABISELECT(8,4), "S2120C22.s2120c22f1");
    check_field_offset(lv, s2120c22f2, ABISELECT(12,8), "S2120C22.s2120c22f2");
    check_field_offset(lv, s2120c22f3, ABISELECT(13,9), "S2120C22.s2120c22f3");
  }
}
static Arrange_To_Call_Me vS2120C22(Test_S2120C22, "S2120C22", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2120C27  {
  void  mf2120c27(); // _ZN8S2120C279mf2120c27Ev
};
//SIG(-1 S2120C27) C1{ m}


void  S2120C27 ::mf2120c27(){}

static void Test_S2120C27()
{
  {
    init_simple_test("S2120C27");
    S2120C27 lv;
    check2(sizeof(lv), 1, "sizeof(S2120C27)");
    check2(__alignof__(lv), 1, "__alignof__(S2120C27)");
  }
}
static Arrange_To_Call_Me vS2120C27(Test_S2120C27, "S2120C27", 1);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2120C26  {
  void *s2120c26f0;
  int s2120c26f1;
  ::S2120C27 s2120c26f2;
  ::S2120C27 s2120c26f3;
  void  mf2120c26(); // _ZN8S2120C269mf2120c26Ev
};
//SIG(-1 S2120C26) C1{ m Fp Fi FC2{ m} FC2}


void  S2120C26 ::mf2120c26(){}

static void Test_S2120C26()
{
  {
    init_simple_test("S2120C26");
    S2120C26 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S2120C26)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2120C26)");
    check_field_offset(lv, s2120c26f0, 0, "S2120C26.s2120c26f0");
    check_field_offset(lv, s2120c26f1, ABISELECT(8,4), "S2120C26.s2120c26f1");
    check_field_offset(lv, s2120c26f2, ABISELECT(12,8), "S2120C26.s2120c26f2");
    check_field_offset(lv, s2120c26f3, ABISELECT(13,9), "S2120C26.s2120c26f3");
  }
}
static Arrange_To_Call_Me vS2120C26(Test_S2120C26, "S2120C26", ABISELECT(16,12));

#else // __cplusplus

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



static void Test_S2120C25()
{
  extern Class_Descriptor cd_S2120C25;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S2120C25, buf);
    S2120C25 &lv = *(new (buf) S2120C25());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S2120C25)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2120C25)");
    check_base_class_offset(lv, (S2120C26*), 0, "S2120C25");
    test_class_info(&lv, &cd_S2120C25);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2120C25(Test_S2120C25, "S2120C25", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S2120C26;
static Base_Class bases_S2120C25[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2120C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S2120C25 = {  "S2120C25", // class name
  bases_S2120C25, 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  S2120C30  {
  void  mf2120c30(); // _ZN8S2120C309mf2120c30Ev
};
//SIG(-1 S2120C30) C1{ m}


void  S2120C30 ::mf2120c30(){}

static void Test_S2120C30()
{
  {
    init_simple_test("S2120C30");
    S2120C30 lv;
    check2(sizeof(lv), 1, "sizeof(S2120C30)");
    check2(__alignof__(lv), 1, "__alignof__(S2120C30)");
  }
}
static Arrange_To_Call_Me vS2120C30(Test_S2120C30, "S2120C30", 1);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2120C29_nt  {
  void *s2120c29f0;
  int s2120c29f1[2];
  ::S2120C30 s2120c29f2;
  void  mf2120c29(); // _ZN11S2120C29_nt9mf2120c29Ev
};
//SIG(-1 S2120C29_nt) C1{ m Fp Fi[2] FC2{ m}}


void  S2120C29_nt ::mf2120c29(){}

//skip512 S2120C29_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2120C37  {
  void *s2120c37f0;
  int s2120c37f1[2];
  ::S2120C30 s2120c37f2;
  void  mf2120c37(); // _ZN8S2120C379mf2120c37Ev
};
//SIG(-1 S2120C37) C1{ m Fp Fi[2] FC2{ m}}


void  S2120C37 ::mf2120c37(){}

static void Test_S2120C37()
{
  {
    init_simple_test("S2120C37");
    S2120C37 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S2120C37)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2120C37)");
    check_field_offset(lv, s2120c37f0, 0, "S2120C37.s2120c37f0");
    check_field_offset(lv, s2120c37f1, ABISELECT(8,4), "S2120C37.s2120c37f1");
    check_field_offset(lv, s2120c37f2, ABISELECT(16,12), "S2120C37.s2120c37f2");
  }
}
static Arrange_To_Call_Me vS2120C37(Test_S2120C37, "S2120C37", ABISELECT(24,16));

#else // __cplusplus

extern VTBL_ENTRY _ZTI8S2120C37[];
VTBL_ENTRY *P__ZTI8S2120C37 = _ZTI8S2120C37; 
Class_Descriptor cd_S2120C37 = {  "S2120C37", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI8S2120C37),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  S2120C3_nt  : S2120C4_nt {
  ::S2120C13_nt s2120c3f0;
  ::S2120C13_nt s2120c3f1;
  ::S2120C13_nt s2120c3f2;
  ::S2120C13_nt s2120c3f3;
  ::S2120C17_nt s2120c3f4;
  ::S2120C18_nt s2120c3f5;
  ::S2120C18_nt s2120c3f6;
  ::S2120C13_nt s2120c3f7;
  ::S2120C13_nt s2120c3f8;
  ::S2120C13_nt s2120c3f9;
  void *s2120c3f10;
  ::S2120C17_nt s2120c3f11;
  ::S2120C19_nt s2120c3f12;
  int s2120c3f13;
  void *s2120c3f14[7];
  ::S2120C22 s2120c3f15;
  int s2120c3f16:8;
  int s2120c3f17:8;
  int s2120c3f18:16;
  int s2120c3f19:16;
  int s2120c3f20:8;
  int s2120c3f21:8;
  int s2120c3f22:8;
  int s2120c3f23:32;
  int s2120c3f24:8;
  int s2120c3f25:4;
  int s2120c3f26:4;
  int s2120c3f27:4;
  int s2120c3f28:4;
  int s2120c3f29:4;
  int s2120c3f30:4;
  int s2120c3f31:4;
  int s2120c3f32:4;
  int s2120c3f33:4;
  int s2120c3f34:4;
  unsigned char s2120c3f35:1;
  unsigned char s2120c3f36:1;
  unsigned char s2120c3f37:1;
  unsigned char s2120c3f38:1;
  unsigned char s2120c3f39:1;
  unsigned char s2120c3f40:1;
  unsigned char s2120c3f41:1;
  unsigned char s2120c3f42:1;
  unsigned char s2120c3f43:1;
  unsigned char s2120c3f44:1;
  unsigned char s2120c3f45:1;
  unsigned char s2120c3f46:1;
  unsigned char s2120c3f47:1;
  unsigned char s2120c3f48:1;
  unsigned char s2120c3f49:1;
  unsigned char s2120c3f50:1;
  unsigned char s2120c3f51:1;
  unsigned char s2120c3f52:1;
  unsigned char s2120c3f53:1;
  unsigned char s2120c3f54:1;
  unsigned char s2120c3f55:1;
  unsigned char s2120c3f56:1;
  unsigned char s2120c3f57:1;
  unsigned char s2120c3f58:1;
  unsigned char s2120c3f59:1;
  unsigned char s2120c3f60:1;
  unsigned char s2120c3f61:1;
  unsigned char s2120c3f62:1;
  unsigned char s2120c3f63:1;
  unsigned char s2120c3f64:1;
  unsigned char s2120c3f65:1;
  unsigned char s2120c3f66:1;
  unsigned char s2120c3f67:1;
  unsigned char s2120c3f68:1;
  unsigned char s2120c3f69:1;
  unsigned char s2120c3f70:1;
  unsigned char s2120c3f71:1;
  unsigned char s2120c3f72:1;
  unsigned char s2120c3f73:1;
  unsigned char s2120c3f74:1;
  unsigned char s2120c3f75:1;
  int s2120c3f76[7];
  void *s2120c3f77[6];
  int s2120c3f78:8;
  int s2120c3f79:8;
  int s2120c3f80:8;
  int s2120c3f81:8;
  int s2120c3f82:8;
  int s2120c3f83:8;
  ::S2120C25 s2120c3f84;
  void *s2120c3f85[4];
  int s2120c3f86:8;
  int s2120c3f87:8;
  int s2120c3f88:8;
  int s2120c3f89:8;
  int s2120c3f90:8;
  int s2120c3f91:16;
  int s2120c3f92:16;
  int s2120c3f93:16;
  int s2120c3f94:4;
  int s2120c3f95:4;
  int s2120c3f96:4;
  int s2120c3f97:4;
  int s2120c3f98:4;
  int s2120c3f99:4;
  int s2120c3f100:4;
  int s2120c3f101:4;
  int s2120c3f102:4;
  int s2120c3f103:4;
  int s2120c3f104:4;
  int s2120c3f105:4;
  int s2120c3f106:8;
  int s2120c3f107:8;
  int s2120c3f108:8;
  void *s2120c3f109[7];
  ::S2120C29_nt s2120c3f110;
  void *s2120c3f111[2];
  int s2120c3f112:16;
  int s2120c3f113:16;
  ::S2120C25 s2120c3f114;
  ::S2120C29_nt s2120c3f115;
  ::S2120C37 s2120c3f116;
  void *s2120c3f117[2];
  int s2120c3f118:24;
  int s2120c3f119:8;
  void *s2120c3f120;
  virtual  ~S2120C3_nt(); // _ZN10S2120C3_ntD1Ev
  virtual void  v25(); // _ZN10S2120C3_nt3v25Ev
  virtual void  v26(); // _ZN10S2120C3_nt3v26Ev
  virtual void  v27(); // _ZN10S2120C3_nt3v27Ev
  virtual void  v28(); // _ZN10S2120C3_nt3v28Ev
  virtual void  v29(); // _ZN10S2120C3_nt3v29Ev
  virtual void  v30(); // _ZN10S2120C3_nt3v30Ev
  virtual void  v31(); // _ZN10S2120C3_nt3v31Ev
  virtual void  v32(); // _ZN10S2120C3_nt3v32Ev
  virtual void  v33(); // _ZN10S2120C3_nt3v33Ev
  virtual void  v34(); // _ZN10S2120C3_nt3v34Ev
  virtual void  v35(); // _ZN10S2120C3_nt3v35Ev
  virtual void  v36(); // _ZN10S2120C3_nt3v36Ev
  virtual void  v37(); // _ZN10S2120C3_nt3v37Ev
  virtual void  v38(); // _ZN10S2120C3_nt3v38Ev
  virtual void  v39(); // _ZN10S2120C3_nt3v39Ev
  virtual void  v40(); // _ZN10S2120C3_nt3v40Ev
  virtual void  v41(); // _ZN10S2120C3_nt3v41Ev
  virtual void  v42(); // _ZN10S2120C3_nt3v42Ev
  virtual void  v43(); // _ZN10S2120C3_nt3v43Ev
  virtual void  v44(); // _ZN10S2120C3_nt3v44Ev
  virtual void  v45(); // _ZN10S2120C3_nt3v45Ev
  virtual void  v46(); // _ZN10S2120C3_nt3v46Ev
  virtual void  v47(); // _ZN10S2120C3_nt3v47Ev
  virtual void  v48(); // _ZN10S2120C3_nt3v48Ev
  virtual void  v49(); // _ZN10S2120C3_nt3v49Ev
  virtual void  v50(); // _ZN10S2120C3_nt3v50Ev
  virtual void  v51(); // _ZN10S2120C3_nt3v51Ev
  virtual void  v52(); // _ZN10S2120C3_nt3v52Ev
  virtual void  v53(); // _ZN10S2120C3_nt3v53Ev
  virtual void  v54(); // _ZN10S2120C3_nt3v54Ev
  virtual void  v55(); // _ZN10S2120C3_nt3v55Ev
  virtual void  v56(); // _ZN10S2120C3_nt3v56Ev
  virtual void  v57(); // _ZN10S2120C3_nt3v57Ev
  virtual void  v58(); // _ZN10S2120C3_nt3v58Ev
  virtual void  v59(); // _ZN10S2120C3_nt3v59Ev
  virtual void  v60(); // _ZN10S2120C3_nt3v60Ev
  virtual void  v61(); // _ZN10S2120C3_nt3v61Ev
  virtual void  v62(); // _ZN10S2120C3_nt3v62Ev
  virtual void  v63(); // _ZN10S2120C3_nt3v63Ev
  virtual void  v64(); // _ZN10S2120C3_nt3v64Ev
  virtual void  v65(); // _ZN10S2120C3_nt3v65Ev
  virtual void  v66(); // _ZN10S2120C3_nt3v66Ev
  virtual void  v67(); // _ZN10S2120C3_nt3v67Ev
  virtual void  v68(); // _ZN10S2120C3_nt3v68Ev
  virtual void  v69(); // _ZN10S2120C3_nt3v69Ev
  virtual void  v70(); // _ZN10S2120C3_nt3v70Ev
  virtual void  v71(); // _ZN10S2120C3_nt3v71Ev
  virtual void  v72(); // _ZN10S2120C3_nt3v72Ev
  virtual void  v73(); // _ZN10S2120C3_nt3v73Ev
  virtual void  v74(); // _ZN10S2120C3_nt3v74Ev
  virtual void  v75(); // _ZN10S2120C3_nt3v75Ev
  virtual void  v76(); // _ZN10S2120C3_nt3v76Ev
  virtual void  v77(); // _ZN10S2120C3_nt3v77Ev
  virtual void  v78(); // _ZN10S2120C3_nt3v78Ev
  virtual void  v79(); // _ZN10S2120C3_nt3v79Ev
  virtual void  v80(); // _ZN10S2120C3_nt3v80Ev
  virtual void  v81(); // _ZN10S2120C3_nt3v81Ev
  virtual void  v82(); // _ZN10S2120C3_nt3v82Ev
  virtual void  v83(); // _ZN10S2120C3_nt3v83Ev
  virtual void  v84(); // _ZN10S2120C3_nt3v84Ev
  virtual void  v85(); // _ZN10S2120C3_nt3v85Ev
  virtual void  v86(); // _ZN10S2120C3_nt3v86Ev
  virtual void  v87(); // _ZN10S2120C3_nt3v87Ev
  virtual void  v88(); // _ZN10S2120C3_nt3v88Ev
  virtual void  v89(); // _ZN10S2120C3_nt3v89Ev
  virtual void  v90(); // _ZN10S2120C3_nt3v90Ev
  virtual void  v91(); // _ZN10S2120C3_nt3v91Ev
  virtual void  v92(); // _ZN10S2120C3_nt3v92Ev
  virtual void  v93(); // _ZN10S2120C3_nt3v93Ev
  virtual void  v94(); // _ZN10S2120C3_nt3v94Ev
  virtual void  v95(); // _ZN10S2120C3_nt3v95Ev
  virtual void  v96(); // _ZN10S2120C3_nt3v96Ev
  virtual void  v97(); // _ZN10S2120C3_nt3v97Ev
  virtual void  v98(); // _ZN10S2120C3_nt3v98Ev
  virtual void  v99(); // _ZN10S2120C3_nt3v99Ev
  virtual void  v100(); // _ZN10S2120C3_nt4v100Ev
  virtual void  v101(); // _ZN10S2120C3_nt4v101Ev
  virtual void  v102(); // _ZN10S2120C3_nt4v102Ev
  S2120C3_nt(); // tgen
};
//SIG(-1 S2120C3_nt) C1{ BC2{ vd v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 Fp Fi FC3{ BC4{ m Fp Fi FC5{ m} FC6{ m}}} FC3 Fi} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 FC7{ m FC8{ m FL[2]}} FC7 FC7 FC7 FC9{ m FC7} FC10{ m FC7 FC7 FC7 FC7} FC10 FC7 FC7 FC7 Fp FC9 FC11{ m FC12{ m Fp Fi FC6} Fi} Fi Fp[7] FC13{ m Fp Fi FC14{ m} FC14} Fi:8 Fi:8 Fi:16 Fi:16 Fi:8 Fi:8 Fi:8 Fi:32 Fi:8 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fi[7] Fp[6] Fi:8 Fi:8 Fi:8 Fi:8 Fi:8 Fi:8 FC15{ BC16{ m Fp Fi FC17{ m} FC17}} Fp[4] Fi:8 Fi:8 Fi:8 Fi:8 Fi:8 Fi:16 Fi:16 Fi:16 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:8 Fi:8 Fi:8 Fp[7] FC18{ m Fp Fi[2] FC19{ m}} Fp[2] Fi:16 Fi:16 FC15 FC18 FC20{ m Fp Fi[2] FC19} Fp[2] Fi:24 Fi:8 Fp}


 S2120C3_nt ::~S2120C3_nt(){ note_dtor("S2120C3_nt", this);}
void  S2120C3_nt ::v25(){vfunc_called(this, "_ZN10S2120C3_nt3v25Ev");}
void  S2120C3_nt ::v26(){vfunc_called(this, "_ZN10S2120C3_nt3v26Ev");}
void  S2120C3_nt ::v27(){vfunc_called(this, "_ZN10S2120C3_nt3v27Ev");}
void  S2120C3_nt ::v28(){vfunc_called(this, "_ZN10S2120C3_nt3v28Ev");}
void  S2120C3_nt ::v29(){vfunc_called(this, "_ZN10S2120C3_nt3v29Ev");}
void  S2120C3_nt ::v30(){vfunc_called(this, "_ZN10S2120C3_nt3v30Ev");}
void  S2120C3_nt ::v31(){vfunc_called(this, "_ZN10S2120C3_nt3v31Ev");}
void  S2120C3_nt ::v32(){vfunc_called(this, "_ZN10S2120C3_nt3v32Ev");}
void  S2120C3_nt ::v33(){vfunc_called(this, "_ZN10S2120C3_nt3v33Ev");}
void  S2120C3_nt ::v34(){vfunc_called(this, "_ZN10S2120C3_nt3v34Ev");}
void  S2120C3_nt ::v35(){vfunc_called(this, "_ZN10S2120C3_nt3v35Ev");}
void  S2120C3_nt ::v36(){vfunc_called(this, "_ZN10S2120C3_nt3v36Ev");}
void  S2120C3_nt ::v37(){vfunc_called(this, "_ZN10S2120C3_nt3v37Ev");}
void  S2120C3_nt ::v38(){vfunc_called(this, "_ZN10S2120C3_nt3v38Ev");}
void  S2120C3_nt ::v39(){vfunc_called(this, "_ZN10S2120C3_nt3v39Ev");}
void  S2120C3_nt ::v40(){vfunc_called(this, "_ZN10S2120C3_nt3v40Ev");}
void  S2120C3_nt ::v41(){vfunc_called(this, "_ZN10S2120C3_nt3v41Ev");}
void  S2120C3_nt ::v42(){vfunc_called(this, "_ZN10S2120C3_nt3v42Ev");}
void  S2120C3_nt ::v43(){vfunc_called(this, "_ZN10S2120C3_nt3v43Ev");}
void  S2120C3_nt ::v44(){vfunc_called(this, "_ZN10S2120C3_nt3v44Ev");}
void  S2120C3_nt ::v45(){vfunc_called(this, "_ZN10S2120C3_nt3v45Ev");}
void  S2120C3_nt ::v46(){vfunc_called(this, "_ZN10S2120C3_nt3v46Ev");}
void  S2120C3_nt ::v47(){vfunc_called(this, "_ZN10S2120C3_nt3v47Ev");}
void  S2120C3_nt ::v48(){vfunc_called(this, "_ZN10S2120C3_nt3v48Ev");}
void  S2120C3_nt ::v49(){vfunc_called(this, "_ZN10S2120C3_nt3v49Ev");}
void  S2120C3_nt ::v50(){vfunc_called(this, "_ZN10S2120C3_nt3v50Ev");}
void  S2120C3_nt ::v51(){vfunc_called(this, "_ZN10S2120C3_nt3v51Ev");}
void  S2120C3_nt ::v52(){vfunc_called(this, "_ZN10S2120C3_nt3v52Ev");}
void  S2120C3_nt ::v53(){vfunc_called(this, "_ZN10S2120C3_nt3v53Ev");}
void  S2120C3_nt ::v54(){vfunc_called(this, "_ZN10S2120C3_nt3v54Ev");}
void  S2120C3_nt ::v55(){vfunc_called(this, "_ZN10S2120C3_nt3v55Ev");}
void  S2120C3_nt ::v56(){vfunc_called(this, "_ZN10S2120C3_nt3v56Ev");}
void  S2120C3_nt ::v57(){vfunc_called(this, "_ZN10S2120C3_nt3v57Ev");}
void  S2120C3_nt ::v58(){vfunc_called(this, "_ZN10S2120C3_nt3v58Ev");}
void  S2120C3_nt ::v59(){vfunc_called(this, "_ZN10S2120C3_nt3v59Ev");}
void  S2120C3_nt ::v60(){vfunc_called(this, "_ZN10S2120C3_nt3v60Ev");}
void  S2120C3_nt ::v61(){vfunc_called(this, "_ZN10S2120C3_nt3v61Ev");}
void  S2120C3_nt ::v62(){vfunc_called(this, "_ZN10S2120C3_nt3v62Ev");}
void  S2120C3_nt ::v63(){vfunc_called(this, "_ZN10S2120C3_nt3v63Ev");}
void  S2120C3_nt ::v64(){vfunc_called(this, "_ZN10S2120C3_nt3v64Ev");}
void  S2120C3_nt ::v65(){vfunc_called(this, "_ZN10S2120C3_nt3v65Ev");}
void  S2120C3_nt ::v66(){vfunc_called(this, "_ZN10S2120C3_nt3v66Ev");}
void  S2120C3_nt ::v67(){vfunc_called(this, "_ZN10S2120C3_nt3v67Ev");}
void  S2120C3_nt ::v68(){vfunc_called(this, "_ZN10S2120C3_nt3v68Ev");}
void  S2120C3_nt ::v69(){vfunc_called(this, "_ZN10S2120C3_nt3v69Ev");}
void  S2120C3_nt ::v70(){vfunc_called(this, "_ZN10S2120C3_nt3v70Ev");}
void  S2120C3_nt ::v71(){vfunc_called(this, "_ZN10S2120C3_nt3v71Ev");}
void  S2120C3_nt ::v72(){vfunc_called(this, "_ZN10S2120C3_nt3v72Ev");}
void  S2120C3_nt ::v73(){vfunc_called(this, "_ZN10S2120C3_nt3v73Ev");}
void  S2120C3_nt ::v74(){vfunc_called(this, "_ZN10S2120C3_nt3v74Ev");}
void  S2120C3_nt ::v75(){vfunc_called(this, "_ZN10S2120C3_nt3v75Ev");}
void  S2120C3_nt ::v76(){vfunc_called(this, "_ZN10S2120C3_nt3v76Ev");}
void  S2120C3_nt ::v77(){vfunc_called(this, "_ZN10S2120C3_nt3v77Ev");}
void  S2120C3_nt ::v78(){vfunc_called(this, "_ZN10S2120C3_nt3v78Ev");}
void  S2120C3_nt ::v79(){vfunc_called(this, "_ZN10S2120C3_nt3v79Ev");}
void  S2120C3_nt ::v80(){vfunc_called(this, "_ZN10S2120C3_nt3v80Ev");}
void  S2120C3_nt ::v81(){vfunc_called(this, "_ZN10S2120C3_nt3v81Ev");}
void  S2120C3_nt ::v82(){vfunc_called(this, "_ZN10S2120C3_nt3v82Ev");}
void  S2120C3_nt ::v83(){vfunc_called(this, "_ZN10S2120C3_nt3v83Ev");}
void  S2120C3_nt ::v84(){vfunc_called(this, "_ZN10S2120C3_nt3v84Ev");}
void  S2120C3_nt ::v85(){vfunc_called(this, "_ZN10S2120C3_nt3v85Ev");}
void  S2120C3_nt ::v86(){vfunc_called(this, "_ZN10S2120C3_nt3v86Ev");}
void  S2120C3_nt ::v87(){vfunc_called(this, "_ZN10S2120C3_nt3v87Ev");}
void  S2120C3_nt ::v88(){vfunc_called(this, "_ZN10S2120C3_nt3v88Ev");}
void  S2120C3_nt ::v89(){vfunc_called(this, "_ZN10S2120C3_nt3v89Ev");}
void  S2120C3_nt ::v90(){vfunc_called(this, "_ZN10S2120C3_nt3v90Ev");}
void  S2120C3_nt ::v91(){vfunc_called(this, "_ZN10S2120C3_nt3v91Ev");}
void  S2120C3_nt ::v92(){vfunc_called(this, "_ZN10S2120C3_nt3v92Ev");}
void  S2120C3_nt ::v93(){vfunc_called(this, "_ZN10S2120C3_nt3v93Ev");}
void  S2120C3_nt ::v94(){vfunc_called(this, "_ZN10S2120C3_nt3v94Ev");}
void  S2120C3_nt ::v95(){vfunc_called(this, "_ZN10S2120C3_nt3v95Ev");}
void  S2120C3_nt ::v96(){vfunc_called(this, "_ZN10S2120C3_nt3v96Ev");}
void  S2120C3_nt ::v97(){vfunc_called(this, "_ZN10S2120C3_nt3v97Ev");}
void  S2120C3_nt ::v98(){vfunc_called(this, "_ZN10S2120C3_nt3v98Ev");}
void  S2120C3_nt ::v99(){vfunc_called(this, "_ZN10S2120C3_nt3v99Ev");}
void  S2120C3_nt ::v100(){vfunc_called(this, "_ZN10S2120C3_nt4v100Ev");}
void  S2120C3_nt ::v101(){vfunc_called(this, "_ZN10S2120C3_nt4v101Ev");}
void  S2120C3_nt ::v102(){vfunc_called(this, "_ZN10S2120C3_nt4v102Ev");}
S2120C3_nt ::S2120C3_nt(){ note_ctor("S2120C3_nt", this);} // tgen

//skip512 S2120C3_nt

#else // __cplusplus

extern void _ZN10S2120C3_ntC1Ev();
extern void _ZN10S2120C3_ntD1Ev();
Name_Map name_map_S2120C3_nt[] = {
  NSPAIR(_ZN10S2120C3_ntC1Ev),
  NSPAIR(_ZN10S2120C3_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2120C4_nt;
extern VTBL_ENTRY _ZTI10S2120C4_nt[];
extern  VTBL_ENTRY _ZTV10S2120C4_nt[];
static Base_Class bases_S2120C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2120C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S2120C3_nt[];
extern void _ZN10S2120C3_ntD1Ev();
extern void _ZN10S2120C3_ntD0Ev();
extern void _ZN10S2120C4_nt2v2Ev();
extern void _ZN10S2120C4_nt2v3Ev();
extern void _ZN10S2120C4_nt2v4Ev();
extern void _ZN10S2120C4_nt2v5Ev();
extern void _ZN10S2120C4_nt2v6Ev();
extern void _ZN10S2120C4_nt2v7Ev();
extern void _ZN10S2120C4_nt2v8Ev();
extern void _ZN10S2120C4_nt2v9Ev();
extern void _ZN10S2120C4_nt3v10Ev();
extern void _ZN10S2120C4_nt3v11Ev();
extern void _ZN10S2120C4_nt3v12Ev();
extern void _ZN10S2120C4_nt3v13Ev();
extern void _ZN10S2120C4_nt3v14Ev();
extern void _ZN10S2120C4_nt3v15Ev();
extern void _ZN10S2120C4_nt3v16Ev();
extern void _ZN10S2120C4_nt3v17Ev();
extern void _ZN10S2120C4_nt3v18Ev();
extern void _ZN10S2120C4_nt3v19Ev();
extern void _ZN10S2120C4_nt3v20Ev();
extern void _ZN10S2120C4_nt3v21Ev();
extern void _ZN10S2120C4_nt3v22Ev();
extern void _ZN10S2120C4_nt3v23Ev();
extern void _ZN10S2120C4_nt3v24Ev();
extern void _ZN10S2120C3_nt3v25Ev();
extern void _ZN10S2120C3_nt3v26Ev();
extern void _ZN10S2120C3_nt3v27Ev();
extern void _ZN10S2120C3_nt3v28Ev();
extern void _ZN10S2120C3_nt3v29Ev();
extern void _ZN10S2120C3_nt3v30Ev();
extern void _ZN10S2120C3_nt3v31Ev();
extern void _ZN10S2120C3_nt3v32Ev();
extern void _ZN10S2120C3_nt3v33Ev();
extern void _ZN10S2120C3_nt3v34Ev();
extern void _ZN10S2120C3_nt3v35Ev();
extern void _ZN10S2120C3_nt3v36Ev();
extern void _ZN10S2120C3_nt3v37Ev();
extern void _ZN10S2120C3_nt3v38Ev();
extern void _ZN10S2120C3_nt3v39Ev();
extern void _ZN10S2120C3_nt3v40Ev();
extern void _ZN10S2120C3_nt3v41Ev();
extern void _ZN10S2120C3_nt3v42Ev();
extern void _ZN10S2120C3_nt3v43Ev();
extern void _ZN10S2120C3_nt3v44Ev();
extern void _ZN10S2120C3_nt3v45Ev();
extern void _ZN10S2120C3_nt3v46Ev();
extern void _ZN10S2120C3_nt3v47Ev();
extern void _ZN10S2120C3_nt3v48Ev();
extern void _ZN10S2120C3_nt3v49Ev();
extern void _ZN10S2120C3_nt3v50Ev();
extern void _ZN10S2120C3_nt3v51Ev();
extern void _ZN10S2120C3_nt3v52Ev();
extern void _ZN10S2120C3_nt3v53Ev();
extern void _ZN10S2120C3_nt3v54Ev();
extern void _ZN10S2120C3_nt3v55Ev();
extern void _ZN10S2120C3_nt3v56Ev();
extern void _ZN10S2120C3_nt3v57Ev();
extern void _ZN10S2120C3_nt3v58Ev();
extern void _ZN10S2120C3_nt3v59Ev();
extern void _ZN10S2120C3_nt3v60Ev();
extern void _ZN10S2120C3_nt3v61Ev();
extern void _ZN10S2120C3_nt3v62Ev();
extern void _ZN10S2120C3_nt3v63Ev();
extern void _ZN10S2120C3_nt3v64Ev();
extern void _ZN10S2120C3_nt3v65Ev();
extern void _ZN10S2120C3_nt3v66Ev();
extern void _ZN10S2120C3_nt3v67Ev();
extern void _ZN10S2120C3_nt3v68Ev();
extern void _ZN10S2120C3_nt3v69Ev();
extern void _ZN10S2120C3_nt3v70Ev();
extern void _ZN10S2120C3_nt3v71Ev();
extern void _ZN10S2120C3_nt3v72Ev();
extern void _ZN10S2120C3_nt3v73Ev();
extern void _ZN10S2120C3_nt3v74Ev();
extern void _ZN10S2120C3_nt3v75Ev();
extern void _ZN10S2120C3_nt3v76Ev();
extern void _ZN10S2120C3_nt3v77Ev();
extern void _ZN10S2120C3_nt3v78Ev();
extern void _ZN10S2120C3_nt3v79Ev();
extern void _ZN10S2120C3_nt3v80Ev();
extern void _ZN10S2120C3_nt3v81Ev();
extern void _ZN10S2120C3_nt3v82Ev();
extern void _ZN10S2120C3_nt3v83Ev();
extern void _ZN10S2120C3_nt3v84Ev();
extern void _ZN10S2120C3_nt3v85Ev();
extern void _ZN10S2120C3_nt3v86Ev();
extern void _ZN10S2120C3_nt3v87Ev();
extern void _ZN10S2120C3_nt3v88Ev();
extern void _ZN10S2120C3_nt3v89Ev();
extern void _ZN10S2120C3_nt3v90Ev();
extern void _ZN10S2120C3_nt3v91Ev();
extern void _ZN10S2120C3_nt3v92Ev();
extern void _ZN10S2120C3_nt3v93Ev();
extern void _ZN10S2120C3_nt3v94Ev();
extern void _ZN10S2120C3_nt3v95Ev();
extern void _ZN10S2120C3_nt3v96Ev();
extern void _ZN10S2120C3_nt3v97Ev();
extern void _ZN10S2120C3_nt3v98Ev();
extern void _ZN10S2120C3_nt3v99Ev();
extern void _ZN10S2120C3_nt4v100Ev();
extern void _ZN10S2120C3_nt4v101Ev();
extern void _ZN10S2120C3_nt4v102Ev();
static  VTBL_ENTRY vtc_S2120C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S2120C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S2120C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S2120C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S2120C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S2120C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S2120C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S2120C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S2120C4_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S2120C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S2120C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S2120C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S2120C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S2120C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S2120C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S2120C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S2120C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S2120C4_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S2120C4_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S2120C4_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S2120C4_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S2120C4_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S2120C4_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S2120C4_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S2120C4_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S2120C4_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v41Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v42Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v43Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v44Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v45Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v46Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v47Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v48Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v49Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v50Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v51Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v52Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v53Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v54Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v55Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v56Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v57Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v58Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v59Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v60Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v61Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v62Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v63Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v64Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v65Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v66Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v67Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v68Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v69Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v70Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v71Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v72Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v73Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v74Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v75Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v76Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v77Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v78Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v79Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v80Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v81Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v82Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v83Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v84Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v85Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v86Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v87Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v88Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v89Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v90Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v91Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v92Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v93Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v94Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v95Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v96Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v97Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v98Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v99Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt4v100Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt4v101Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt4v102Ev,
};
extern VTBL_ENTRY _ZTI10S2120C3_nt[];
VTBL_ENTRY *P__ZTI10S2120C3_nt = _ZTI10S2120C3_nt; 
extern  VTBL_ENTRY _ZTV10S2120C3_nt[];
Class_Descriptor cd_S2120C3_nt = {  "S2120C3_nt", // class name
  bases_S2120C3_nt, 1,
  &(vtc_S2120C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(832,632), // object size
  NSPAIRA(_ZTI10S2120C3_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S2120C3_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  S2120C2_nt  : S2120C3_nt {
  void *s2120c2f0;
  virtual  ~S2120C2_nt(); // _ZN10S2120C2_ntD1Ev
  virtual void  v103(); // _ZN10S2120C2_nt4v103Ev
  virtual void  v104(); // _ZN10S2120C2_nt4v104Ev
  virtual void  v105(); // _ZN10S2120C2_nt4v105Ev
  virtual void  v106(); // _ZN10S2120C2_nt4v106Ev
  virtual void  v107(); // _ZN10S2120C2_nt4v107Ev
  virtual void  v108(); // _ZN10S2120C2_nt4v108Ev
  virtual void  v109(); // _ZN10S2120C2_nt4v109Ev
  virtual void  v110(); // _ZN10S2120C2_nt4v110Ev
  virtual void  v111(); // _ZN10S2120C2_nt4v111Ev
  virtual void  v112(); // _ZN10S2120C2_nt4v112Ev
  S2120C2_nt(); // tgen
};
//SIG(-1 S2120C2_nt) C1{ BC2{ BC3{ vd v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 Fp Fi FC4{ BC5{ m Fp Fi FC6{ m} FC7{ m}}} FC4 Fi} vd v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 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 FC8{ m FC9{ m FL[2]}} FC8 FC8 FC8 FC10{ m FC8} FC11{ m FC8 FC8 FC8 FC8} FC11 FC8 FC8 FC8 Fp FC10 FC12{ m FC13{ m Fp Fi FC7} Fi} Fi Fp[7] FC14{ m Fp Fi FC15{ m} FC15} Fi:8 Fi:8 Fi:16 Fi:16 Fi:8 Fi:8 Fi:8 Fi:32 Fi:8 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fi[7] Fp[6] Fi:8 Fi:8 Fi:8 Fi:8 Fi:8 Fi:8 FC16{ BC17{ m Fp Fi FC18{ m} FC18}} Fp[4] Fi:8 Fi:8 Fi:8 Fi:8 Fi:8 Fi:16 Fi:16 Fi:16 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:8 Fi:8 Fi:8 Fp[7] FC19{ m Fp Fi[2] FC20{ m}} Fp[2] Fi:16 Fi:16 FC16 FC19 FC21{ m Fp Fi[2] FC20} Fp[2] Fi:24 Fi:8 Fp} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 Fp}


 S2120C2_nt ::~S2120C2_nt(){ note_dtor("S2120C2_nt", this);}
void  S2120C2_nt ::v103(){vfunc_called(this, "_ZN10S2120C2_nt4v103Ev");}
void  S2120C2_nt ::v104(){vfunc_called(this, "_ZN10S2120C2_nt4v104Ev");}
void  S2120C2_nt ::v105(){vfunc_called(this, "_ZN10S2120C2_nt4v105Ev");}
void  S2120C2_nt ::v106(){vfunc_called(this, "_ZN10S2120C2_nt4v106Ev");}
void  S2120C2_nt ::v107(){vfunc_called(this, "_ZN10S2120C2_nt4v107Ev");}
void  S2120C2_nt ::v108(){vfunc_called(this, "_ZN10S2120C2_nt4v108Ev");}
void  S2120C2_nt ::v109(){vfunc_called(this, "_ZN10S2120C2_nt4v109Ev");}
void  S2120C2_nt ::v110(){vfunc_called(this, "_ZN10S2120C2_nt4v110Ev");}
void  S2120C2_nt ::v111(){vfunc_called(this, "_ZN10S2120C2_nt4v111Ev");}
void  S2120C2_nt ::v112(){vfunc_called(this, "_ZN10S2120C2_nt4v112Ev");}
S2120C2_nt ::S2120C2_nt(){ note_ctor("S2120C2_nt", this);} // tgen

//skip512 S2120C2_nt

#else // __cplusplus

extern void _ZN10S2120C2_ntC1Ev();
extern void _ZN10S2120C2_ntD1Ev();
Name_Map name_map_S2120C2_nt[] = {
  NSPAIR(_ZN10S2120C2_ntC1Ev),
  NSPAIR(_ZN10S2120C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2120C4_nt;
extern VTBL_ENTRY _ZTI10S2120C4_nt[];
extern  VTBL_ENTRY _ZTV10S2120C4_nt[];
extern Class_Descriptor cd_S2120C3_nt;
extern VTBL_ENTRY _ZTI10S2120C3_nt[];
extern  VTBL_ENTRY _ZTV10S2120C3_nt[];
static Base_Class bases_S2120C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2120C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2120C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI10S2120C2_nt[];
extern void _ZN10S2120C2_ntD1Ev();
extern void _ZN10S2120C2_ntD0Ev();
extern void _ZN10S2120C4_nt2v2Ev();
extern void _ZN10S2120C4_nt2v3Ev();
extern void _ZN10S2120C4_nt2v4Ev();
extern void _ZN10S2120C4_nt2v5Ev();
extern void _ZN10S2120C4_nt2v6Ev();
extern void _ZN10S2120C4_nt2v7Ev();
extern void _ZN10S2120C4_nt2v8Ev();
extern void _ZN10S2120C4_nt2v9Ev();
extern void _ZN10S2120C4_nt3v10Ev();
extern void _ZN10S2120C4_nt3v11Ev();
extern void _ZN10S2120C4_nt3v12Ev();
extern void _ZN10S2120C4_nt3v13Ev();
extern void _ZN10S2120C4_nt3v14Ev();
extern void _ZN10S2120C4_nt3v15Ev();
extern void _ZN10S2120C4_nt3v16Ev();
extern void _ZN10S2120C4_nt3v17Ev();
extern void _ZN10S2120C4_nt3v18Ev();
extern void _ZN10S2120C4_nt3v19Ev();
extern void _ZN10S2120C4_nt3v20Ev();
extern void _ZN10S2120C4_nt3v21Ev();
extern void _ZN10S2120C4_nt3v22Ev();
extern void _ZN10S2120C4_nt3v23Ev();
extern void _ZN10S2120C4_nt3v24Ev();
extern void _ZN10S2120C3_nt3v25Ev();
extern void _ZN10S2120C3_nt3v26Ev();
extern void _ZN10S2120C3_nt3v27Ev();
extern void _ZN10S2120C3_nt3v28Ev();
extern void _ZN10S2120C3_nt3v29Ev();
extern void _ZN10S2120C3_nt3v30Ev();
extern void _ZN10S2120C3_nt3v31Ev();
extern void _ZN10S2120C3_nt3v32Ev();
extern void _ZN10S2120C3_nt3v33Ev();
extern void _ZN10S2120C3_nt3v34Ev();
extern void _ZN10S2120C3_nt3v35Ev();
extern void _ZN10S2120C3_nt3v36Ev();
extern void _ZN10S2120C3_nt3v37Ev();
extern void _ZN10S2120C3_nt3v38Ev();
extern void _ZN10S2120C3_nt3v39Ev();
extern void _ZN10S2120C3_nt3v40Ev();
extern void _ZN10S2120C3_nt3v41Ev();
extern void _ZN10S2120C3_nt3v42Ev();
extern void _ZN10S2120C3_nt3v43Ev();
extern void _ZN10S2120C3_nt3v44Ev();
extern void _ZN10S2120C3_nt3v45Ev();
extern void _ZN10S2120C3_nt3v46Ev();
extern void _ZN10S2120C3_nt3v47Ev();
extern void _ZN10S2120C3_nt3v48Ev();
extern void _ZN10S2120C3_nt3v49Ev();
extern void _ZN10S2120C3_nt3v50Ev();
extern void _ZN10S2120C3_nt3v51Ev();
extern void _ZN10S2120C3_nt3v52Ev();
extern void _ZN10S2120C3_nt3v53Ev();
extern void _ZN10S2120C3_nt3v54Ev();
extern void _ZN10S2120C3_nt3v55Ev();
extern void _ZN10S2120C3_nt3v56Ev();
extern void _ZN10S2120C3_nt3v57Ev();
extern void _ZN10S2120C3_nt3v58Ev();
extern void _ZN10S2120C3_nt3v59Ev();
extern void _ZN10S2120C3_nt3v60Ev();
extern void _ZN10S2120C3_nt3v61Ev();
extern void _ZN10S2120C3_nt3v62Ev();
extern void _ZN10S2120C3_nt3v63Ev();
extern void _ZN10S2120C3_nt3v64Ev();
extern void _ZN10S2120C3_nt3v65Ev();
extern void _ZN10S2120C3_nt3v66Ev();
extern void _ZN10S2120C3_nt3v67Ev();
extern void _ZN10S2120C3_nt3v68Ev();
extern void _ZN10S2120C3_nt3v69Ev();
extern void _ZN10S2120C3_nt3v70Ev();
extern void _ZN10S2120C3_nt3v71Ev();
extern void _ZN10S2120C3_nt3v72Ev();
extern void _ZN10S2120C3_nt3v73Ev();
extern void _ZN10S2120C3_nt3v74Ev();
extern void _ZN10S2120C3_nt3v75Ev();
extern void _ZN10S2120C3_nt3v76Ev();
extern void _ZN10S2120C3_nt3v77Ev();
extern void _ZN10S2120C3_nt3v78Ev();
extern void _ZN10S2120C3_nt3v79Ev();
extern void _ZN10S2120C3_nt3v80Ev();
extern void _ZN10S2120C3_nt3v81Ev();
extern void _ZN10S2120C3_nt3v82Ev();
extern void _ZN10S2120C3_nt3v83Ev();
extern void _ZN10S2120C3_nt3v84Ev();
extern void _ZN10S2120C3_nt3v85Ev();
extern void _ZN10S2120C3_nt3v86Ev();
extern void _ZN10S2120C3_nt3v87Ev();
extern void _ZN10S2120C3_nt3v88Ev();
extern void _ZN10S2120C3_nt3v89Ev();
extern void _ZN10S2120C3_nt3v90Ev();
extern void _ZN10S2120C3_nt3v91Ev();
extern void _ZN10S2120C3_nt3v92Ev();
extern void _ZN10S2120C3_nt3v93Ev();
extern void _ZN10S2120C3_nt3v94Ev();
extern void _ZN10S2120C3_nt3v95Ev();
extern void _ZN10S2120C3_nt3v96Ev();
extern void _ZN10S2120C3_nt3v97Ev();
extern void _ZN10S2120C3_nt3v98Ev();
extern void _ZN10S2120C3_nt3v99Ev();
extern void _ZN10S2120C3_nt4v100Ev();
extern void _ZN10S2120C3_nt4v101Ev();
extern void _ZN10S2120C3_nt4v102Ev();
extern void _ZN10S2120C2_nt4v103Ev();
extern void _ZN10S2120C2_nt4v104Ev();
extern void _ZN10S2120C2_nt4v105Ev();
extern void _ZN10S2120C2_nt4v106Ev();
extern void _ZN10S2120C2_nt4v107Ev();
extern void _ZN10S2120C2_nt4v108Ev();
extern void _ZN10S2120C2_nt4v109Ev();
extern void _ZN10S2120C2_nt4v110Ev();
extern void _ZN10S2120C2_nt4v111Ev();
extern void _ZN10S2120C2_nt4v112Ev();
static  VTBL_ENTRY vtc_S2120C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S2120C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S2120C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S2120C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S2120C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S2120C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S2120C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S2120C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S2120C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S2120C4_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S2120C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S2120C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S2120C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S2120C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S2120C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S2120C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S2120C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S2120C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S2120C4_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S2120C4_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S2120C4_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S2120C4_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S2120C4_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S2120C4_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S2120C4_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S2120C4_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S2120C4_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v41Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v42Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v43Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v44Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v45Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v46Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v47Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v48Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v49Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v50Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v51Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v52Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v53Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v54Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v55Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v56Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v57Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v58Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v59Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v60Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v61Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v62Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v63Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v64Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v65Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v66Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v67Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v68Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v69Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v70Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v71Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v72Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v73Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v74Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v75Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v76Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v77Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v78Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v79Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v80Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v81Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v82Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v83Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v84Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v85Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v86Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v87Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v88Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v89Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v90Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v91Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v92Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v93Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v94Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v95Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v96Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v97Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v98Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v99Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt4v100Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt4v101Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt4v102Ev,
  (VTBL_ENTRY)&_ZN10S2120C2_nt4v103Ev,
  (VTBL_ENTRY)&_ZN10S2120C2_nt4v104Ev,
  (VTBL_ENTRY)&_ZN10S2120C2_nt4v105Ev,
  (VTBL_ENTRY)&_ZN10S2120C2_nt4v106Ev,
  (VTBL_ENTRY)&_ZN10S2120C2_nt4v107Ev,
  (VTBL_ENTRY)&_ZN10S2120C2_nt4v108Ev,
  (VTBL_ENTRY)&_ZN10S2120C2_nt4v109Ev,
  (VTBL_ENTRY)&_ZN10S2120C2_nt4v110Ev,
  (VTBL_ENTRY)&_ZN10S2120C2_nt4v111Ev,
  (VTBL_ENTRY)&_ZN10S2120C2_nt4v112Ev,
};
extern VTBL_ENTRY _ZTI10S2120C2_nt[];
VTBL_ENTRY *P__ZTI10S2120C2_nt = _ZTI10S2120C2_nt; 
extern  VTBL_ENTRY _ZTV10S2120C2_nt[];
Class_Descriptor cd_S2120C2_nt = {  "S2120C2_nt", // class name
  bases_S2120C2_nt, 2,
  &(vtc_S2120C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(840,636), // object size
  NSPAIRA(_ZTI10S2120C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S2120C2_nt),115, //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  S2120C39  {
  unsigned char s2120c39f0:1;
  unsigned char s2120c39f1:1;
  virtual  ~S2120C39(); // _ZN8S2120C39D1Ev
  virtual void  v113(); // _ZN8S2120C394v113Ev
  virtual void  v114(); // _ZN8S2120C394v114Ev
  S2120C39(); // tgen
};
//SIG(-1 S2120C39) C1{ vd v1 v2 Fc:1 Fc:1}


 S2120C39 ::~S2120C39(){ note_dtor("S2120C39", this);}
void  S2120C39 ::v113(){vfunc_called(this, "_ZN8S2120C394v113Ev");}
void  S2120C39 ::v114(){vfunc_called(this, "_ZN8S2120C394v114Ev");}
S2120C39 ::S2120C39(){ note_ctor("S2120C39", this);} // tgen

static void Test_S2120C39()
{
  extern Class_Descriptor cd_S2120C39;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S2120C39, buf);
    S2120C39 *dp, &lv = *(dp=new (buf) S2120C39());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S2120C39)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2120C39)");
    set_bf_and_test(lv, s2120c39f0, ABISELECT(8,4), 0, 1, 1, "S2120C39");
    set_bf_and_test(lv, s2120c39f1, ABISELECT(8,4), 1, 1, 1, "S2120C39");
    test_class_info(&lv, &cd_S2120C39);
    dp->~S2120C39();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2120C39(Test_S2120C39, "S2120C39", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S2120C39C1Ev();
extern void _ZN8S2120C39D1Ev();
Name_Map name_map_S2120C39[] = {
  NSPAIR(_ZN8S2120C39C1Ev),
  NSPAIR(_ZN8S2120C39D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S2120C39[];
extern void _ZN8S2120C39D1Ev();
extern void _ZN8S2120C39D0Ev();
extern void _ZN8S2120C394v113Ev();
extern void _ZN8S2120C394v114Ev();
static  VTBL_ENTRY vtc_S2120C39[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S2120C39[0]),
  (VTBL_ENTRY)&_ZN8S2120C39D1Ev,
  (VTBL_ENTRY)&_ZN8S2120C39D0Ev,
  (VTBL_ENTRY)&_ZN8S2120C394v113Ev,
  (VTBL_ENTRY)&_ZN8S2120C394v114Ev,
};
extern VTBL_ENTRY _ZTI8S2120C39[];
extern  VTBL_ENTRY _ZTV8S2120C39[];
Class_Descriptor cd_S2120C39 = {  "S2120C39", // class name
  0,0,//no base classes
  &(vtc_S2120C39[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S2120C39),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S2120C39),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  S2120C1  : S2120C2_nt , S2120C39 {
  void *s2120c1f0[2];
  int s2120c1f1;
  virtual  ~S2120C1(); // _ZN7S2120C1D1Ev
  virtual void  v1(); // _ZN7S2120C12v1Ev
  S2120C1(); // tgen
};
//SIG(1 S2120C1) C1{ BC2{ BC3{ BC4{ vd v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 Fp Fi FC5{ BC6{ m Fp Fi FC7{ m} FC8{ m}}} FC5 Fi} vd v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 FC9{ m FC10{ m FL[2]}} FC9 FC9 FC9 FC11{ m FC9} FC12{ m FC9 FC9 FC9 FC9} FC12 FC9 FC9 FC9 Fp FC11 FC13{ m FC14{ m Fp Fi FC8} Fi} Fi Fp[7] FC15{ m Fp Fi FC16{ m} FC16} Fi:8 Fi:8 Fi:16 Fi:16 Fi:8 Fi:8 Fi:8 Fi:32 Fi:8 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fi[7] Fp[6] Fi:8 Fi:8 Fi:8 Fi:8 Fi:8 Fi:8 FC17{ BC18{ m Fp Fi FC19{ m} FC19}} Fp[4] Fi:8 Fi:8 Fi:8 Fi:8 Fi:8 Fi:16 Fi:16 Fi:16 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:8 Fi:8 Fi:8 Fp[7] FC20{ m Fp Fi[2] FC21{ m}} Fp[2] Fi:16 Fi:16 FC17 FC20 FC22{ m Fp Fi[2] FC21} Fp[2] Fi:24 Fi:8 Fp} vd v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 Fp} BC23{ vd v113 v114 Fc:1 Fc:1} vd v1 Fp[2] Fi}


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

static void Test_S2120C1()
{
  extern Class_Descriptor cd_S2120C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(111,165)];
    init_test(&cd_S2120C1, buf);
    S2120C1 *dp, &lv = *(dp=new (buf) S2120C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(880,656), "sizeof(S2120C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2120C1)");
    check_base_class_offset(lv, (S2120C4_nt*)(S2120C3_nt*)(S2120C2_nt*), 0, "S2120C1");
    check_base_class_offset(lv, (S2120C3_nt*)(S2120C2_nt*), 0, "S2120C1");
    check_base_class_offset(lv, (S2120C2_nt*), 0, "S2120C1");
    check_base_class_offset(lv, (S2120C39*), ABISELECT(840,636), "S2120C1");
    check_field_offset(lv, s2120c1f0, ABISELECT(856,644), "S2120C1.s2120c1f0");
    check_field_offset(lv, s2120c1f1, ABISELECT(872,652), "S2120C1.s2120c1f1");
    test_class_info(&lv, &cd_S2120C1);
    dp->~S2120C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2120C1(Test_S2120C1, "S2120C1", ABISELECT(880,656));

#else // __cplusplus

extern void _ZN7S2120C1C1Ev();
extern void _ZN7S2120C1D1Ev();
Name_Map name_map_S2120C1[] = {
  NSPAIR(_ZN7S2120C1C1Ev),
  NSPAIR(_ZN7S2120C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2120C4_nt;
extern VTBL_ENTRY _ZTI10S2120C4_nt[];
extern  VTBL_ENTRY _ZTV10S2120C4_nt[];
extern Class_Descriptor cd_S2120C3_nt;
extern VTBL_ENTRY _ZTI10S2120C3_nt[];
extern  VTBL_ENTRY _ZTV10S2120C3_nt[];
extern Class_Descriptor cd_S2120C2_nt;
extern VTBL_ENTRY _ZTI10S2120C2_nt[];
extern  VTBL_ENTRY _ZTV10S2120C2_nt[];
extern Class_Descriptor cd_S2120C39;
extern VTBL_ENTRY _ZTI8S2120C39[];
extern  VTBL_ENTRY _ZTV8S2120C39[];
static Base_Class bases_S2120C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2120C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2120C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2120C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2120C39,    ABISELECT(840,636), //bcp->offset
    116, //bcp->virtual_function_table_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 _ZTI7S2120C1[];
extern void _ZN7S2120C1D1Ev();
extern void _ZN7S2120C1D0Ev();
extern void _ZN10S2120C4_nt2v2Ev();
extern void _ZN10S2120C4_nt2v3Ev();
extern void _ZN10S2120C4_nt2v4Ev();
extern void _ZN10S2120C4_nt2v5Ev();
extern void _ZN10S2120C4_nt2v6Ev();
extern void _ZN10S2120C4_nt2v7Ev();
extern void _ZN10S2120C4_nt2v8Ev();
extern void _ZN10S2120C4_nt2v9Ev();
extern void _ZN10S2120C4_nt3v10Ev();
extern void _ZN10S2120C4_nt3v11Ev();
extern void _ZN10S2120C4_nt3v12Ev();
extern void _ZN10S2120C4_nt3v13Ev();
extern void _ZN10S2120C4_nt3v14Ev();
extern void _ZN10S2120C4_nt3v15Ev();
extern void _ZN10S2120C4_nt3v16Ev();
extern void _ZN10S2120C4_nt3v17Ev();
extern void _ZN10S2120C4_nt3v18Ev();
extern void _ZN10S2120C4_nt3v19Ev();
extern void _ZN10S2120C4_nt3v20Ev();
extern void _ZN10S2120C4_nt3v21Ev();
extern void _ZN10S2120C4_nt3v22Ev();
extern void _ZN10S2120C4_nt3v23Ev();
extern void _ZN10S2120C4_nt3v24Ev();
extern void _ZN10S2120C3_nt3v25Ev();
extern void _ZN10S2120C3_nt3v26Ev();
extern void _ZN10S2120C3_nt3v27Ev();
extern void _ZN10S2120C3_nt3v28Ev();
extern void _ZN10S2120C3_nt3v29Ev();
extern void _ZN10S2120C3_nt3v30Ev();
extern void _ZN10S2120C3_nt3v31Ev();
extern void _ZN10S2120C3_nt3v32Ev();
extern void _ZN10S2120C3_nt3v33Ev();
extern void _ZN10S2120C3_nt3v34Ev();
extern void _ZN10S2120C3_nt3v35Ev();
extern void _ZN10S2120C3_nt3v36Ev();
extern void _ZN10S2120C3_nt3v37Ev();
extern void _ZN10S2120C3_nt3v38Ev();
extern void _ZN10S2120C3_nt3v39Ev();
extern void _ZN10S2120C3_nt3v40Ev();
extern void _ZN10S2120C3_nt3v41Ev();
extern void _ZN10S2120C3_nt3v42Ev();
extern void _ZN10S2120C3_nt3v43Ev();
extern void _ZN10S2120C3_nt3v44Ev();
extern void _ZN10S2120C3_nt3v45Ev();
extern void _ZN10S2120C3_nt3v46Ev();
extern void _ZN10S2120C3_nt3v47Ev();
extern void _ZN10S2120C3_nt3v48Ev();
extern void _ZN10S2120C3_nt3v49Ev();
extern void _ZN10S2120C3_nt3v50Ev();
extern void _ZN10S2120C3_nt3v51Ev();
extern void _ZN10S2120C3_nt3v52Ev();
extern void _ZN10S2120C3_nt3v53Ev();
extern void _ZN10S2120C3_nt3v54Ev();
extern void _ZN10S2120C3_nt3v55Ev();
extern void _ZN10S2120C3_nt3v56Ev();
extern void _ZN10S2120C3_nt3v57Ev();
extern void _ZN10S2120C3_nt3v58Ev();
extern void _ZN10S2120C3_nt3v59Ev();
extern void _ZN10S2120C3_nt3v60Ev();
extern void _ZN10S2120C3_nt3v61Ev();
extern void _ZN10S2120C3_nt3v62Ev();
extern void _ZN10S2120C3_nt3v63Ev();
extern void _ZN10S2120C3_nt3v64Ev();
extern void _ZN10S2120C3_nt3v65Ev();
extern void _ZN10S2120C3_nt3v66Ev();
extern void _ZN10S2120C3_nt3v67Ev();
extern void _ZN10S2120C3_nt3v68Ev();
extern void _ZN10S2120C3_nt3v69Ev();
extern void _ZN10S2120C3_nt3v70Ev();
extern void _ZN10S2120C3_nt3v71Ev();
extern void _ZN10S2120C3_nt3v72Ev();
extern void _ZN10S2120C3_nt3v73Ev();
extern void _ZN10S2120C3_nt3v74Ev();
extern void _ZN10S2120C3_nt3v75Ev();
extern void _ZN10S2120C3_nt3v76Ev();
extern void _ZN10S2120C3_nt3v77Ev();
extern void _ZN10S2120C3_nt3v78Ev();
extern void _ZN10S2120C3_nt3v79Ev();
extern void _ZN10S2120C3_nt3v80Ev();
extern void _ZN10S2120C3_nt3v81Ev();
extern void _ZN10S2120C3_nt3v82Ev();
extern void _ZN10S2120C3_nt3v83Ev();
extern void _ZN10S2120C3_nt3v84Ev();
extern void _ZN10S2120C3_nt3v85Ev();
extern void _ZN10S2120C3_nt3v86Ev();
extern void _ZN10S2120C3_nt3v87Ev();
extern void _ZN10S2120C3_nt3v88Ev();
extern void _ZN10S2120C3_nt3v89Ev();
extern void _ZN10S2120C3_nt3v90Ev();
extern void _ZN10S2120C3_nt3v91Ev();
extern void _ZN10S2120C3_nt3v92Ev();
extern void _ZN10S2120C3_nt3v93Ev();
extern void _ZN10S2120C3_nt3v94Ev();
extern void _ZN10S2120C3_nt3v95Ev();
extern void _ZN10S2120C3_nt3v96Ev();
extern void _ZN10S2120C3_nt3v97Ev();
extern void _ZN10S2120C3_nt3v98Ev();
extern void _ZN10S2120C3_nt3v99Ev();
extern void _ZN10S2120C3_nt4v100Ev();
extern void _ZN10S2120C3_nt4v101Ev();
extern void _ZN10S2120C3_nt4v102Ev();
extern void _ZN10S2120C2_nt4v103Ev();
extern void _ZN10S2120C2_nt4v104Ev();
extern void _ZN10S2120C2_nt4v105Ev();
extern void _ZN10S2120C2_nt4v106Ev();
extern void _ZN10S2120C2_nt4v107Ev();
extern void _ZN10S2120C2_nt4v108Ev();
extern void _ZN10S2120C2_nt4v109Ev();
extern void _ZN10S2120C2_nt4v110Ev();
extern void _ZN10S2120C2_nt4v111Ev();
extern void _ZN10S2120C2_nt4v112Ev();
extern void _ZN7S2120C12v1Ev();
extern void ABISELECT(_ZThn840_N7S2120C1D1Ev,_ZThn636_N7S2120C1D1Ev)();
extern void ABISELECT(_ZThn840_N7S2120C1D0Ev,_ZThn636_N7S2120C1D0Ev)();
extern void _ZN8S2120C394v113Ev();
extern void _ZN8S2120C394v114Ev();
static  VTBL_ENTRY vtc_S2120C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2120C1[0]),
  (VTBL_ENTRY)&_ZN7S2120C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2120C1D0Ev,
  (VTBL_ENTRY)&_ZN10S2120C4_nt2v2Ev,
  (VTBL_ENTRY)&_ZN10S2120C4_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S2120C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S2120C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S2120C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S2120C4_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S2120C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S2120C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S2120C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S2120C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S2120C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S2120C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S2120C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S2120C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S2120C4_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S2120C4_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S2120C4_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S2120C4_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S2120C4_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S2120C4_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S2120C4_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S2120C4_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S2120C4_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v41Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v42Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v43Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v44Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v45Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v46Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v47Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v48Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v49Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v50Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v51Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v52Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v53Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v54Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v55Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v56Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v57Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v58Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v59Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v60Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v61Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v62Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v63Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v64Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v65Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v66Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v67Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v68Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v69Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v70Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v71Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v72Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v73Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v74Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v75Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v76Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v77Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v78Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v79Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v80Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v81Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v82Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v83Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v84Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v85Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v86Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v87Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v88Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v89Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v90Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v91Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v92Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v93Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v94Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v95Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v96Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v97Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v98Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt3v99Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt4v100Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt4v101Ev,
  (VTBL_ENTRY)&_ZN10S2120C3_nt4v102Ev,
  (VTBL_ENTRY)&_ZN10S2120C2_nt4v103Ev,
  (VTBL_ENTRY)&_ZN10S2120C2_nt4v104Ev,
  (VTBL_ENTRY)&_ZN10S2120C2_nt4v105Ev,
  (VTBL_ENTRY)&_ZN10S2120C2_nt4v106Ev,
  (VTBL_ENTRY)&_ZN10S2120C2_nt4v107Ev,
  (VTBL_ENTRY)&_ZN10S2120C2_nt4v108Ev,
  (VTBL_ENTRY)&_ZN10S2120C2_nt4v109Ev,
  (VTBL_ENTRY)&_ZN10S2120C2_nt4v110Ev,
  (VTBL_ENTRY)&_ZN10S2120C2_nt4v111Ev,
  (VTBL_ENTRY)&_ZN10S2120C2_nt4v112Ev,
  (VTBL_ENTRY)&_ZN7S2120C12v1Ev,
  ABISELECT(-840,-636),
  (VTBL_ENTRY)&(_ZTI7S2120C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn840_N7S2120C1D1Ev,_ZThn636_N7S2120C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn840_N7S2120C1D0Ev,_ZThn636_N7S2120C1D0Ev),
  (VTBL_ENTRY)&_ZN8S2120C394v113Ev,
  (VTBL_ENTRY)&_ZN8S2120C394v114Ev,
};
extern VTBL_ENTRY _ZTI7S2120C1[];
extern  VTBL_ENTRY _ZTV7S2120C1[];
Class_Descriptor cd_S2120C1 = {  "S2120C1", // class name
  bases_S2120C1, 4,
  &(vtc_S2120C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(880,656), // object size
  NSPAIRA(_ZTI7S2120C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2120C1),122, //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  S601C9  {
  int s601c9f0:4;
  int s601c9f1:4;
  int s601c9f2:4;
  int s601c9f3:2;
  unsigned int s601c9f4:1;
  int s601c9f5:17;
};
//SIG(1 S601C9) C1{ Fi:4 Fi:4 Fi:4 Fi:2 Fi:1 Fi:17}



static void Test_S601C9()
{
  {
    init_simple_test("S601C9");
    static S601C9 lv;
    check2(sizeof(lv), 4, "sizeof(S601C9)");
    check2(__alignof__(lv), 4, "__alignof__(S601C9)");
    set_bf_and_test(lv, s601c9f0, 0, 0, 4, 1, "S601C9");
    set_bf_and_test(lv, s601c9f0, 0, 0, 4, hide_sll(1LL<<3), "S601C9");
    set_bf_and_test(lv, s601c9f1, 0, 4, 4, 1, "S601C9");
    set_bf_and_test(lv, s601c9f1, 0, 4, 4, hide_sll(1LL<<3), "S601C9");
    set_bf_and_test(lv, s601c9f2, 1, 0, 4, 1, "S601C9");
    set_bf_and_test(lv, s601c9f2, 1, 0, 4, hide_sll(1LL<<3), "S601C9");
    set_bf_and_test(lv, s601c9f3, 1, 4, 2, 1, "S601C9");
    set_bf_and_test(lv, s601c9f3, 1, 4, 2, hide_sll(1LL<<1), "S601C9");
    set_bf_and_test(lv, s601c9f4, 1, 6, 1, 1, "S601C9");
    set_bf_and_test(lv, s601c9f5, 1, 7, 17, 1, "S601C9");
    set_bf_and_test(lv, s601c9f5, 1, 7, 17, hide_sll(1LL<<16), "S601C9");
  }
}
static Arrange_To_Call_Me vS601C9(Test_S601C9, "S601C9", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

union  S601C8  {
  ::S601C9 s601c8f0;
  int s601c8f1;
  void  mf601c8(); // _ZN6S601C87mf601c8Ev
};
//SIG(1 S601C8) U1{ m FC2{ Fi:4 Fi:4 Fi:4 Fi:2 Fi:1 Fi:17} Fi}

#endif // __cplusplus
#ifdef __cplusplus

struct  S601C10  {
  void *s601c10f0;
  void *s601c10f1;
  void  mf601c10(); // _ZN7S601C108mf601c10Ev
};
//SIG(-1 S601C10) C1{ m Fp[2]}


void  S601C10 ::mf601c10(){}

static void Test_S601C10()
{
  {
    init_simple_test("S601C10");
    S601C10 lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S601C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S601C10)");
    check_field_offset(lv, s601c10f0, 0, "S601C10.s601c10f0");
    check_field_offset(lv, s601c10f1, ABISELECT(8,4), "S601C10.s601c10f1");
  }
}
static Arrange_To_Call_Me vS601C10(Test_S601C10, "S601C10", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S601C11  {
  void *s601c11f0;
  void *s601c11f1;
};
//SIG(-1 S601C11) C1{ Fp[2]}



static void Test_S601C11()
{
  {
    init_simple_test("S601C11");
    S601C11 lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S601C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S601C11)");
    check_field_offset(lv, s601c11f0, 0, "S601C11.s601c11f0");
    check_field_offset(lv, s601c11f1, ABISELECT(8,4), "S601C11.s601c11f1");
  }
}
static Arrange_To_Call_Me vS601C11(Test_S601C11, "S601C11", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S601C5  {
  ::S2120C13_nt s601c5f0;
  ::S2120C13_nt s601c5f1;
  void *s601c5f2;
  int s601c5f3;
  ::S601C8 s601c5f4;
  int s601c5f5:2;
  int s601c5f6:2;
  unsigned char s601c5f7:1;
  unsigned char s601c5f8:1;
  ::S601C10 s601c5f9;
  ::S601C11 s601c5f10[2];
  virtual  ~S601C5(); // _ZN6S601C5D1Ev
  virtual void  v5(); // _ZN6S601C52v5Ev
  virtual void  v6(); // _ZN6S601C52v6Ev
  virtual void  v7(); // _ZN6S601C52v7Ev
  virtual void  v8(); // _ZN6S601C52v8Ev
  virtual void  v9(); // _ZN6S601C52v9Ev
  virtual void  v10(); // _ZN6S601C53v10Ev
  virtual void  v11(); // _ZN6S601C53v11Ev
  virtual void  v12(); // _ZN6S601C53v12Ev
  virtual void  v13(); // _ZN6S601C53v13Ev
  virtual void  v14(); // _ZN6S601C53v14Ev
  virtual void  v15(); // _ZN6S601C53v15Ev
  virtual void  v16(); // _ZN6S601C53v16Ev
  virtual void  v17(); // _ZN6S601C53v17Ev
  virtual void  v18(); // _ZN6S601C53v18Ev
  virtual void  v19(); // _ZN6S601C53v19Ev
  S601C5(); // tgen
};
//SIG(-1 S601C5) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 FC2{ m FC3{ m FL[2]}} FC2 Fp Fi FU4{ m FC5{ Fi:4 Fi:4 Fi:4 Fi:2 Fi:1 Fi:17} Fi} Fi:2 Fi:2 Fc:1 Fc:1 FC6{ m Fp Fp} FC7{ Fp Fp}[2]}


 S601C5 ::~S601C5(){ note_dtor("S601C5", this);}
void  S601C5 ::v5(){vfunc_called(this, "_ZN6S601C52v5Ev");}
void  S601C5 ::v6(){vfunc_called(this, "_ZN6S601C52v6Ev");}
void  S601C5 ::v7(){vfunc_called(this, "_ZN6S601C52v7Ev");}
void  S601C5 ::v8(){vfunc_called(this, "_ZN6S601C52v8Ev");}
void  S601C5 ::v9(){vfunc_called(this, "_ZN6S601C52v9Ev");}
void  S601C5 ::v10(){vfunc_called(this, "_ZN6S601C53v10Ev");}
void  S601C5 ::v11(){vfunc_called(this, "_ZN6S601C53v11Ev");}
void  S601C5 ::v12(){vfunc_called(this, "_ZN6S601C53v12Ev");}
void  S601C5 ::v13(){vfunc_called(this, "_ZN6S601C53v13Ev");}
void  S601C5 ::v14(){vfunc_called(this, "_ZN6S601C53v14Ev");}
void  S601C5 ::v15(){vfunc_called(this, "_ZN6S601C53v15Ev");}
void  S601C5 ::v16(){vfunc_called(this, "_ZN6S601C53v16Ev");}
void  S601C5 ::v17(){vfunc_called(this, "_ZN6S601C53v17Ev");}
void  S601C5 ::v18(){vfunc_called(this, "_ZN6S601C53v18Ev");}
void  S601C5 ::v19(){vfunc_called(this, "_ZN6S601C53v19Ev");}
S601C5 ::S601C5(){ note_ctor("S601C5", this);} // tgen

static void Test_S601C5()
{
  extern Class_Descriptor cd_S601C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,20)];
    init_test(&cd_S601C5, buf);
    S601C5 *dp, &lv = *(dp=new (buf) S601C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,76), "sizeof(S601C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S601C5)");
    check_field_offset(lv, s601c5f0, ABISELECT(8,4), "S601C5.s601c5f0");
    check_field_offset(lv, s601c5f1, ABISELECT(24,20), "S601C5.s601c5f1");
    check_field_offset(lv, s601c5f2, ABISELECT(40,36), "S601C5.s601c5f2");
    check_field_offset(lv, s601c5f3, ABISELECT(48,40), "S601C5.s601c5f3");
    check_field_offset(lv, s601c5f4, ABISELECT(52,44), "S601C5.s601c5f4");
    set_bf_and_test(lv, s601c5f5, ABISELECT(56,48), 0, 2, 1, "S601C5");
    set_bf_and_test(lv, s601c5f5, ABISELECT(56,48), 0, 2, hide_sll(1LL<<1), "S601C5");
    set_bf_and_test(lv, s601c5f6, ABISELECT(56,48), 2, 2, 1, "S601C5");
    set_bf_and_test(lv, s601c5f6, ABISELECT(56,48), 2, 2, hide_sll(1LL<<1), "S601C5");
    set_bf_and_test(lv, s601c5f7, ABISELECT(56,48), 4, 1, 1, "S601C5");
    set_bf_and_test(lv, s601c5f8, ABISELECT(56,48), 5, 1, 1, "S601C5");
    check_field_offset(lv, s601c5f9, ABISELECT(64,52), "S601C5.s601c5f9");
    check_field_offset(lv, s601c5f10, ABISELECT(80,60), "S601C5.s601c5f10");
    test_class_info(&lv, &cd_S601C5);
    dp->~S601C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS601C5(Test_S601C5, "S601C5", ABISELECT(112,76));

#else // __cplusplus

extern void _ZN6S601C5C1Ev();
extern void _ZN6S601C5D1Ev();
Name_Map name_map_S601C5[] = {
  NSPAIR(_ZN6S601C5C1Ev),
  NSPAIR(_ZN6S601C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S601C5[];
extern void _ZN6S601C5D1Ev();
extern void _ZN6S601C5D0Ev();
extern void _ZN6S601C52v5Ev();
extern void _ZN6S601C52v6Ev();
extern void _ZN6S601C52v7Ev();
extern void _ZN6S601C52v8Ev();
extern void _ZN6S601C52v9Ev();
extern void _ZN6S601C53v10Ev();
extern void _ZN6S601C53v11Ev();
extern void _ZN6S601C53v12Ev();
extern void _ZN6S601C53v13Ev();
extern void _ZN6S601C53v14Ev();
extern void _ZN6S601C53v15Ev();
extern void _ZN6S601C53v16Ev();
extern void _ZN6S601C53v17Ev();
extern void _ZN6S601C53v18Ev();
extern void _ZN6S601C53v19Ev();
static  VTBL_ENTRY vtc_S601C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S601C5[0]),
  (VTBL_ENTRY)&_ZN6S601C5D1Ev,
  (VTBL_ENTRY)&_ZN6S601C5D0Ev,
  (VTBL_ENTRY)&_ZN6S601C52v5Ev,
  (VTBL_ENTRY)&_ZN6S601C52v6Ev,
  (VTBL_ENTRY)&_ZN6S601C52v7Ev,
  (VTBL_ENTRY)&_ZN6S601C52v8Ev,
  (VTBL_ENTRY)&_ZN6S601C52v9Ev,
  (VTBL_ENTRY)&_ZN6S601C53v10Ev,
  (VTBL_ENTRY)&_ZN6S601C53v11Ev,
  (VTBL_ENTRY)&_ZN6S601C53v12Ev,
  (VTBL_ENTRY)&_ZN6S601C53v13Ev,
  (VTBL_ENTRY)&_ZN6S601C53v14Ev,
  (VTBL_ENTRY)&_ZN6S601C53v15Ev,
  (VTBL_ENTRY)&_ZN6S601C53v16Ev,
  (VTBL_ENTRY)&_ZN6S601C53v17Ev,
  (VTBL_ENTRY)&_ZN6S601C53v18Ev,
  (VTBL_ENTRY)&_ZN6S601C53v19Ev,
};
extern VTBL_ENTRY _ZTI6S601C5[];
extern  VTBL_ENTRY _ZTV6S601C5[];
Class_Descriptor cd_S601C5 = {  "S601C5", // class name
  0,0,//no base classes
  &(vtc_S601C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,76), // object size
  NSPAIRA(_ZTI6S601C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S601C5),19, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S601C12  {
  ::S2120C13_nt s601c12f0;
  ::S2120C13_nt s601c12f1;
  void  mf601c12(); // _ZN7S601C128mf601c12Ev
};
//SIG(-1 S601C12) C1{ m FC2{ m FC3{ m FL[2]}} FC2}


void  S601C12 ::mf601c12(){}

static void Test_S601C12()
{
  {
    init_simple_test("S601C12");
    S601C12 lv;
    check2(sizeof(lv), 32, "sizeof(S601C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S601C12)");
    check_field_offset(lv, s601c12f0, 0, "S601C12.s601c12f0");
    check_field_offset(lv, s601c12f1, 16, "S601C12.s601c12f1");
  }
}
static Arrange_To_Call_Me vS601C12(Test_S601C12, "S601C12", 32);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S601C13_nt  {
  void *s601c13f0;
  void  mf601c13(); // _ZN10S601C13_nt8mf601c13Ev
};
//SIG(-1 S601C13_nt) C1{ m Fp}


void  S601C13_nt ::mf601c13(){}

//skip512 S601C13_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S601C4  : S601C5 {
  unsigned char s601c4f0:1;
  unsigned char s601c4f1:1;
  unsigned char s601c4f2:1;
  unsigned char s601c4f3:1;
  unsigned char s601c4f4:1;
  unsigned char s601c4f5:1;
  unsigned char s601c4f6:1;
  char s601c4f7;
  int s601c4f8[2];
  int s601c4f9[2];
  void *s601c4f10;
  ::S2120C13_nt s601c4f11;
  ::S2120C13_nt s601c4f12;
  ::S2120C13_nt s601c4f13;
  ::S601C12 s601c4f14;
  void *s601c4f15;
  int s601c4f16;
  int s601c4f17;
  ::S601C13_nt s601c4f18[4];
  void *s601c4f19;
  virtual  ~S601C4(); // _ZN6S601C4D1Ev
  virtual void  v20(); // _ZN6S601C43v20Ev
  virtual void  v21(); // _ZN6S601C43v21Ev
  virtual void  v22(); // _ZN6S601C43v22Ev
  virtual void  v23(); // _ZN6S601C43v23Ev
  virtual void  v24(); // _ZN6S601C43v24Ev
  virtual void  v25(); // _ZN6S601C43v25Ev
  virtual void  v26(); // _ZN6S601C43v26Ev
  virtual void  v27(); // _ZN6S601C43v27Ev
  virtual void  v28(); // _ZN6S601C43v28Ev
  virtual void  v29(); // _ZN6S601C43v29Ev
  virtual void  v30(); // _ZN6S601C43v30Ev
  virtual void  v31(); // _ZN6S601C43v31Ev
  virtual void  v32(); // _ZN6S601C43v32Ev
  virtual void  v33(); // _ZN6S601C43v33Ev
  virtual void  v34(); // _ZN6S601C43v34Ev
  S601C4(); // tgen
};
//SIG(-1 S601C4) C1{ BC2{ vd v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 FC3{ m FC4{ m FL[2]}} FC3 Fp Fi FU5{ m FC6{ Fi:4 Fi:4 Fi:4 Fi:2 Fi:1 Fi:17} Fi} Fi:2 Fi:2 Fc:1 Fc:1 FC7{ m Fp Fp} FC8{ Fp Fp}[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc Fi[2] Fi[2] Fp FC3 FC3 FC3 FC9{ m FC3 FC3} Fp Fi Fi FC10{ m Fp}[4] Fp}


 S601C4 ::~S601C4(){ note_dtor("S601C4", this);}
void  S601C4 ::v20(){vfunc_called(this, "_ZN6S601C43v20Ev");}
void  S601C4 ::v21(){vfunc_called(this, "_ZN6S601C43v21Ev");}
void  S601C4 ::v22(){vfunc_called(this, "_ZN6S601C43v22Ev");}
void  S601C4 ::v23(){vfunc_called(this, "_ZN6S601C43v23Ev");}
void  S601C4 ::v24(){vfunc_called(this, "_ZN6S601C43v24Ev");}
void  S601C4 ::v25(){vfunc_called(this, "_ZN6S601C43v25Ev");}
void  S601C4 ::v26(){vfunc_called(this, "_ZN6S601C43v26Ev");}
void  S601C4 ::v27(){vfunc_called(this, "_ZN6S601C43v27Ev");}
void  S601C4 ::v28(){vfunc_called(this, "_ZN6S601C43v28Ev");}
void  S601C4 ::v29(){vfunc_called(this, "_ZN6S601C43v29Ev");}
void  S601C4 ::v30(){vfunc_called(this, "_ZN6S601C43v30Ev");}
void  S601C4 ::v31(){vfunc_called(this, "_ZN6S601C43v31Ev");}
void  S601C4 ::v32(){vfunc_called(this, "_ZN6S601C43v32Ev");}
void  S601C4 ::v33(){vfunc_called(this, "_ZN6S601C43v33Ev");}
void  S601C4 ::v34(){vfunc_called(this, "_ZN6S601C43v34Ev");}
S601C4 ::S601C4(){ note_ctor("S601C4", this);} // tgen

static void Test_S601C4()
{
  extern Class_Descriptor cd_S601C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(36,54)];
    init_test(&cd_S601C4, buf);
    S601C4 *dp, &lv = *(dp=new (buf) S601C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(280,212), "sizeof(S601C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S601C4)");
    check_base_class_offset(lv, (S601C5*), 0, "S601C4");
    set_bf_and_test(lv, s601c4f0, ABISELECT(112,76), 0, 1, 1, "S601C4");
    set_bf_and_test(lv, s601c4f1, ABISELECT(112,76), 1, 1, 1, "S601C4");
    set_bf_and_test(lv, s601c4f2, ABISELECT(112,76), 2, 1, 1, "S601C4");
    set_bf_and_test(lv, s601c4f3, ABISELECT(112,76), 3, 1, 1, "S601C4");
    set_bf_and_test(lv, s601c4f4, ABISELECT(112,76), 4, 1, 1, "S601C4");
    set_bf_and_test(lv, s601c4f5, ABISELECT(112,76), 5, 1, 1, "S601C4");
    set_bf_and_test(lv, s601c4f6, ABISELECT(112,76), 6, 1, 1, "S601C4");
    check_field_offset(lv, s601c4f7, ABISELECT(113,77), "S601C4.s601c4f7");
    check_field_offset(lv, s601c4f8, ABISELECT(116,80), "S601C4.s601c4f8");
    check_field_offset(lv, s601c4f9, ABISELECT(124,88), "S601C4.s601c4f9");
    check_field_offset(lv, s601c4f10, ABISELECT(136,96), "S601C4.s601c4f10");
    check_field_offset(lv, s601c4f11, ABISELECT(144,100), "S601C4.s601c4f11");
    check_field_offset(lv, s601c4f12, ABISELECT(160,116), "S601C4.s601c4f12");
    check_field_offset(lv, s601c4f13, ABISELECT(176,132), "S601C4.s601c4f13");
    check_field_offset(lv, s601c4f14, ABISELECT(192,148), "S601C4.s601c4f14");
    check_field_offset(lv, s601c4f15, ABISELECT(224,180), "S601C4.s601c4f15");
    check_field_offset(lv, s601c4f16, ABISELECT(232,184), "S601C4.s601c4f16");
    check_field_offset(lv, s601c4f17, ABISELECT(236,188), "S601C4.s601c4f17");
    check_field_offset(lv, s601c4f18, ABISELECT(240,192), "S601C4.s601c4f18");
    check_field_offset(lv, s601c4f19, ABISELECT(272,208), "S601C4.s601c4f19");
    test_class_info(&lv, &cd_S601C4);
    dp->~S601C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS601C4(Test_S601C4, "S601C4", ABISELECT(280,212));

#else // __cplusplus

extern void _ZN6S601C4C1Ev();
extern void _ZN6S601C4D1Ev();
Name_Map name_map_S601C4[] = {
  NSPAIR(_ZN6S601C4C1Ev),
  NSPAIR(_ZN6S601C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S601C5;
extern VTBL_ENTRY _ZTI6S601C5[];
extern  VTBL_ENTRY _ZTV6S601C5[];
static Base_Class bases_S601C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S601C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S601C4[];
extern void _ZN6S601C4D1Ev();
extern void _ZN6S601C4D0Ev();
extern void _ZN6S601C52v5Ev();
extern void _ZN6S601C52v6Ev();
extern void _ZN6S601C52v7Ev();
extern void _ZN6S601C52v8Ev();
extern void _ZN6S601C52v9Ev();
extern void _ZN6S601C53v10Ev();
extern void _ZN6S601C53v11Ev();
extern void _ZN6S601C53v12Ev();
extern void _ZN6S601C53v13Ev();
extern void _ZN6S601C53v14Ev();
extern void _ZN6S601C53v15Ev();
extern void _ZN6S601C53v16Ev();
extern void _ZN6S601C53v17Ev();
extern void _ZN6S601C53v18Ev();
extern void _ZN6S601C53v19Ev();
extern void _ZN6S601C43v20Ev();
extern void _ZN6S601C43v21Ev();
extern void _ZN6S601C43v22Ev();
extern void _ZN6S601C43v23Ev();
extern void _ZN6S601C43v24Ev();
extern void _ZN6S601C43v25Ev();
extern void _ZN6S601C43v26Ev();
extern void _ZN6S601C43v27Ev();
extern void _ZN6S601C43v28Ev();
extern void _ZN6S601C43v29Ev();
extern void _ZN6S601C43v30Ev();
extern void _ZN6S601C43v31Ev();
extern void _ZN6S601C43v32Ev();
extern void _ZN6S601C43v33Ev();
extern void _ZN6S601C43v34Ev();
static  VTBL_ENTRY vtc_S601C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S601C4[0]),
  (VTBL_ENTRY)&_ZN6S601C4D1Ev,
  (VTBL_ENTRY)&_ZN6S601C4D0Ev,
  (VTBL_ENTRY)&_ZN6S601C52v5Ev,
  (VTBL_ENTRY)&_ZN6S601C52v6Ev,
  (VTBL_ENTRY)&_ZN6S601C52v7Ev,
  (VTBL_ENTRY)&_ZN6S601C52v8Ev,
  (VTBL_ENTRY)&_ZN6S601C52v9Ev,
  (VTBL_ENTRY)&_ZN6S601C53v10Ev,
  (VTBL_ENTRY)&_ZN6S601C53v11Ev,
  (VTBL_ENTRY)&_ZN6S601C53v12Ev,
  (VTBL_ENTRY)&_ZN6S601C53v13Ev,
  (VTBL_ENTRY)&_ZN6S601C53v14Ev,
  (VTBL_ENTRY)&_ZN6S601C53v15Ev,
  (VTBL_ENTRY)&_ZN6S601C53v16Ev,
  (VTBL_ENTRY)&_ZN6S601C53v17Ev,
  (VTBL_ENTRY)&_ZN6S601C53v18Ev,
  (VTBL_ENTRY)&_ZN6S601C53v19Ev,
  (VTBL_ENTRY)&_ZN6S601C43v20Ev,
  (VTBL_ENTRY)&_ZN6S601C43v21Ev,
  (VTBL_ENTRY)&_ZN6S601C43v22Ev,
  (VTBL_ENTRY)&_ZN6S601C43v23Ev,
  (VTBL_ENTRY)&_ZN6S601C43v24Ev,
  (VTBL_ENTRY)&_ZN6S601C43v25Ev,
  (VTBL_ENTRY)&_ZN6S601C43v26Ev,
  (VTBL_ENTRY)&_ZN6S601C43v27Ev,
  (VTBL_ENTRY)&_ZN6S601C43v28Ev,
  (VTBL_ENTRY)&_ZN6S601C43v29Ev,
  (VTBL_ENTRY)&_ZN6S601C43v30Ev,
  (VTBL_ENTRY)&_ZN6S601C43v31Ev,
  (VTBL_ENTRY)&_ZN6S601C43v32Ev,
  (VTBL_ENTRY)&_ZN6S601C43v33Ev,
  (VTBL_ENTRY)&_ZN6S601C43v34Ev,
};
extern VTBL_ENTRY _ZTI6S601C4[];
extern  VTBL_ENTRY _ZTV6S601C4[];
Class_Descriptor cd_S601C4 = {  "S601C4", // class name
  bases_S601C4, 1,
  &(vtc_S601C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(280,212), // object size
  NSPAIRA(_ZTI6S601C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S601C4),34, //virtual function table var
  2, // 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  S601C15  {
  __tsi64 s601c15f0;
  __tsi64 s601c15f1;
  void  mf601c15(); // _ZN7S601C158mf601c15Ev
};
//SIG(-1 S601C15) C1{ m FL[2]}


void  S601C15 ::mf601c15(){}

static void Test_S601C15()
{
  {
    init_simple_test("S601C15");
    S601C15 lv;
    check2(sizeof(lv), 16, "sizeof(S601C15)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S601C15)");
    check_field_offset(lv, s601c15f0, 0, "S601C15.s601c15f0");
    check_field_offset(lv, s601c15f1, 8, "S601C15.s601c15f1");
  }
}
static Arrange_To_Call_Me vS601C15(Test_S601C15, "S601C15", 16);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S601C14  {
  ::S601C15 s601c14f0;
  void  mf601c14(); // _ZN7S601C148mf601c14Ev
};
//SIG(-1 S601C14) C1{ m FC2{ m FL[2]}}


void  S601C14 ::mf601c14(){}

static void Test_S601C14()
{
  {
    init_simple_test("S601C14");
    S601C14 lv;
    check2(sizeof(lv), 16, "sizeof(S601C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S601C14)");
    check_field_offset(lv, s601c14f0, 0, "S601C14.s601c14f0");
  }
}
static Arrange_To_Call_Me vS601C14(Test_S601C14, "S601C14", 16);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S601C3  : S601C4 {
  ::S601C13_nt s601c3f0;
  ::S601C13_nt s601c3f1;
  ::S601C13_nt s601c3f2;
  ::S601C13_nt s601c3f3;
  ::S2120C13_nt s601c3f4;
  ::S2120C13_nt s601c3f5;
  ::S2120C13_nt s601c3f6;
  ::S2120C13_nt s601c3f7;
  ::S601C14 s601c3f8;
  virtual  ~S601C3(); // _ZN6S601C3D1Ev
  virtual void  v35(); // _ZN6S601C33v35Ev
  virtual void  v36(); // _ZN6S601C33v36Ev
  virtual void  v37(); // _ZN6S601C33v37Ev
  virtual void  v38(); // _ZN6S601C33v38Ev
  virtual void  v39(); // _ZN6S601C33v39Ev
  S601C3(); // tgen
};
//SIG(-1 S601C3) C1{ BC2{ BC3{ vd v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 FC4{ m FC5{ m FL[2]}} FC4 Fp Fi FU6{ m FC7{ Fi:4 Fi:4 Fi:4 Fi:2 Fi:1 Fi:17} Fi} Fi:2 Fi:2 Fc:1 Fc:1 FC8{ m Fp Fp} FC9{ Fp Fp}[2]} vd v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc Fi[2] Fi[2] Fp FC4 FC4 FC4 FC10{ m FC4 FC4} Fp Fi Fi FC11{ m Fp}[4] Fp} vd v1 v2 v3 v4 v5 FC11 FC11 FC11 FC11 FC4 FC4 FC4 FC4 FC12{ m FC13{ m FL FL}}}


 S601C3 ::~S601C3(){ note_dtor("S601C3", this);}
void  S601C3 ::v35(){vfunc_called(this, "_ZN6S601C33v35Ev");}
void  S601C3 ::v36(){vfunc_called(this, "_ZN6S601C33v36Ev");}
void  S601C3 ::v37(){vfunc_called(this, "_ZN6S601C33v37Ev");}
void  S601C3 ::v38(){vfunc_called(this, "_ZN6S601C33v38Ev");}
void  S601C3 ::v39(){vfunc_called(this, "_ZN6S601C33v39Ev");}
S601C3 ::S601C3(){ note_ctor("S601C3", this);} // tgen

static void Test_S601C3()
{
  extern Class_Descriptor cd_S601C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(50,78)];
    init_test(&cd_S601C3, buf);
    S601C3 *dp, &lv = *(dp=new (buf) S601C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(392,308), "sizeof(S601C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S601C3)");
    check_base_class_offset(lv, (S601C5*)(S601C4*), 0, "S601C3");
    check_base_class_offset(lv, (S601C4*), 0, "S601C3");
    check_field_offset(lv, s601c3f0, ABISELECT(280,212), "S601C3.s601c3f0");
    check_field_offset(lv, s601c3f1, ABISELECT(288,216), "S601C3.s601c3f1");
    check_field_offset(lv, s601c3f2, ABISELECT(296,220), "S601C3.s601c3f2");
    check_field_offset(lv, s601c3f3, ABISELECT(304,224), "S601C3.s601c3f3");
    check_field_offset(lv, s601c3f4, ABISELECT(312,228), "S601C3.s601c3f4");
    check_field_offset(lv, s601c3f5, ABISELECT(328,244), "S601C3.s601c3f5");
    check_field_offset(lv, s601c3f6, ABISELECT(344,260), "S601C3.s601c3f6");
    check_field_offset(lv, s601c3f7, ABISELECT(360,276), "S601C3.s601c3f7");
    check_field_offset(lv, s601c3f8, ABISELECT(376,292), "S601C3.s601c3f8");
    test_class_info(&lv, &cd_S601C3);
    dp->~S601C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS601C3(Test_S601C3, "S601C3", ABISELECT(392,308));

#else // __cplusplus

extern void _ZN6S601C3C1Ev();
extern void _ZN6S601C3D1Ev();
Name_Map name_map_S601C3[] = {
  NSPAIR(_ZN6S601C3C1Ev),
  NSPAIR(_ZN6S601C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S601C5;
extern VTBL_ENTRY _ZTI6S601C5[];
extern  VTBL_ENTRY _ZTV6S601C5[];
extern Class_Descriptor cd_S601C4;
extern VTBL_ENTRY _ZTI6S601C4[];
extern  VTBL_ENTRY _ZTV6S601C4[];
static Base_Class bases_S601C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S601C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S601C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S601C3[];
extern void _ZN6S601C3D1Ev();
extern void _ZN6S601C3D0Ev();
extern void _ZN6S601C52v5Ev();
extern void _ZN6S601C52v6Ev();
extern void _ZN6S601C52v7Ev();
extern void _ZN6S601C52v8Ev();
extern void _ZN6S601C52v9Ev();
extern void _ZN6S601C53v10Ev();
extern void _ZN6S601C53v11Ev();
extern void _ZN6S601C53v12Ev();
extern void _ZN6S601C53v13Ev();
extern void _ZN6S601C53v14Ev();
extern void _ZN6S601C53v15Ev();
extern void _ZN6S601C53v16Ev();
extern void _ZN6S601C53v17Ev();
extern void _ZN6S601C53v18Ev();
extern void _ZN6S601C53v19Ev();
extern void _ZN6S601C43v20Ev();
extern void _ZN6S601C43v21Ev();
extern void _ZN6S601C43v22Ev();
extern void _ZN6S601C43v23Ev();
extern void _ZN6S601C43v24Ev();
extern void _ZN6S601C43v25Ev();
extern void _ZN6S601C43v26Ev();
extern void _ZN6S601C43v27Ev();
extern void _ZN6S601C43v28Ev();
extern void _ZN6S601C43v29Ev();
extern void _ZN6S601C43v30Ev();
extern void _ZN6S601C43v31Ev();
extern void _ZN6S601C43v32Ev();
extern void _ZN6S601C43v33Ev();
extern void _ZN6S601C43v34Ev();
extern void _ZN6S601C33v35Ev();
extern void _ZN6S601C33v36Ev();
extern void _ZN6S601C33v37Ev();
extern void _ZN6S601C33v38Ev();
extern void _ZN6S601C33v39Ev();
static  VTBL_ENTRY vtc_S601C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S601C3[0]),
  (VTBL_ENTRY)&_ZN6S601C3D1Ev,
  (VTBL_ENTRY)&_ZN6S601C3D0Ev,
  (VTBL_ENTRY)&_ZN6S601C52v5Ev,
  (VTBL_ENTRY)&_ZN6S601C52v6Ev,
  (VTBL_ENTRY)&_ZN6S601C52v7Ev,
  (VTBL_ENTRY)&_ZN6S601C52v8Ev,
  (VTBL_ENTRY)&_ZN6S601C52v9Ev,
  (VTBL_ENTRY)&_ZN6S601C53v10Ev,
  (VTBL_ENTRY)&_ZN6S601C53v11Ev,
  (VTBL_ENTRY)&_ZN6S601C53v12Ev,
  (VTBL_ENTRY)&_ZN6S601C53v13Ev,
  (VTBL_ENTRY)&_ZN6S601C53v14Ev,
  (VTBL_ENTRY)&_ZN6S601C53v15Ev,
  (VTBL_ENTRY)&_ZN6S601C53v16Ev,
  (VTBL_ENTRY)&_ZN6S601C53v17Ev,
  (VTBL_ENTRY)&_ZN6S601C53v18Ev,
  (VTBL_ENTRY)&_ZN6S601C53v19Ev,
  (VTBL_ENTRY)&_ZN6S601C43v20Ev,
  (VTBL_ENTRY)&_ZN6S601C43v21Ev,
  (VTBL_ENTRY)&_ZN6S601C43v22Ev,
  (VTBL_ENTRY)&_ZN6S601C43v23Ev,
  (VTBL_ENTRY)&_ZN6S601C43v24Ev,
  (VTBL_ENTRY)&_ZN6S601C43v25Ev,
  (VTBL_ENTRY)&_ZN6S601C43v26Ev,
  (VTBL_ENTRY)&_ZN6S601C43v27Ev,
  (VTBL_ENTRY)&_ZN6S601C43v28Ev,
  (VTBL_ENTRY)&_ZN6S601C43v29Ev,
  (VTBL_ENTRY)&_ZN6S601C43v30Ev,
  (VTBL_ENTRY)&_ZN6S601C43v31Ev,
  (VTBL_ENTRY)&_ZN6S601C43v32Ev,
  (VTBL_ENTRY)&_ZN6S601C43v33Ev,
  (VTBL_ENTRY)&_ZN6S601C43v34Ev,
  (VTBL_ENTRY)&_ZN6S601C33v35Ev,
  (VTBL_ENTRY)&_ZN6S601C33v36Ev,
  (VTBL_ENTRY)&_ZN6S601C33v37Ev,
  (VTBL_ENTRY)&_ZN6S601C33v38Ev,
  (VTBL_ENTRY)&_ZN6S601C33v39Ev,
};
extern VTBL_ENTRY _ZTI6S601C3[];
extern  VTBL_ENTRY _ZTV6S601C3[];
Class_Descriptor cd_S601C3 = {  "S601C3", // class name
  bases_S601C3, 2,
  &(vtc_S601C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(392,308), // object size
  NSPAIRA(_ZTI6S601C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S601C3),39, //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  S601C2  : S601C3 {
  virtual  ~S601C2(); // _ZN6S601C2D1Ev
  virtual void  v40(); // _ZN6S601C23v40Ev
  virtual void  v41(); // _ZN6S601C23v41Ev
  virtual void  v42(); // _ZN6S601C23v42Ev
  virtual void  v43(); // _ZN6S601C23v43Ev
  S601C2(); // tgen
};
//SIG(-1 S601C2) C1{ BC2{ BC3{ BC4{ vd v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 FC5{ m FC6{ m FL[2]}} FC5 Fp Fi FU7{ m FC8{ Fi:4 Fi:4 Fi:4 Fi:2 Fi:1 Fi:17} Fi} Fi:2 Fi:2 Fc:1 Fc:1 FC9{ m Fp Fp} FC10{ Fp Fp}[2]} vd v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc Fi[2] Fi[2] Fp FC5 FC5 FC5 FC11{ m FC5 FC5} Fp Fi Fi FC12{ m Fp}[4] Fp} vd v35 v36 v37 v38 v39 FC12 FC12 FC12 FC12 FC5 FC5 FC5 FC5 FC13{ m FC14{ m FL FL}}} vd v1 v2 v3 v4}


 S601C2 ::~S601C2(){ note_dtor("S601C2", this);}
void  S601C2 ::v40(){vfunc_called(this, "_ZN6S601C23v40Ev");}
void  S601C2 ::v41(){vfunc_called(this, "_ZN6S601C23v41Ev");}
void  S601C2 ::v42(){vfunc_called(this, "_ZN6S601C23v42Ev");}
void  S601C2 ::v43(){vfunc_called(this, "_ZN6S601C23v43Ev");}
S601C2 ::S601C2(){ note_ctor("S601C2", this);} // tgen

static void Test_S601C2()
{
  extern Class_Descriptor cd_S601C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(50,78)];
    init_test(&cd_S601C2, buf);
    S601C2 *dp, &lv = *(dp=new (buf) S601C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(392,308), "sizeof(S601C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S601C2)");
    check_base_class_offset(lv, (S601C5*)(S601C4*)(S601C3*), 0, "S601C2");
    check_base_class_offset(lv, (S601C4*)(S601C3*), 0, "S601C2");
    check_base_class_offset(lv, (S601C3*), 0, "S601C2");
    test_class_info(&lv, &cd_S601C2);
    dp->~S601C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS601C2(Test_S601C2, "S601C2", ABISELECT(392,308));

#else // __cplusplus

extern void _ZN6S601C2C1Ev();
extern void _ZN6S601C2D1Ev();
Name_Map name_map_S601C2[] = {
  NSPAIR(_ZN6S601C2C1Ev),
  NSPAIR(_ZN6S601C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S601C5;
extern VTBL_ENTRY _ZTI6S601C5[];
extern  VTBL_ENTRY _ZTV6S601C5[];
extern Class_Descriptor cd_S601C4;
extern VTBL_ENTRY _ZTI6S601C4[];
extern  VTBL_ENTRY _ZTV6S601C4[];
extern Class_Descriptor cd_S601C3;
extern VTBL_ENTRY _ZTI6S601C3[];
extern  VTBL_ENTRY _ZTV6S601C3[];
static Base_Class bases_S601C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S601C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S601C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S601C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S601C2[];
extern void _ZN6S601C2D1Ev();
extern void _ZN6S601C2D0Ev();
extern void _ZN6S601C52v5Ev();
extern void _ZN6S601C52v6Ev();
extern void _ZN6S601C52v7Ev();
extern void _ZN6S601C52v8Ev();
extern void _ZN6S601C52v9Ev();
extern void _ZN6S601C53v10Ev();
extern void _ZN6S601C53v11Ev();
extern void _ZN6S601C53v12Ev();
extern void _ZN6S601C53v13Ev();
extern void _ZN6S601C53v14Ev();
extern void _ZN6S601C53v15Ev();
extern void _ZN6S601C53v16Ev();
extern void _ZN6S601C53v17Ev();
extern void _ZN6S601C53v18Ev();
extern void _ZN6S601C53v19Ev();
extern void _ZN6S601C43v20Ev();
extern void _ZN6S601C43v21Ev();
extern void _ZN6S601C43v22Ev();
extern void _ZN6S601C43v23Ev();
extern void _ZN6S601C43v24Ev();
extern void _ZN6S601C43v25Ev();
extern void _ZN6S601C43v26Ev();
extern void _ZN6S601C43v27Ev();
extern void _ZN6S601C43v28Ev();
extern void _ZN6S601C43v29Ev();
extern void _ZN6S601C43v30Ev();
extern void _ZN6S601C43v31Ev();
extern void _ZN6S601C43v32Ev();
extern void _ZN6S601C43v33Ev();
extern void _ZN6S601C43v34Ev();
extern void _ZN6S601C33v35Ev();
extern void _ZN6S601C33v36Ev();
extern void _ZN6S601C33v37Ev();
extern void _ZN6S601C33v38Ev();
extern void _ZN6S601C33v39Ev();
extern void _ZN6S601C23v40Ev();
extern void _ZN6S601C23v41Ev();
extern void _ZN6S601C23v42Ev();
extern void _ZN6S601C23v43Ev();
static  VTBL_ENTRY vtc_S601C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S601C2[0]),
  (VTBL_ENTRY)&_ZN6S601C2D1Ev,
  (VTBL_ENTRY)&_ZN6S601C2D0Ev,
  (VTBL_ENTRY)&_ZN6S601C52v5Ev,
  (VTBL_ENTRY)&_ZN6S601C52v6Ev,
  (VTBL_ENTRY)&_ZN6S601C52v7Ev,
  (VTBL_ENTRY)&_ZN6S601C52v8Ev,
  (VTBL_ENTRY)&_ZN6S601C52v9Ev,
  (VTBL_ENTRY)&_ZN6S601C53v10Ev,
  (VTBL_ENTRY)&_ZN6S601C53v11Ev,
  (VTBL_ENTRY)&_ZN6S601C53v12Ev,
  (VTBL_ENTRY)&_ZN6S601C53v13Ev,
  (VTBL_ENTRY)&_ZN6S601C53v14Ev,
  (VTBL_ENTRY)&_ZN6S601C53v15Ev,
  (VTBL_ENTRY)&_ZN6S601C53v16Ev,
  (VTBL_ENTRY)&_ZN6S601C53v17Ev,
  (VTBL_ENTRY)&_ZN6S601C53v18Ev,
  (VTBL_ENTRY)&_ZN6S601C53v19Ev,
  (VTBL_ENTRY)&_ZN6S601C43v20Ev,
  (VTBL_ENTRY)&_ZN6S601C43v21Ev,
  (VTBL_ENTRY)&_ZN6S601C43v22Ev,
  (VTBL_ENTRY)&_ZN6S601C43v23Ev,
  (VTBL_ENTRY)&_ZN6S601C43v24Ev,
  (VTBL_ENTRY)&_ZN6S601C43v25Ev,
  (VTBL_ENTRY)&_ZN6S601C43v26Ev,
  (VTBL_ENTRY)&_ZN6S601C43v27Ev,
  (VTBL_ENTRY)&_ZN6S601C43v28Ev,
  (VTBL_ENTRY)&_ZN6S601C43v29Ev,
  (VTBL_ENTRY)&_ZN6S601C43v30Ev,
  (VTBL_ENTRY)&_ZN6S601C43v31Ev,
  (VTBL_ENTRY)&_ZN6S601C43v32Ev,
  (VTBL_ENTRY)&_ZN6S601C43v33Ev,
  (VTBL_ENTRY)&_ZN6S601C43v34Ev,
  (VTBL_ENTRY)&_ZN6S601C33v35Ev,
  (VTBL_ENTRY)&_ZN6S601C33v36Ev,
  (VTBL_ENTRY)&_ZN6S601C33v37Ev,
  (VTBL_ENTRY)&_ZN6S601C33v38Ev,
  (VTBL_ENTRY)&_ZN6S601C33v39Ev,
  (VTBL_ENTRY)&_ZN6S601C23v40Ev,
  (VTBL_ENTRY)&_ZN6S601C23v41Ev,
  (VTBL_ENTRY)&_ZN6S601C23v42Ev,
  (VTBL_ENTRY)&_ZN6S601C23v43Ev,
};
extern VTBL_ENTRY _ZTI6S601C2[];
extern  VTBL_ENTRY _ZTV6S601C2[];
Class_Descriptor cd_S601C2 = {  "S601C2", // class name
  bases_S601C2, 3,
  &(vtc_S601C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(392,308), // object size
  NSPAIRA(_ZTI6S601C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S601C2),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S601C20  {
  void *s601c20f0;
  void *s601c20f1;
  void *s601c20f2;
  void *s601c20f3;
  void  mf601c20(); // _ZN7S601C208mf601c20Ev
};
//SIG(-1 S601C20) C1{ m Fp[4]}


void  S601C20 ::mf601c20(){}

static void Test_S601C20()
{
  {
    init_simple_test("S601C20");
    S601C20 lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S601C20)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S601C20)");
    check_field_offset(lv, s601c20f0, 0, "S601C20.s601c20f0");
    check_field_offset(lv, s601c20f1, ABISELECT(8,4), "S601C20.s601c20f1");
    check_field_offset(lv, s601c20f2, ABISELECT(16,8), "S601C20.s601c20f2");
    check_field_offset(lv, s601c20f3, ABISELECT(24,12), "S601C20.s601c20f3");
  }
}
static Arrange_To_Call_Me vS601C20(Test_S601C20, "S601C20", ABISELECT(32,16));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S601C19  {
  ::S601C20 s601c19f0;
  virtual  ~S601C19(); // _ZN7S601C19D1Ev
  virtual void  v50(); // _ZN7S601C193v50Ev
  virtual void  v51(); // _ZN7S601C193v51Ev
  virtual void  v52(); // _ZN7S601C193v52Ev
  virtual void  v53(); // _ZN7S601C193v53Ev
  virtual void  v54(); // _ZN7S601C193v54Ev
  virtual void  v55(); // _ZN7S601C193v55Ev
  S601C19(); // tgen
};
//SIG(-1 S601C19) C1{ vd v1 v2 v3 v4 v5 v6 FC2{ m Fp[4]}}


 S601C19 ::~S601C19(){ note_dtor("S601C19", this);}
void  S601C19 ::v50(){vfunc_called(this, "_ZN7S601C193v50Ev");}
void  S601C19 ::v51(){vfunc_called(this, "_ZN7S601C193v51Ev");}
void  S601C19 ::v52(){vfunc_called(this, "_ZN7S601C193v52Ev");}
void  S601C19 ::v53(){vfunc_called(this, "_ZN7S601C193v53Ev");}
void  S601C19 ::v54(){vfunc_called(this, "_ZN7S601C193v54Ev");}
void  S601C19 ::v55(){vfunc_called(this, "_ZN7S601C193v55Ev");}
S601C19 ::S601C19(){ note_ctor("S601C19", this);} // tgen

static void Test_S601C19()
{
  extern Class_Descriptor cd_S601C19;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S601C19, buf);
    S601C19 *dp, &lv = *(dp=new (buf) S601C19());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S601C19)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S601C19)");
    check_field_offset(lv, s601c19f0, ABISELECT(8,4), "S601C19.s601c19f0");
    test_class_info(&lv, &cd_S601C19);
    dp->~S601C19();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS601C19(Test_S601C19, "S601C19", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S601C19C1Ev();
extern void _ZN7S601C19D1Ev();
Name_Map name_map_S601C19[] = {
  NSPAIR(_ZN7S601C19C1Ev),
  NSPAIR(_ZN7S601C19D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S601C19[];
extern void _ZN7S601C19D1Ev();
extern void _ZN7S601C19D0Ev();
extern void _ZN7S601C193v50Ev();
extern void _ZN7S601C193v51Ev();
extern void _ZN7S601C193v52Ev();
extern void _ZN7S601C193v53Ev();
extern void _ZN7S601C193v54Ev();
extern void _ZN7S601C193v55Ev();
static  VTBL_ENTRY vtc_S601C19[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S601C19[0]),
  (VTBL_ENTRY)&_ZN7S601C19D1Ev,
  (VTBL_ENTRY)&_ZN7S601C19D0Ev,
  (VTBL_ENTRY)&_ZN7S601C193v50Ev,
  (VTBL_ENTRY)&_ZN7S601C193v51Ev,
  (VTBL_ENTRY)&_ZN7S601C193v52Ev,
  (VTBL_ENTRY)&_ZN7S601C193v53Ev,
  (VTBL_ENTRY)&_ZN7S601C193v54Ev,
  (VTBL_ENTRY)&_ZN7S601C193v55Ev,
};
extern VTBL_ENTRY _ZTI7S601C19[];
extern  VTBL_ENTRY _ZTV7S601C19[];
Class_Descriptor cd_S601C19 = {  "S601C19", // class name
  0,0,//no base classes
  &(vtc_S601C19[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S601C19),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S601C19),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

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



//skip512 S601C21_nt

#else // __cplusplus

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

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

#ifdef __cplusplus

struct  S601C23  {
  void *s601c23f0;
  int s601c23f1;
  void *s601c23f2;
  int s601c23f3;
  int s601c23f4;
  void  mf601c23(); // _ZN7S601C238mf601c23Ev
};
//SIG(-1 S601C23) C1{ m Fp Fi Fp Fi[2]}


void  S601C23 ::mf601c23(){}

static void Test_S601C23()
{
  {
    init_simple_test("S601C23");
    S601C23 lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S601C23)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S601C23)");
    check_field_offset(lv, s601c23f0, 0, "S601C23.s601c23f0");
    check_field_offset(lv, s601c23f1, ABISELECT(8,4), "S601C23.s601c23f1");
    check_field_offset(lv, s601c23f2, ABISELECT(16,8), "S601C23.s601c23f2");
    check_field_offset(lv, s601c23f3, ABISELECT(24,12), "S601C23.s601c23f3");
    check_field_offset(lv, s601c23f4, ABISELECT(28,16), "S601C23.s601c23f4");
  }
}
static Arrange_To_Call_Me vS601C23(Test_S601C23, "S601C23", ABISELECT(32,20));

#else // __cplusplus

Class_Descriptor cd_S601C23 = {  "S601C23", // class name
  0,0,//no base classes
  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  S601C22  : S601C23 {
  ::S2120C18_nt s601c22f0;
};
//SIG(-1 S601C22) C1{ BC2{ m Fp Fi Fp Fi[2]} FC3{ m FC4{ m FC5{ m FL[2]}} FC4 FC4 FC4}}



static void Test_S601C22()
{
  extern Class_Descriptor cd_S601C22;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,22)];
    init_test(&cd_S601C22, buf);
    S601C22 &lv = *(new (buf) S601C22());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,84), "sizeof(S601C22)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S601C22)");
    check_base_class_offset(lv, (S601C23*), 0, "S601C22");
    check_field_offset(lv, s601c22f0, ABISELECT(32,20), "S601C22.s601c22f0");
    test_class_info(&lv, &cd_S601C22);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS601C22(Test_S601C22, "S601C22", ABISELECT(96,84));

#else // __cplusplus

extern Class_Descriptor cd_S601C23;
static Base_Class bases_S601C22[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S601C23,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S601C22 = {  "S601C22", // class name
  bases_S601C22, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(96,84), // 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  S601C25_nt  {
  ::S2120C14_nt s601c25f0;
  void  mf601c25(); // _ZN10S601C25_nt8mf601c25Ev
};
//SIG(-1 S601C25_nt) C1{ m FC2{ m FL[2]}}


void  S601C25_nt ::mf601c25(){}

//skip512 S601C25_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S601C27  : S601C23 {
  ::S601C25_nt s601c27f0;
};
//SIG(-1 S601C27) C1{ BC2{ m Fp Fi Fp Fi[2]} FC3{ m FC4{ m FL[2]}}}



static void Test_S601C27()
{
  extern Class_Descriptor cd_S601C27;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,10)];
    init_test(&cd_S601C27, buf);
    S601C27 &lv = *(new (buf) S601C27());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,36), "sizeof(S601C27)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S601C27)");
    check_base_class_offset(lv, (S601C23*), 0, "S601C27");
    check_field_offset(lv, s601c27f0, ABISELECT(32,20), "S601C27.s601c27f0");
    test_class_info(&lv, &cd_S601C27);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS601C27(Test_S601C27, "S601C27", ABISELECT(48,36));

#else // __cplusplus

extern Class_Descriptor cd_S601C23;
static Base_Class bases_S601C27[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S601C23,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S601C27 = {  "S601C27", // class name
  bases_S601C27, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(48,36), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S601C30_nt  {
  __tsi64 s601c30f0;
  void  mf601c30(); // _ZN10S601C30_nt8mf601c30Ev
};
//SIG(-1 S601C30_nt) C1{ m FL}


void  S601C30_nt ::mf601c30(){}

//skip512 S601C30_nt

#else // __cplusplus

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

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

#ifdef __cplusplus

struct  S601C29_nt  {
  ::S601C30_nt s601c29f0;
  void  mf601c29(); // _ZN10S601C29_nt8mf601c29Ev
};
//SIG(-1 S601C29_nt) C1{ m FC2{ m FL}}


void  S601C29_nt ::mf601c29(){}

//skip512 S601C29_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S601C28  : S601C23 {
  ::S601C29_nt s601c28f0;
};
//SIG(-1 S601C28) C1{ BC2{ m Fp Fi Fp Fi[2]} FC3{ m FC4{ m FL}}}



static void Test_S601C28()
{
  extern Class_Descriptor cd_S601C28;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S601C28, buf);
    S601C28 &lv = *(new (buf) S601C28());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S601C28)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S601C28)");
    check_base_class_offset(lv, (S601C23*), 0, "S601C28");
    check_field_offset(lv, s601c28f0, ABISELECT(32,20), "S601C28.s601c28f0");
    test_class_info(&lv, &cd_S601C28);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS601C28(Test_S601C28, "S601C28", ABISELECT(40,28));

#else // __cplusplus

extern Class_Descriptor cd_S601C23;
static Base_Class bases_S601C28[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S601C23,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S601C28 = {  "S601C28", // class name
  bases_S601C28, 1,
  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  S601C31  : S601C23 {
  int s601c31f0;
};
//SIG(-1 S601C31) C1{ BC2{ m Fp Fi Fp Fi[2]} Fi}



static void Test_S601C31()
{
  extern Class_Descriptor cd_S601C31;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,7)];
    init_test(&cd_S601C31, buf);
    S601C31 &lv = *(new (buf) S601C31());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S601C31)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S601C31)");
    check_base_class_offset(lv, (S601C23*), 0, "S601C31");
    check_field_offset(lv, s601c31f0, ABISELECT(32,20), "S601C31.s601c31f0");
    test_class_info(&lv, &cd_S601C31);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS601C31(Test_S601C31, "S601C31", ABISELECT(40,24));

#else // __cplusplus

extern Class_Descriptor cd_S601C23;
static Base_Class bases_S601C31[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S601C23,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S601C31 = {  "S601C31", // class name
  bases_S601C31, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(40,24), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S601C18  : S601C19 , S601C21_nt {
  ::S601C22 s601c18f0;
  ::S601C27 s601c18f1;
  ::S601C28 s601c18f2;
  ::S601C31 s601c18f3;
  virtual void  v44(); // _ZN7S601C183v44Ev
  virtual void  v45(); // _ZN7S601C183v45Ev
  virtual void  v46(); // _ZN7S601C183v46Ev
  virtual void  v47(); // _ZN7S601C183v47Ev
  virtual void  v48(); // _ZN7S601C183v48Ev
  virtual void  v49(); // _ZN7S601C183v49Ev
  ~S601C18(); // tgen
  S601C18(); // tgen
};
//SIG(-1 S601C18) C1{ BC2{ vd v7 v8 v9 v10 v11 v12 FC3{ m Fp[4]}} BC4{} v1 v2 v3 v4 v5 v6 FC5{ BC6{ m Fp Fi Fp Fi[2]} FC7{ m FC8{ m FC9{ m FL[2]}} FC8 FC8 FC8}} FC10{ BC6 FC11{ m FC9}} FC12{ BC6 FC13{ m FC14{ m FL}}} FC15{ BC6 Fi}}


void  S601C18 ::v44(){vfunc_called(this, "_ZN7S601C183v44Ev");}
void  S601C18 ::v45(){vfunc_called(this, "_ZN7S601C183v45Ev");}
void  S601C18 ::v46(){vfunc_called(this, "_ZN7S601C183v46Ev");}
void  S601C18 ::v47(){vfunc_called(this, "_ZN7S601C183v47Ev");}
void  S601C18 ::v48(){vfunc_called(this, "_ZN7S601C183v48Ev");}
void  S601C18 ::v49(){vfunc_called(this, "_ZN7S601C183v49Ev");}
S601C18 ::~S601C18(){ note_dtor("S601C18", this);} // tgen
S601C18 ::S601C18(){ note_ctor("S601C18", this);} // tgen

static void Test_S601C18()
{
  extern Class_Descriptor cd_S601C18;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(34,49)];
    init_test(&cd_S601C18, buf);
    S601C18 *dp, &lv = *(dp=new (buf) S601C18());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(264,192), "sizeof(S601C18)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S601C18)");
    check_base_class_offset(lv, (S601C19*), 0, "S601C18");
    check_base_class_offset(lv, (S601C21_nt*), 0, "S601C18");
    check_field_offset(lv, s601c18f0, ABISELECT(40,20), "S601C18.s601c18f0");
    check_field_offset(lv, s601c18f1, ABISELECT(136,104), "S601C18.s601c18f1");
    check_field_offset(lv, s601c18f2, ABISELECT(184,140), "S601C18.s601c18f2");
    check_field_offset(lv, s601c18f3, ABISELECT(224,168), "S601C18.s601c18f3");
    test_class_info(&lv, &cd_S601C18);
    dp->~S601C18();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS601C18(Test_S601C18, "S601C18", ABISELECT(264,192));

#else // __cplusplus

extern void _ZN7S601C18C1Ev();
extern void _ZN7S601C18D1Ev();
Name_Map name_map_S601C18[] = {
  NSPAIR(_ZN7S601C18C1Ev),
  NSPAIR(_ZN7S601C18D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S601C19;
extern VTBL_ENTRY _ZTI7S601C19[];
extern  VTBL_ENTRY _ZTV7S601C19[];
extern Class_Descriptor cd_S601C21_nt;
extern VTBL_ENTRY _ZTI10S601C21_nt[];
static Base_Class bases_S601C18[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S601C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S601C21_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S601C18[];
extern void _ZN7S601C18D1Ev();
extern void _ZN7S601C18D0Ev();
extern void _ZN7S601C193v50Ev();
extern void _ZN7S601C193v51Ev();
extern void _ZN7S601C193v52Ev();
extern void _ZN7S601C193v53Ev();
extern void _ZN7S601C193v54Ev();
extern void _ZN7S601C193v55Ev();
extern void _ZN7S601C183v44Ev();
extern void _ZN7S601C183v45Ev();
extern void _ZN7S601C183v46Ev();
extern void _ZN7S601C183v47Ev();
extern void _ZN7S601C183v48Ev();
extern void _ZN7S601C183v49Ev();
static  VTBL_ENTRY vtc_S601C18[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S601C18[0]),
  (VTBL_ENTRY)&_ZN7S601C18D1Ev,
  (VTBL_ENTRY)&_ZN7S601C18D0Ev,
  (VTBL_ENTRY)&_ZN7S601C193v50Ev,
  (VTBL_ENTRY)&_ZN7S601C193v51Ev,
  (VTBL_ENTRY)&_ZN7S601C193v52Ev,
  (VTBL_ENTRY)&_ZN7S601C193v53Ev,
  (VTBL_ENTRY)&_ZN7S601C193v54Ev,
  (VTBL_ENTRY)&_ZN7S601C193v55Ev,
  (VTBL_ENTRY)&_ZN7S601C183v44Ev,
  (VTBL_ENTRY)&_ZN7S601C183v45Ev,
  (VTBL_ENTRY)&_ZN7S601C183v46Ev,
  (VTBL_ENTRY)&_ZN7S601C183v47Ev,
  (VTBL_ENTRY)&_ZN7S601C183v48Ev,
  (VTBL_ENTRY)&_ZN7S601C183v49Ev,
};
extern VTBL_ENTRY _ZTI7S601C18[];
extern  VTBL_ENTRY _ZTV7S601C18[];
Class_Descriptor cd_S601C18 = {  "S601C18", // class name
  bases_S601C18, 2,
  &(vtc_S601C18[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(264,192), // object size
  NSPAIRA(_ZTI7S601C18),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S601C18),16, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S601C34_nt  {
  virtual  ~S601C34_nt(); // _ZN10S601C34_ntD1Ev
  virtual void  v56(); // _ZN10S601C34_nt3v56Ev
  S601C34_nt(); // tgen
};
//SIG(-1 S601C34_nt) C1{ vd v1}


 S601C34_nt ::~S601C34_nt(){ note_dtor("S601C34_nt", this);}
void  S601C34_nt ::v56(){vfunc_called(this, "_ZN10S601C34_nt3v56Ev");}
S601C34_nt ::S601C34_nt(){ note_ctor("S601C34_nt", this);} // tgen

//skip512 S601C34_nt

#else // __cplusplus

extern void _ZN10S601C34_ntC1Ev();
extern void _ZN10S601C34_ntD1Ev();
Name_Map name_map_S601C34_nt[] = {
  NSPAIR(_ZN10S601C34_ntC1Ev),
  NSPAIR(_ZN10S601C34_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S601C34_nt[];
extern void _ZN10S601C34_ntD1Ev();
extern void _ZN10S601C34_ntD0Ev();
extern void _ZN10S601C34_nt3v56Ev();
static  VTBL_ENTRY vtc_S601C34_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S601C34_nt[0]),
  (VTBL_ENTRY)&_ZN10S601C34_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S601C34_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S601C34_nt3v56Ev,
};
extern VTBL_ENTRY _ZTI10S601C34_nt[];
VTBL_ENTRY *P__ZTI10S601C34_nt = _ZTI10S601C34_nt; 
extern  VTBL_ENTRY _ZTV10S601C34_nt[];
Class_Descriptor cd_S601C34_nt = {  "S601C34_nt", // class name
  0,0,//no base classes
  &(vtc_S601C34_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S601C34_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S601C34_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  S601C36  {
  void *s601c36f0;
  int s601c36f1;
  int s601c36f2;
  ::S3352C21_nt s601c36f3;
  void  mf601c36(); // _ZN7S601C368mf601c36Ev
};
//SIG(-1 S601C36) C1{ m Fp Fi[2] FC2{ m}}


void  S601C36 ::mf601c36(){}

static void Test_S601C36()
{
  {
    init_simple_test("S601C36");
    S601C36 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S601C36)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S601C36)");
    check_field_offset(lv, s601c36f0, 0, "S601C36.s601c36f0");
    check_field_offset(lv, s601c36f1, ABISELECT(8,4), "S601C36.s601c36f1");
    check_field_offset(lv, s601c36f2, ABISELECT(12,8), "S601C36.s601c36f2");
    check_field_offset(lv, s601c36f3, ABISELECT(16,12), "S601C36.s601c36f3");
  }
}
static Arrange_To_Call_Me vS601C36(Test_S601C36, "S601C36", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S601C35  {
  ::S601C36 s601c35f0;
  void  mf601c35(); // _ZN7S601C358mf601c35Ev
};
//SIG(-1 S601C35) C1{ m FC2{ m Fp Fi[2] FC3{ m}}}


void  S601C35 ::mf601c35(){}

static void Test_S601C35()
{
  {
    init_simple_test("S601C35");
    S601C35 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S601C35)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S601C35)");
    check_field_offset(lv, s601c35f0, 0, "S601C35.s601c35f0");
  }
}
static Arrange_To_Call_Me vS601C35(Test_S601C35, "S601C35", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S601C33  : S601C34_nt {
  void *s601c33f0;
  void *s601c33f1;
  ::S601C35 s601c33f2;
  ::S601C10 s601c33f3;
  virtual  ~S601C33(); // _ZN7S601C33D1Ev
  virtual void  v57(); // _ZN7S601C333v57Ev
  S601C33(); // tgen
};
//SIG(-1 S601C33) C1{ BC2{ vd v2} vd v1 Fp[2] FC3{ m FC4{ m Fp Fi[2] FC5{ m}}} FC6{ m Fp[2]}}


 S601C33 ::~S601C33(){ note_dtor("S601C33", this);}
void  S601C33 ::v57(){vfunc_called(this, "_ZN7S601C333v57Ev");}
S601C33 ::S601C33(){ note_ctor("S601C33", this);} // tgen

static void Test_S601C33()
{
  extern Class_Descriptor cd_S601C33;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,10)];
    init_test(&cd_S601C33, buf);
    S601C33 *dp, &lv = *(dp=new (buf) S601C33());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,36), "sizeof(S601C33)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S601C33)");
    check_base_class_offset(lv, (S601C34_nt*), 0, "S601C33");
    check_field_offset(lv, s601c33f0, ABISELECT(8,4), "S601C33.s601c33f0");
    check_field_offset(lv, s601c33f1, ABISELECT(16,8), "S601C33.s601c33f1");
    check_field_offset(lv, s601c33f2, ABISELECT(24,12), "S601C33.s601c33f2");
    check_field_offset(lv, s601c33f3, ABISELECT(48,28), "S601C33.s601c33f3");
    test_class_info(&lv, &cd_S601C33);
    dp->~S601C33();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS601C33(Test_S601C33, "S601C33", ABISELECT(64,36));

#else // __cplusplus

extern void _ZN7S601C33C1Ev();
extern void _ZN7S601C33D1Ev();
Name_Map name_map_S601C33[] = {
  NSPAIR(_ZN7S601C33C1Ev),
  NSPAIR(_ZN7S601C33D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S601C34_nt;
extern VTBL_ENTRY _ZTI10S601C34_nt[];
extern  VTBL_ENTRY _ZTV10S601C34_nt[];
static Base_Class bases_S601C33[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S601C34_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S601C33[];
extern void _ZN7S601C33D1Ev();
extern void _ZN7S601C33D0Ev();
extern void _ZN10S601C34_nt3v56Ev();
extern void _ZN7S601C333v57Ev();
static  VTBL_ENTRY vtc_S601C33[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S601C33[0]),
  (VTBL_ENTRY)&_ZN7S601C33D1Ev,
  (VTBL_ENTRY)&_ZN7S601C33D0Ev,
  (VTBL_ENTRY)&_ZN10S601C34_nt3v56Ev,
  (VTBL_ENTRY)&_ZN7S601C333v57Ev,
};
extern VTBL_ENTRY _ZTI7S601C33[];
extern  VTBL_ENTRY _ZTV7S601C33[];
Class_Descriptor cd_S601C33 = {  "S601C33", // class name
  bases_S601C33, 1,
  &(vtc_S601C33[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,36), // object size
  NSPAIRA(_ZTI7S601C33),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S601C33),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  S601C40  {
  short s601c40f0;
  short s601c40f1;
  char s601c40f2;
  char s601c40f3;
  short s601c40f4;
};
//SIG(1 S601C40) C1{ Fs[2] Fc[2] Fs}



static void Test_S601C40()
{
  {
    init_simple_test("S601C40");
    S601C40 lv;
    check2(sizeof(lv), 8, "sizeof(S601C40)");
    check2(__alignof__(lv), 2, "__alignof__(S601C40)");
    check_field_offset(lv, s601c40f0, 0, "S601C40.s601c40f0");
    check_field_offset(lv, s601c40f1, 2, "S601C40.s601c40f1");
    check_field_offset(lv, s601c40f2, 4, "S601C40.s601c40f2");
    check_field_offset(lv, s601c40f3, 5, "S601C40.s601c40f3");
    check_field_offset(lv, s601c40f4, 6, "S601C40.s601c40f4");
  }
}
static Arrange_To_Call_Me vS601C40(Test_S601C40, "S601C40", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S601C41  {
  short s601c41f0;
  short s601c41f1;
};
//SIG(-1 S601C41) C1{ Fs[2]}



static void Test_S601C41()
{
  {
    init_simple_test("S601C41");
    S601C41 lv;
    check2(sizeof(lv), 4, "sizeof(S601C41)");
    check2(__alignof__(lv), 2, "__alignof__(S601C41)");
    check_field_offset(lv, s601c41f0, 0, "S601C41.s601c41f0");
    check_field_offset(lv, s601c41f1, 2, "S601C41.s601c41f1");
  }
}
static Arrange_To_Call_Me vS601C41(Test_S601C41, "S601C41", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S601C42  {
  void *s601c42f0;
  void *s601c42f1;
  void  mf601c42(); // _ZN7S601C428mf601c42Ev
};
//SIG(-1 S601C42) C1{ m Fp[2]}


void  S601C42 ::mf601c42(){}

static void Test_S601C42()
{
  {
    init_simple_test("S601C42");
    S601C42 lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S601C42)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S601C42)");
    check_field_offset(lv, s601c42f0, 0, "S601C42.s601c42f0");
    check_field_offset(lv, s601c42f1, ABISELECT(8,4), "S601C42.s601c42f1");
  }
}
static Arrange_To_Call_Me vS601C42(Test_S601C42, "S601C42", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S601C39  {
  ::S601C40 s601c39f0[12];
  int s601c39f1;
  ::S601C41 s601c39f2[4];
  int s601c39f3;
  ::S601C42 s601c39f4;
  void  mf601c39(); // _ZN7S601C398mf601c39Ev
};
//SIG(-1 S601C39) C1{ m FC2{ Fs[2] Fc[2] Fs}[12] Fi FC3{ Fs[2]}[4] Fi FC4{ m Fp[2]}}


void  S601C39 ::mf601c39(){}

static void Test_S601C39()
{
  {
    init_simple_test("S601C39");
    S601C39 lv;
    check2(sizeof(lv), ABISELECT(136,128), "sizeof(S601C39)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S601C39)");
    check_field_offset(lv, s601c39f0, 0, "S601C39.s601c39f0");
    check_field_offset(lv, s601c39f1, 96, "S601C39.s601c39f1");
    check_field_offset(lv, s601c39f2, 100, "S601C39.s601c39f2");
    check_field_offset(lv, s601c39f3, 116, "S601C39.s601c39f3");
    check_field_offset(lv, s601c39f4, 120, "S601C39.s601c39f4");
  }
}
static Arrange_To_Call_Me vS601C39(Test_S601C39, "S601C39", ABISELECT(136,128));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S601C32  : S601C33 {
  ::S601C39 s601c32f0;
  virtual  ~S601C32(); // _ZN7S601C32D1Ev
  S601C32(); // tgen
};
//SIG(-1 S601C32) C1{ BC2{ BC3{ vd v1} vd v2 Fp[2] FC4{ m FC5{ m Fp Fi[2] FC6{ m}}} FC7{ m Fp[2]}} vd FC8{ m FC9{ Fs[2] Fc[2] Fs}[12] Fi FC10{ Fs[2]}[4] Fi FC11{ m Fp[2]}}}


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

static void Test_S601C32()
{
  extern Class_Descriptor cd_S601C32;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(26,42)];
    init_test(&cd_S601C32, buf);
    S601C32 *dp, &lv = *(dp=new (buf) S601C32());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(200,164), "sizeof(S601C32)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S601C32)");
    check_base_class_offset(lv, (S601C34_nt*)(S601C33*), 0, "S601C32");
    check_base_class_offset(lv, (S601C33*), 0, "S601C32");
    check_field_offset(lv, s601c32f0, ABISELECT(64,36), "S601C32.s601c32f0");
    test_class_info(&lv, &cd_S601C32);
    dp->~S601C32();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS601C32(Test_S601C32, "S601C32", ABISELECT(200,164));

#else // __cplusplus

extern void _ZN7S601C32C1Ev();
extern void _ZN7S601C32D1Ev();
Name_Map name_map_S601C32[] = {
  NSPAIR(_ZN7S601C32C1Ev),
  NSPAIR(_ZN7S601C32D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S601C34_nt;
extern VTBL_ENTRY _ZTI10S601C34_nt[];
extern  VTBL_ENTRY _ZTV10S601C34_nt[];
extern Class_Descriptor cd_S601C33;
extern VTBL_ENTRY _ZTI7S601C33[];
extern  VTBL_ENTRY _ZTV7S601C33[];
static Base_Class bases_S601C32[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S601C34_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S601C33,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S601C32[];
extern void _ZN7S601C32D1Ev();
extern void _ZN7S601C32D0Ev();
extern void _ZN10S601C34_nt3v56Ev();
extern void _ZN7S601C333v57Ev();
static  VTBL_ENTRY vtc_S601C32[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S601C32[0]),
  (VTBL_ENTRY)&_ZN7S601C32D1Ev,
  (VTBL_ENTRY)&_ZN7S601C32D0Ev,
  (VTBL_ENTRY)&_ZN10S601C34_nt3v56Ev,
  (VTBL_ENTRY)&_ZN7S601C333v57Ev,
};
extern VTBL_ENTRY _ZTI7S601C32[];
extern  VTBL_ENTRY _ZTV7S601C32[];
Class_Descriptor cd_S601C32 = {  "S601C32", // class name
  bases_S601C32, 2,
  &(vtc_S601C32[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(200,164), // object size
  NSPAIRA(_ZTI7S601C32),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S601C32),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S601C17  {
  ::S601C18 s601c17f0;
  ::S601C32 s601c17f1;
  void  mf601c17(); // _ZN7S601C178mf601c17Ev
};
//SIG(-1 S601C17) C1{ m FC2{ BC3{ vd v7 v8 v9 v10 v11 v12 FC4{ m Fp[4]}} BC5{} v1 v2 v3 v4 v5 v6 FC6{ BC7{ m Fp Fi Fp Fi[2]} FC8{ m FC9{ m FC10{ m FL[2]}} FC9 FC9 FC9}} FC11{ BC7 FC12{ m FC10}} FC13{ BC7 FC14{ m FC15{ m FL}}} FC16{ BC7 Fi}} FC17{ BC18{ BC19{ vd v13} vd v14 Fp[2] FC20{ m FC21{ m Fp Fi[2] FC22{ m}}} FC23{ m Fp[2]}} vd FC24{ m FC25{ Fs[2] Fc[2] Fs}[12] Fi FC26{ Fs[2]}[4] Fi FC27{ m Fp[2]}}}}


void  S601C17 ::mf601c17(){}

static void Test_S601C17()
{
  {
    init_simple_test("S601C17");
    S601C17 lv;
    check2(sizeof(lv), ABISELECT(464,356), "sizeof(S601C17)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S601C17)");
    check_field_offset(lv, s601c17f0, 0, "S601C17.s601c17f0");
    check_field_offset(lv, s601c17f1, ABISELECT(264,192), "S601C17.s601c17f1");
  }
}
static Arrange_To_Call_Me vS601C17(Test_S601C17, "S601C17", ABISELECT(464,356));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S601C46  {
  ::S601C42 s601c46f0;
  ::S601C13_nt s601c46f1;
  void  mf601c46(); // _ZN7S601C468mf601c46Ev
};
//SIG(-1 S601C46) C1{ m FC2{ m Fp[2]} FC3{ m Fp}}


void  S601C46 ::mf601c46(){}

static void Test_S601C46()
{
  {
    init_simple_test("S601C46");
    S601C46 lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S601C46)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S601C46)");
    check_field_offset(lv, s601c46f0, 0, "S601C46.s601c46f0");
    check_field_offset(lv, s601c46f1, ABISELECT(16,8), "S601C46.s601c46f1");
  }
}
static Arrange_To_Call_Me vS601C46(Test_S601C46, "S601C46", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S601C45  : S601C23 {
  ::S601C46 s601c45f0;
};
//SIG(-1 S601C45) C1{ BC2{ m Fp Fi Fp Fi[2]} FC3{ m FC4{ m Fp[2]} FC5{ m Fp}}}



static void Test_S601C45()
{
  extern Class_Descriptor cd_S601C45;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,9)];
    init_test(&cd_S601C45, buf);
    S601C45 &lv = *(new (buf) S601C45());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,32), "sizeof(S601C45)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S601C45)");
    check_base_class_offset(lv, (S601C23*), 0, "S601C45");
    check_field_offset(lv, s601c45f0, ABISELECT(32,20), "S601C45.s601c45f0");
    test_class_info(&lv, &cd_S601C45);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS601C45(Test_S601C45, "S601C45", ABISELECT(56,32));

#else // __cplusplus

extern Class_Descriptor cd_S601C23;
static Base_Class bases_S601C45[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S601C23,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S601C45 = {  "S601C45", // class name
  bases_S601C45, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(56,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  S601C44  : S601C19 , S601C21_nt {
  ::S601C45 s601c44f0;
  ::S601C45 s601c44f1;
  ::S601C31 s601c44f2;
  ::S601C27 s601c44f3;
  virtual void  v58(); // _ZN7S601C443v58Ev
  virtual void  v59(); // _ZN7S601C443v59Ev
  virtual void  v60(); // _ZN7S601C443v60Ev
  virtual void  v61(); // _ZN7S601C443v61Ev
  virtual void  v62(); // _ZN7S601C443v62Ev
  virtual void  v63(); // _ZN7S601C443v63Ev
  ~S601C44(); // tgen
  S601C44(); // tgen
};
//SIG(-1 S601C44) C1{ BC2{ vd v7 v8 v9 v10 v11 v12 FC3{ m Fp[4]}} BC4{} v1 v2 v3 v4 v5 v6 FC5{ BC6{ m Fp Fi Fp Fi[2]} FC7{ m FC8{ m Fp[2]} FC9{ m Fp}}} FC5 FC10{ BC6 Fi} FC11{ BC6 FC12{ m FC13{ m FL[2]}}}}


void  S601C44 ::v58(){vfunc_called(this, "_ZN7S601C443v58Ev");}
void  S601C44 ::v59(){vfunc_called(this, "_ZN7S601C443v59Ev");}
void  S601C44 ::v60(){vfunc_called(this, "_ZN7S601C443v60Ev");}
void  S601C44 ::v61(){vfunc_called(this, "_ZN7S601C443v61Ev");}
void  S601C44 ::v62(){vfunc_called(this, "_ZN7S601C443v62Ev");}
void  S601C44 ::v63(){vfunc_called(this, "_ZN7S601C443v63Ev");}
S601C44 ::~S601C44(){ note_dtor("S601C44", this);} // tgen
S601C44 ::S601C44(){ note_ctor("S601C44", this);} // tgen

static void Test_S601C44()
{
  extern Class_Descriptor cd_S601C44;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(31,37)];
    init_test(&cd_S601C44, buf);
    S601C44 *dp, &lv = *(dp=new (buf) S601C44());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(240,144), "sizeof(S601C44)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S601C44)");
    check_base_class_offset(lv, (S601C19*), 0, "S601C44");
    check_base_class_offset(lv, (S601C21_nt*), 0, "S601C44");
    check_field_offset(lv, s601c44f0, ABISELECT(40,20), "S601C44.s601c44f0");
    check_field_offset(lv, s601c44f1, ABISELECT(96,52), "S601C44.s601c44f1");
    check_field_offset(lv, s601c44f2, ABISELECT(152,84), "S601C44.s601c44f2");
    check_field_offset(lv, s601c44f3, ABISELECT(192,108), "S601C44.s601c44f3");
    test_class_info(&lv, &cd_S601C44);
    dp->~S601C44();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS601C44(Test_S601C44, "S601C44", ABISELECT(240,144));

#else // __cplusplus

extern void _ZN7S601C44C1Ev();
extern void _ZN7S601C44D1Ev();
Name_Map name_map_S601C44[] = {
  NSPAIR(_ZN7S601C44C1Ev),
  NSPAIR(_ZN7S601C44D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S601C19;
extern VTBL_ENTRY _ZTI7S601C19[];
extern  VTBL_ENTRY _ZTV7S601C19[];
extern Class_Descriptor cd_S601C21_nt;
extern VTBL_ENTRY _ZTI10S601C21_nt[];
static Base_Class bases_S601C44[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S601C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S601C21_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S601C44[];
extern void _ZN7S601C44D1Ev();
extern void _ZN7S601C44D0Ev();
extern void _ZN7S601C193v50Ev();
extern void _ZN7S601C193v51Ev();
extern void _ZN7S601C193v52Ev();
extern void _ZN7S601C193v53Ev();
extern void _ZN7S601C193v54Ev();
extern void _ZN7S601C193v55Ev();
extern void _ZN7S601C443v58Ev();
extern void _ZN7S601C443v59Ev();
extern void _ZN7S601C443v60Ev();
extern void _ZN7S601C443v61Ev();
extern void _ZN7S601C443v62Ev();
extern void _ZN7S601C443v63Ev();
static  VTBL_ENTRY vtc_S601C44[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S601C44[0]),
  (VTBL_ENTRY)&_ZN7S601C44D1Ev,
  (VTBL_ENTRY)&_ZN7S601C44D0Ev,
  (VTBL_ENTRY)&_ZN7S601C193v50Ev,
  (VTBL_ENTRY)&_ZN7S601C193v51Ev,
  (VTBL_ENTRY)&_ZN7S601C193v52Ev,
  (VTBL_ENTRY)&_ZN7S601C193v53Ev,
  (VTBL_ENTRY)&_ZN7S601C193v54Ev,
  (VTBL_ENTRY)&_ZN7S601C193v55Ev,
  (VTBL_ENTRY)&_ZN7S601C443v58Ev,
  (VTBL_ENTRY)&_ZN7S601C443v59Ev,
  (VTBL_ENTRY)&_ZN7S601C443v60Ev,
  (VTBL_ENTRY)&_ZN7S601C443v61Ev,
  (VTBL_ENTRY)&_ZN7S601C443v62Ev,
  (VTBL_ENTRY)&_ZN7S601C443v63Ev,
};
extern VTBL_ENTRY _ZTI7S601C44[];
extern  VTBL_ENTRY _ZTV7S601C44[];
Class_Descriptor cd_S601C44 = {  "S601C44", // class name
  bases_S601C44, 2,
  &(vtc_S601C44[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(240,144), // object size
  NSPAIRA(_ZTI7S601C44),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S601C44),16, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S601C53  {
  void *s601c53f0;
  void *s601c53f1;
  void  mf601c53(); // _ZN7S601C538mf601c53Ev
};
//SIG(-1 S601C53) C1{ m Fp[2]}


void  S601C53 ::mf601c53(){}

static void Test_S601C53()
{
  {
    init_simple_test("S601C53");
    S601C53 lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S601C53)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S601C53)");
    check_field_offset(lv, s601c53f0, 0, "S601C53.s601c53f0");
    check_field_offset(lv, s601c53f1, ABISELECT(8,4), "S601C53.s601c53f1");
  }
}
static Arrange_To_Call_Me vS601C53(Test_S601C53, "S601C53", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S601C49  : S601C34_nt {
  void *s601c49f0;
  void *s601c49f1;
  ::S601C35 s601c49f2;
  ::S601C53 s601c49f3;
  virtual  ~S601C49(); // _ZN7S601C49D1Ev
  virtual void  v64(); // _ZN7S601C493v64Ev
  S601C49(); // tgen
};
//SIG(-1 S601C49) C1{ BC2{ vd v2} vd v1 Fp[2] FC3{ m FC4{ m Fp Fi[2] FC5{ m}}} FC6{ m Fp[2]}}


 S601C49 ::~S601C49(){ note_dtor("S601C49", this);}
void  S601C49 ::v64(){vfunc_called(this, "_ZN7S601C493v64Ev");}
S601C49 ::S601C49(){ note_ctor("S601C49", this);} // tgen

static void Test_S601C49()
{
  extern Class_Descriptor cd_S601C49;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,10)];
    init_test(&cd_S601C49, buf);
    S601C49 *dp, &lv = *(dp=new (buf) S601C49());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,36), "sizeof(S601C49)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S601C49)");
    check_base_class_offset(lv, (S601C34_nt*), 0, "S601C49");
    check_field_offset(lv, s601c49f0, ABISELECT(8,4), "S601C49.s601c49f0");
    check_field_offset(lv, s601c49f1, ABISELECT(16,8), "S601C49.s601c49f1");
    check_field_offset(lv, s601c49f2, ABISELECT(24,12), "S601C49.s601c49f2");
    check_field_offset(lv, s601c49f3, ABISELECT(48,28), "S601C49.s601c49f3");
    test_class_info(&lv, &cd_S601C49);
    dp->~S601C49();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS601C49(Test_S601C49, "S601C49", ABISELECT(64,36));

#else // __cplusplus

extern void _ZN7S601C49C1Ev();
extern void _ZN7S601C49D1Ev();
Name_Map name_map_S601C49[] = {
  NSPAIR(_ZN7S601C49C1Ev),
  NSPAIR(_ZN7S601C49D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S601C34_nt;
extern VTBL_ENTRY _ZTI10S601C34_nt[];
extern  VTBL_ENTRY _ZTV10S601C34_nt[];
static Base_Class bases_S601C49[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S601C34_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S601C49[];
extern void _ZN7S601C49D1Ev();
extern void _ZN7S601C49D0Ev();
extern void _ZN10S601C34_nt3v56Ev();
extern void _ZN7S601C493v64Ev();
static  VTBL_ENTRY vtc_S601C49[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S601C49[0]),
  (VTBL_ENTRY)&_ZN7S601C49D1Ev,
  (VTBL_ENTRY)&_ZN7S601C49D0Ev,
  (VTBL_ENTRY)&_ZN10S601C34_nt3v56Ev,
  (VTBL_ENTRY)&_ZN7S601C493v64Ev,
};
extern VTBL_ENTRY _ZTI7S601C49[];
extern  VTBL_ENTRY _ZTV7S601C49[];
Class_Descriptor cd_S601C49 = {  "S601C49", // class name
  bases_S601C49, 1,
  &(vtc_S601C49[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,36), // object size
  NSPAIRA(_ZTI7S601C49),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S601C49),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  S601C55_nt  {
  char s601c55f0;
  char s601c55f1:4;
  char s601c55f2:4;
  char s601c55f3:4;
  char s601c55f4:4;
  char s601c55f5:4;
  char s601c55f6:4;
};
//SIG(-1 S601C55_nt) C1{ Fc Fc:4 Fc:4 Fc:4 Fc:4 Fc:4 Fc:4}



//skip512 S601C55_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S601C54  {
  void *s601c54f0;
  int s601c54f1;
  ::S601C55_nt s601c54f2;
  int s601c54f3;
  ::S601C42 s601c54f4;
  void  mf601c54(); // _ZN7S601C548mf601c54Ev
};
//SIG(-1 S601C54) C1{ m Fp Fi FC2{ Fc Fc:4 Fc:4 Fc:4 Fc:4 Fc:4 Fc:4} Fi FC3{ m Fp[2]}}


void  S601C54 ::mf601c54(){}

static void Test_S601C54()
{
  {
    init_simple_test("S601C54");
    static S601C54 lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S601C54)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S601C54)");
    check_field_offset(lv, s601c54f0, 0, "S601C54.s601c54f0");
    check_field_offset(lv, s601c54f1, ABISELECT(8,4), "S601C54.s601c54f1");
    check_field_offset(lv, s601c54f2, ABISELECT(12,8), "S601C54.s601c54f2");
    check_field_offset(lv, s601c54f3, ABISELECT(16,12), "S601C54.s601c54f3");
    check_field_offset(lv, s601c54f4, ABISELECT(24,16), "S601C54.s601c54f4");
  }
}
static Arrange_To_Call_Me vS601C54(Test_S601C54, "S601C54", ABISELECT(40,24));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S601C48  : S601C49 {
  ::S601C54 s601c48f0;
  virtual  ~S601C48(); // _ZN7S601C48D1Ev
  S601C48(); // tgen
};
//SIG(-1 S601C48) C1{ BC2{ BC3{ vd v1} vd v2 Fp[2] FC4{ m FC5{ m Fp Fi[2] FC6{ m}}} FC7{ m Fp[2]}} vd FC8{ m Fp Fi FC9{ Fc Fc:4 Fc:4 Fc:4 Fc:4 Fc:4 Fc:4} Fi FC10{ m Fp[2]}}}


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

static void Test_S601C48()
{
  extern Class_Descriptor cd_S601C48;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,16)];
    init_test(&cd_S601C48, buf);
    S601C48 *dp, &lv = *(dp=new (buf) S601C48());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,60), "sizeof(S601C48)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S601C48)");
    check_base_class_offset(lv, (S601C34_nt*)(S601C49*), 0, "S601C48");
    check_base_class_offset(lv, (S601C49*), 0, "S601C48");
    check_field_offset(lv, s601c48f0, ABISELECT(64,36), "S601C48.s601c48f0");
    test_class_info(&lv, &cd_S601C48);
    dp->~S601C48();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS601C48(Test_S601C48, "S601C48", ABISELECT(104,60));

#else // __cplusplus

extern void _ZN7S601C48C1Ev();
extern void _ZN7S601C48D1Ev();
Name_Map name_map_S601C48[] = {
  NSPAIR(_ZN7S601C48C1Ev),
  NSPAIR(_ZN7S601C48D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S601C34_nt;
extern VTBL_ENTRY _ZTI10S601C34_nt[];
extern  VTBL_ENTRY _ZTV10S601C34_nt[];
extern Class_Descriptor cd_S601C49;
extern VTBL_ENTRY _ZTI7S601C49[];
extern  VTBL_ENTRY _ZTV7S601C49[];
static Base_Class bases_S601C48[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S601C34_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S601C49,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S601C48[];
extern void _ZN7S601C48D1Ev();
extern void _ZN7S601C48D0Ev();
extern void _ZN10S601C34_nt3v56Ev();
extern void _ZN7S601C493v64Ev();
static  VTBL_ENTRY vtc_S601C48[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S601C48[0]),
  (VTBL_ENTRY)&_ZN7S601C48D1Ev,
  (VTBL_ENTRY)&_ZN7S601C48D0Ev,
  (VTBL_ENTRY)&_ZN10S601C34_nt3v56Ev,
  (VTBL_ENTRY)&_ZN7S601C493v64Ev,
};
extern VTBL_ENTRY _ZTI7S601C48[];
extern  VTBL_ENTRY _ZTV7S601C48[];
Class_Descriptor cd_S601C48 = {  "S601C48", // class name
  bases_S601C48, 2,
  &(vtc_S601C48[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,60), // object size
  NSPAIRA(_ZTI7S601C48),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S601C48),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S601C43  {
  ::S601C44 s601c43f0;
  ::S601C48 s601c43f1;
  void  mf601c43(); // _ZN7S601C438mf601c43Ev
};
//SIG(-1 S601C43) C1{ m FC2{ BC3{ vd v7 v8 v9 v10 v11 v12 FC4{ m Fp[4]}} BC5{} v1 v2 v3 v4 v5 v6 FC6{ BC7{ m Fp Fi Fp Fi[2]} FC8{ m FC9{ m Fp[2]} FC10{ m Fp}}} FC6 FC11{ BC7 Fi} FC12{ BC7 FC13{ m FC14{ m FL[2]}}}} FC15{ BC16{ BC17{ vd v13} vd v14 Fp[2] FC18{ m FC19{ m Fp Fi[2] FC20{ m}}} FC21{ m Fp[2]}} vd FC22{ m Fp Fi FC23{ Fc Fc:4 Fc:4 Fc:4 Fc:4 Fc:4 Fc:4} Fi FC9}}}


void  S601C43 ::mf601c43(){}

static void Test_S601C43()
{
  {
    init_simple_test("S601C43");
    static S601C43 lv;
    check2(sizeof(lv), ABISELECT(344,204), "sizeof(S601C43)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S601C43)");
    check_field_offset(lv, s601c43f0, 0, "S601C43.s601c43f0");
    check_field_offset(lv, s601c43f1, ABISELECT(240,144), "S601C43.s601c43f1");
  }
}
static Arrange_To_Call_Me vS601C43(Test_S601C43, "S601C43", ABISELECT(344,204));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S601C16  {
  ::S601C17 s601c16f0;
  ::S601C43 s601c16f1;
  void  mf601c16(); // _ZN7S601C168mf601c16Ev
};
//SIG(-1 S601C16) C1{ m FC2{ m FC3{ BC4{ vd v7 v8 v9 v10 v11 v12 FC5{ m Fp[4]}} BC6{} v1 v2 v3 v4 v5 v6 FC7{ BC8{ m Fp Fi Fp Fi[2]} FC9{ m FC10{ m FC11{ m FL[2]}} FC10 FC10 FC10}} FC12{ BC8 FC13{ m FC11}} FC14{ BC8 FC15{ m FC16{ m FL}}} FC17{ BC8 Fi}} FC18{ BC19{ BC20{ vd v13} vd v14 Fp[2] FC21{ m FC22{ m Fp Fi[2] FC23{ m}}} FC24{ m Fp[2]}} vd FC25{ m FC26{ Fs[2] Fc[2] Fs}[12] Fi FC27{ Fs[2]}[4] Fi FC28{ m Fp[2]}}}} FC29{ m FC30{ BC4 BC6 v15 v16 v17 v18 v19 v20 FC31{ BC8 FC32{ m FC28 FC33{ m Fp}}} FC31 FC17 FC12} FC34{ BC35{ BC20 vd v21 Fp[2] FC21 FC36{ m Fp[2]}} vd FC37{ m Fp Fi FC38{ Fc Fc:4 Fc:4 Fc:4 Fc:4 Fc:4 Fc:4} Fi FC28}}}}


void  S601C16 ::mf601c16(){}

static void Test_S601C16()
{
  {
    init_simple_test("S601C16");
    static S601C16 lv;
    check2(sizeof(lv), ABISELECT(808,560), "sizeof(S601C16)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S601C16)");
    check_field_offset(lv, s601c16f0, 0, "S601C16.s601c16f0");
    check_field_offset(lv, s601c16f1, ABISELECT(464,356), "S601C16.s601c16f1");
  }
}
static Arrange_To_Call_Me vS601C16(Test_S601C16, "S601C16", ABISELECT(808,560));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S601C1  : S601C2 {
  ::S601C16 s601c1f0;
  virtual  ~S601C1(); // _ZN6S601C1D1Ev
  virtual void  v1(); // _ZN6S601C12v1Ev
  virtual void  v2(); // _ZN6S601C12v2Ev
  virtual void  v3(); // _ZN6S601C12v3Ev
  virtual void  v4(); // _ZN6S601C12v4Ev
  S601C1(); // tgen
};
//SIG(1 S601C1) C1{ BC2{ BC3{ BC4{ BC5{ vd v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 FC6{ m FC7{ m FL[2]}} FC6 Fp Fi FU8{ m FC9{ Fi:4 Fi:4 Fi:4 Fi:2 Fi:1 Fi:17} Fi} Fi:2 Fi:2 Fc:1 Fc:1 FC10{ m Fp Fp} FC11{ Fp Fp}[2]} vd v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc Fi[2] Fi[2] Fp FC6 FC6 FC6 FC12{ m FC6 FC6} Fp Fi Fi FC13{ m Fp}[4] Fp} vd v35 v36 v37 v38 v39 FC13 FC13 FC13 FC13 FC6 FC6 FC6 FC6 FC14{ m FC15{ m FL FL}}} vd v40 v41 v42 v43} vd v1 v2 v3 v4 FC16{ m FC17{ m FC18{ BC19{ vd v50 v51 v52 v53 v54 v55 FC20{ m Fp Fp Fp Fp}} BC21{} v44 v45 v46 v47 v48 v49 FC22{ BC23{ m Fp Fi Fp Fi Fi} FC24{ m FC6 FC6 FC6 FC6}} FC25{ BC23 FC26{ m FC7}} FC27{ BC23 FC28{ m FC29{ m FL}}} FC30{ BC23 Fi}} FC31{ BC32{ BC33{ vd v56} vd v57 Fp Fp FC34{ m FC35{ m Fp Fi Fi FC36{ m}}} FC10} vd FC37{ m FC38{ Fs Fs Fc Fc Fs}[12] Fi FC39{ Fs Fs}[4] Fi FC40{ m Fp Fp}}}} FC41{ m FC42{ BC19 BC21 v58 v59 v60 v61 v62 v63 FC43{ BC23 FC44{ m FC40 FC13}} FC43 FC30 FC25} FC45{ BC46{ BC33 vd v64 Fp Fp FC34 FC47{ m Fp Fp}} vd FC48{ m Fp Fi FC49{ Fc Fc:4 Fc:4 Fc:4 Fc:4 Fc:4 Fc:4} Fi FC40}}}}}


 S601C1 ::~S601C1(){ note_dtor("S601C1", this);}
void  S601C1 ::v1(){vfunc_called(this, "_ZN6S601C12v1Ev");}
void  S601C1 ::v2(){vfunc_called(this, "_ZN6S601C12v2Ev");}
void  S601C1 ::v3(){vfunc_called(this, "_ZN6S601C12v3Ev");}
void  S601C1 ::v4(){vfunc_called(this, "_ZN6S601C12v4Ev");}
S601C1 ::S601C1(){ note_ctor("S601C1", this);} // tgen

static void Test_S601C1()
{
  extern Class_Descriptor cd_S601C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(151,218)];
    init_test(&cd_S601C1, buf);
    S601C1 *dp, &lv = *(dp=new (buf) S601C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1200,868), "sizeof(S601C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S601C1)");
    check_base_class_offset(lv, (S601C5*)(S601C4*)(S601C3*)(S601C2*), 0, "S601C1");
    check_base_class_offset(lv, (S601C4*)(S601C3*)(S601C2*), 0, "S601C1");
    check_base_class_offset(lv, (S601C3*)(S601C2*), 0, "S601C1");
    check_base_class_offset(lv, (S601C2*), 0, "S601C1");
    check_field_offset(lv, s601c1f0, ABISELECT(392,308), "S601C1.s601c1f0");
    test_class_info(&lv, &cd_S601C1);
    dp->~S601C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS601C1(Test_S601C1, "S601C1", ABISELECT(1200,868));

#else // __cplusplus

extern void _ZN6S601C1C1Ev();
extern void _ZN6S601C1D1Ev();
Name_Map name_map_S601C1[] = {
  NSPAIR(_ZN6S601C1C1Ev),
  NSPAIR(_ZN6S601C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S601C5;
extern VTBL_ENTRY _ZTI6S601C5[];
extern  VTBL_ENTRY _ZTV6S601C5[];
extern Class_Descriptor cd_S601C4;
extern VTBL_ENTRY _ZTI6S601C4[];
extern  VTBL_ENTRY _ZTV6S601C4[];
extern Class_Descriptor cd_S601C3;
extern VTBL_ENTRY _ZTI6S601C3[];
extern  VTBL_ENTRY _ZTV6S601C3[];
extern Class_Descriptor cd_S601C2;
extern VTBL_ENTRY _ZTI6S601C2[];
extern  VTBL_ENTRY _ZTV6S601C2[];
static Base_Class bases_S601C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S601C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S601C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S601C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S601C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S601C1[];
extern void _ZN6S601C1D1Ev();
extern void _ZN6S601C1D0Ev();
extern void _ZN6S601C52v5Ev();
extern void _ZN6S601C52v6Ev();
extern void _ZN6S601C52v7Ev();
extern void _ZN6S601C52v8Ev();
extern void _ZN6S601C52v9Ev();
extern void _ZN6S601C53v10Ev();
extern void _ZN6S601C53v11Ev();
extern void _ZN6S601C53v12Ev();
extern void _ZN6S601C53v13Ev();
extern void _ZN6S601C53v14Ev();
extern void _ZN6S601C53v15Ev();
extern void _ZN6S601C53v16Ev();
extern void _ZN6S601C53v17Ev();
extern void _ZN6S601C53v18Ev();
extern void _ZN6S601C53v19Ev();
extern void _ZN6S601C43v20Ev();
extern void _ZN6S601C43v21Ev();
extern void _ZN6S601C43v22Ev();
extern void _ZN6S601C43v23Ev();
extern void _ZN6S601C43v24Ev();
extern void _ZN6S601C43v25Ev();
extern void _ZN6S601C43v26Ev();
extern void _ZN6S601C43v27Ev();
extern void _ZN6S601C43v28Ev();
extern void _ZN6S601C43v29Ev();
extern void _ZN6S601C43v30Ev();
extern void _ZN6S601C43v31Ev();
extern void _ZN6S601C43v32Ev();
extern void _ZN6S601C43v33Ev();
extern void _ZN6S601C43v34Ev();
extern void _ZN6S601C33v35Ev();
extern void _ZN6S601C33v36Ev();
extern void _ZN6S601C33v37Ev();
extern void _ZN6S601C33v38Ev();
extern void _ZN6S601C33v39Ev();
extern void _ZN6S601C23v40Ev();
extern void _ZN6S601C23v41Ev();
extern void _ZN6S601C23v42Ev();
extern void _ZN6S601C23v43Ev();
extern void _ZN6S601C12v1Ev();
extern void _ZN6S601C12v2Ev();
extern void _ZN6S601C12v3Ev();
extern void _ZN6S601C12v4Ev();
static  VTBL_ENTRY vtc_S601C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S601C1[0]),
  (VTBL_ENTRY)&_ZN6S601C1D1Ev,
  (VTBL_ENTRY)&_ZN6S601C1D0Ev,
  (VTBL_ENTRY)&_ZN6S601C52v5Ev,
  (VTBL_ENTRY)&_ZN6S601C52v6Ev,
  (VTBL_ENTRY)&_ZN6S601C52v7Ev,
  (VTBL_ENTRY)&_ZN6S601C52v8Ev,
  (VTBL_ENTRY)&_ZN6S601C52v9Ev,
  (VTBL_ENTRY)&_ZN6S601C53v10Ev,
  (VTBL_ENTRY)&_ZN6S601C53v11Ev,
  (VTBL_ENTRY)&_ZN6S601C53v12Ev,
  (VTBL_ENTRY)&_ZN6S601C53v13Ev,
  (VTBL_ENTRY)&_ZN6S601C53v14Ev,
  (VTBL_ENTRY)&_ZN6S601C53v15Ev,
  (VTBL_ENTRY)&_ZN6S601C53v16Ev,
  (VTBL_ENTRY)&_ZN6S601C53v17Ev,
  (VTBL_ENTRY)&_ZN6S601C53v18Ev,
  (VTBL_ENTRY)&_ZN6S601C53v19Ev,
  (VTBL_ENTRY)&_ZN6S601C43v20Ev,
  (VTBL_ENTRY)&_ZN6S601C43v21Ev,
  (VTBL_ENTRY)&_ZN6S601C43v22Ev,
  (VTBL_ENTRY)&_ZN6S601C43v23Ev,
  (VTBL_ENTRY)&_ZN6S601C43v24Ev,
  (VTBL_ENTRY)&_ZN6S601C43v25Ev,
  (VTBL_ENTRY)&_ZN6S601C43v26Ev,
  (VTBL_ENTRY)&_ZN6S601C43v27Ev,
  (VTBL_ENTRY)&_ZN6S601C43v28Ev,
  (VTBL_ENTRY)&_ZN6S601C43v29Ev,
  (VTBL_ENTRY)&_ZN6S601C43v30Ev,
  (VTBL_ENTRY)&_ZN6S601C43v31Ev,
  (VTBL_ENTRY)&_ZN6S601C43v32Ev,
  (VTBL_ENTRY)&_ZN6S601C43v33Ev,
  (VTBL_ENTRY)&_ZN6S601C43v34Ev,
  (VTBL_ENTRY)&_ZN6S601C33v35Ev,
  (VTBL_ENTRY)&_ZN6S601C33v36Ev,
  (VTBL_ENTRY)&_ZN6S601C33v37Ev,
  (VTBL_ENTRY)&_ZN6S601C33v38Ev,
  (VTBL_ENTRY)&_ZN6S601C33v39Ev,
  (VTBL_ENTRY)&_ZN6S601C23v40Ev,
  (VTBL_ENTRY)&_ZN6S601C23v41Ev,
  (VTBL_ENTRY)&_ZN6S601C23v42Ev,
  (VTBL_ENTRY)&_ZN6S601C23v43Ev,
  (VTBL_ENTRY)&_ZN6S601C12v1Ev,
  (VTBL_ENTRY)&_ZN6S601C12v2Ev,
  (VTBL_ENTRY)&_ZN6S601C12v3Ev,
  (VTBL_ENTRY)&_ZN6S601C12v4Ev,
};
extern VTBL_ENTRY _ZTI6S601C1[];
extern  VTBL_ENTRY _ZTV6S601C1[];
Class_Descriptor cd_S601C1 = {  "S601C1", // class name
  bases_S601C1, 4,
  &(vtc_S601C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1200,868), // object size
  NSPAIRA(_ZTI6S601C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S601C1),47, //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  S602C5  {
  ::S2120C13_nt s602c5f0;
  ::S2120C13_nt s602c5f1;
  void *s602c5f2;
  int s602c5f3;
  ::S601C8 s602c5f4;
  int s602c5f5:2;
  int s602c5f6:2;
  unsigned char s602c5f7:1;
  unsigned char s602c5f8:1;
  ::S601C53 s602c5f9;
  ::S601C11 s602c5f10[2];
  virtual  ~S602C5(); // _ZN6S602C5D1Ev
  virtual void  v5(); // _ZN6S602C52v5Ev
  virtual void  v6(); // _ZN6S602C52v6Ev
  virtual void  v7(); // _ZN6S602C52v7Ev
  virtual void  v8(); // _ZN6S602C52v8Ev
  virtual void  v9(); // _ZN6S602C52v9Ev
  virtual void  v10(); // _ZN6S602C53v10Ev
  virtual void  v11(); // _ZN6S602C53v11Ev
  virtual void  v12(); // _ZN6S602C53v12Ev
  virtual void  v13(); // _ZN6S602C53v13Ev
  virtual void  v14(); // _ZN6S602C53v14Ev
  virtual void  v15(); // _ZN6S602C53v15Ev
  virtual void  v16(); // _ZN6S602C53v16Ev
  virtual void  v17(); // _ZN6S602C53v17Ev
  virtual void  v18(); // _ZN6S602C53v18Ev
  virtual void  v19(); // _ZN6S602C53v19Ev
  S602C5(); // tgen
};
//SIG(-1 S602C5) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 FC2{ m FC3{ m FL[2]}} FC2 Fp Fi FU4{ m FC5{ Fi:4 Fi:4 Fi:4 Fi:2 Fi:1 Fi:17} Fi} Fi:2 Fi:2 Fc:1 Fc:1 FC6{ m Fp Fp} FC7{ Fp Fp}[2]}


 S602C5 ::~S602C5(){ note_dtor("S602C5", this);}
void  S602C5 ::v5(){vfunc_called(this, "_ZN6S602C52v5Ev");}
void  S602C5 ::v6(){vfunc_called(this, "_ZN6S602C52v6Ev");}
void  S602C5 ::v7(){vfunc_called(this, "_ZN6S602C52v7Ev");}
void  S602C5 ::v8(){vfunc_called(this, "_ZN6S602C52v8Ev");}
void  S602C5 ::v9(){vfunc_called(this, "_ZN6S602C52v9Ev");}
void  S602C5 ::v10(){vfunc_called(this, "_ZN6S602C53v10Ev");}
void  S602C5 ::v11(){vfunc_called(this, "_ZN6S602C53v11Ev");}
void  S602C5 ::v12(){vfunc_called(this, "_ZN6S602C53v12Ev");}
void  S602C5 ::v13(){vfunc_called(this, "_ZN6S602C53v13Ev");}
void  S602C5 ::v14(){vfunc_called(this, "_ZN6S602C53v14Ev");}
void  S602C5 ::v15(){vfunc_called(this, "_ZN6S602C53v15Ev");}
void  S602C5 ::v16(){vfunc_called(this, "_ZN6S602C53v16Ev");}
void  S602C5 ::v17(){vfunc_called(this, "_ZN6S602C53v17Ev");}
void  S602C5 ::v18(){vfunc_called(this, "_ZN6S602C53v18Ev");}
void  S602C5 ::v19(){vfunc_called(this, "_ZN6S602C53v19Ev");}
S602C5 ::S602C5(){ note_ctor("S602C5", this);} // tgen

static void Test_S602C5()
{
  extern Class_Descriptor cd_S602C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,20)];
    init_test(&cd_S602C5, buf);
    S602C5 *dp, &lv = *(dp=new (buf) S602C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,76), "sizeof(S602C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S602C5)");
    check_field_offset(lv, s602c5f0, ABISELECT(8,4), "S602C5.s602c5f0");
    check_field_offset(lv, s602c5f1, ABISELECT(24,20), "S602C5.s602c5f1");
    check_field_offset(lv, s602c5f2, ABISELECT(40,36), "S602C5.s602c5f2");
    check_field_offset(lv, s602c5f3, ABISELECT(48,40), "S602C5.s602c5f3");
    check_field_offset(lv, s602c5f4, ABISELECT(52,44), "S602C5.s602c5f4");
    set_bf_and_test(lv, s602c5f5, ABISELECT(56,48), 0, 2, 1, "S602C5");
    set_bf_and_test(lv, s602c5f5, ABISELECT(56,48), 0, 2, hide_sll(1LL<<1), "S602C5");
    set_bf_and_test(lv, s602c5f6, ABISELECT(56,48), 2, 2, 1, "S602C5");
    set_bf_and_test(lv, s602c5f6, ABISELECT(56,48), 2, 2, hide_sll(1LL<<1), "S602C5");
    set_bf_and_test(lv, s602c5f7, ABISELECT(56,48), 4, 1, 1, "S602C5");
    set_bf_and_test(lv, s602c5f8, ABISELECT(56,48), 5, 1, 1, "S602C5");
    check_field_offset(lv, s602c5f9, ABISELECT(64,52), "S602C5.s602c5f9");
    check_field_offset(lv, s602c5f10, ABISELECT(80,60), "S602C5.s602c5f10");
    test_class_info(&lv, &cd_S602C5);
    dp->~S602C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS602C5(Test_S602C5, "S602C5", ABISELECT(112,76));

#else // __cplusplus

extern void _ZN6S602C5C1Ev();
extern void _ZN6S602C5D1Ev();
Name_Map name_map_S602C5[] = {
  NSPAIR(_ZN6S602C5C1Ev),
  NSPAIR(_ZN6S602C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S602C5[];
extern void _ZN6S602C5D1Ev();
extern void _ZN6S602C5D0Ev();
extern void _ZN6S602C52v5Ev();
extern void _ZN6S602C52v6Ev();
extern void _ZN6S602C52v7Ev();
extern void _ZN6S602C52v8Ev();
extern void _ZN6S602C52v9Ev();
extern void _ZN6S602C53v10Ev();
extern void _ZN6S602C53v11Ev();
extern void _ZN6S602C53v12Ev();
extern void _ZN6S602C53v13Ev();
extern void _ZN6S602C53v14Ev();
extern void _ZN6S602C53v15Ev();
extern void _ZN6S602C53v16Ev();
extern void _ZN6S602C53v17Ev();
extern void _ZN6S602C53v18Ev();
extern void _ZN6S602C53v19Ev();
static  VTBL_ENTRY vtc_S602C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S602C5[0]),
  (VTBL_ENTRY)&_ZN6S602C5D1Ev,
  (VTBL_ENTRY)&_ZN6S602C5D0Ev,
  (VTBL_ENTRY)&_ZN6S602C52v5Ev,
  (VTBL_ENTRY)&_ZN6S602C52v6Ev,
  (VTBL_ENTRY)&_ZN6S602C52v7Ev,
  (VTBL_ENTRY)&_ZN6S602C52v8Ev,
  (VTBL_ENTRY)&_ZN6S602C52v9Ev,
  (VTBL_ENTRY)&_ZN6S602C53v10Ev,
  (VTBL_ENTRY)&_ZN6S602C53v11Ev,
  (VTBL_ENTRY)&_ZN6S602C53v12Ev,
  (VTBL_ENTRY)&_ZN6S602C53v13Ev,
  (VTBL_ENTRY)&_ZN6S602C53v14Ev,
  (VTBL_ENTRY)&_ZN6S602C53v15Ev,
  (VTBL_ENTRY)&_ZN6S602C53v16Ev,
  (VTBL_ENTRY)&_ZN6S602C53v17Ev,
  (VTBL_ENTRY)&_ZN6S602C53v18Ev,
  (VTBL_ENTRY)&_ZN6S602C53v19Ev,
};
extern VTBL_ENTRY _ZTI6S602C5[];
extern  VTBL_ENTRY _ZTV6S602C5[];
Class_Descriptor cd_S602C5 = {  "S602C5", // class name
  0,0,//no base classes
  &(vtc_S602C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,76), // object size
  NSPAIRA(_ZTI6S602C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S602C5),19, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S602C4  : S602C5 {
  unsigned char s602c4f0:1;
  unsigned char s602c4f1:1;
  unsigned char s602c4f2:1;
  unsigned char s602c4f3:1;
  unsigned char s602c4f4:1;
  unsigned char s602c4f5:1;
  unsigned char s602c4f6:1;
  char s602c4f7;
  int s602c4f8[2];
  int s602c4f9[2];
  void *s602c4f10;
  ::S2120C13_nt s602c4f11;
  ::S2120C13_nt s602c4f12;
  ::S2120C13_nt s602c4f13;
  ::S601C12 s602c4f14;
  void *s602c4f15;
  int s602c4f16;
  int s602c4f17;
  ::S601C13_nt s602c4f18[4];
  void *s602c4f19;
  virtual  ~S602C4(); // _ZN6S602C4D1Ev
  virtual void  v20(); // _ZN6S602C43v20Ev
  virtual void  v21(); // _ZN6S602C43v21Ev
  virtual void  v22(); // _ZN6S602C43v22Ev
  virtual void  v23(); // _ZN6S602C43v23Ev
  virtual void  v24(); // _ZN6S602C43v24Ev
  virtual void  v25(); // _ZN6S602C43v25Ev
  virtual void  v26(); // _ZN6S602C43v26Ev
  virtual void  v27(); // _ZN6S602C43v27Ev
  virtual void  v28(); // _ZN6S602C43v28Ev
  virtual void  v29(); // _ZN6S602C43v29Ev
  virtual void  v30(); // _ZN6S602C43v30Ev
  virtual void  v31(); // _ZN6S602C43v31Ev
  virtual void  v32(); // _ZN6S602C43v32Ev
  virtual void  v33(); // _ZN6S602C43v33Ev
  virtual void  v34(); // _ZN6S602C43v34Ev
  S602C4(); // tgen
};
//SIG(-1 S602C4) C1{ BC2{ vd v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 FC3{ m FC4{ m FL[2]}} FC3 Fp Fi FU5{ m FC6{ Fi:4 Fi:4 Fi:4 Fi:2 Fi:1 Fi:17} Fi} Fi:2 Fi:2 Fc:1 Fc:1 FC7{ m Fp Fp} FC8{ Fp Fp}[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc Fi[2] Fi[2] Fp FC3 FC3 FC3 FC9{ m FC3 FC3} Fp Fi Fi FC10{ m Fp}[4] Fp}


 S602C4 ::~S602C4(){ note_dtor("S602C4", this);}
void  S602C4 ::v20(){vfunc_called(this, "_ZN6S602C43v20Ev");}
void  S602C4 ::v21(){vfunc_called(this, "_ZN6S602C43v21Ev");}
void  S602C4 ::v22(){vfunc_called(this, "_ZN6S602C43v22Ev");}
void  S602C4 ::v23(){vfunc_called(this, "_ZN6S602C43v23Ev");}
void  S602C4 ::v24(){vfunc_called(this, "_ZN6S602C43v24Ev");}
void  S602C4 ::v25(){vfunc_called(this, "_ZN6S602C43v25Ev");}
void  S602C4 ::v26(){vfunc_called(this, "_ZN6S602C43v26Ev");}
void  S602C4 ::v27(){vfunc_called(this, "_ZN6S602C43v27Ev");}
void  S602C4 ::v28(){vfunc_called(this, "_ZN6S602C43v28Ev");}
void  S602C4 ::v29(){vfunc_called(this, "_ZN6S602C43v29Ev");}
void  S602C4 ::v30(){vfunc_called(this, "_ZN6S602C43v30Ev");}
void  S602C4 ::v31(){vfunc_called(this, "_ZN6S602C43v31Ev");}
void  S602C4 ::v32(){vfunc_called(this, "_ZN6S602C43v32Ev");}
void  S602C4 ::v33(){vfunc_called(this, "_ZN6S602C43v33Ev");}
void  S602C4 ::v34(){vfunc_called(this, "_ZN6S602C43v34Ev");}
S602C4 ::S602C4(){ note_ctor("S602C4", this);} // tgen

static void Test_S602C4()
{
  extern Class_Descriptor cd_S602C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(36,54)];
    init_test(&cd_S602C4, buf);
    S602C4 *dp, &lv = *(dp=new (buf) S602C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(280,212), "sizeof(S602C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S602C4)");
    check_base_class_offset(lv, (S602C5*), 0, "S602C4");
    set_bf_and_test(lv, s602c4f0, ABISELECT(112,76), 0, 1, 1, "S602C4");
    set_bf_and_test(lv, s602c4f1, ABISELECT(112,76), 1, 1, 1, "S602C4");
    set_bf_and_test(lv, s602c4f2, ABISELECT(112,76), 2, 1, 1, "S602C4");
    set_bf_and_test(lv, s602c4f3, ABISELECT(112,76), 3, 1, 1, "S602C4");
    set_bf_and_test(lv, s602c4f4, ABISELECT(112,76), 4, 1, 1, "S602C4");
    set_bf_and_test(lv, s602c4f5, ABISELECT(112,76), 5, 1, 1, "S602C4");
    set_bf_and_test(lv, s602c4f6, ABISELECT(112,76), 6, 1, 1, "S602C4");
    check_field_offset(lv, s602c4f7, ABISELECT(113,77), "S602C4.s602c4f7");
    check_field_offset(lv, s602c4f8, ABISELECT(116,80), "S602C4.s602c4f8");
    check_field_offset(lv, s602c4f9, ABISELECT(124,88), "S602C4.s602c4f9");
    check_field_offset(lv, s602c4f10, ABISELECT(136,96), "S602C4.s602c4f10");
    check_field_offset(lv, s602c4f11, ABISELECT(144,100), "S602C4.s602c4f11");
    check_field_offset(lv, s602c4f12, ABISELECT(160,116), "S602C4.s602c4f12");
    check_field_offset(lv, s602c4f13, ABISELECT(176,132), "S602C4.s602c4f13");
    check_field_offset(lv, s602c4f14, ABISELECT(192,148), "S602C4.s602c4f14");
    check_field_offset(lv, s602c4f15, ABISELECT(224,180), "S602C4.s602c4f15");
    check_field_offset(lv, s602c4f16, ABISELECT(232,184), "S602C4.s602c4f16");
    check_field_offset(lv, s602c4f17, ABISELECT(236,188), "S602C4.s602c4f17");
    check_field_offset(lv, s602c4f18, ABISELECT(240,192), "S602C4.s602c4f18");
    check_field_offset(lv, s602c4f19, ABISELECT(272,208), "S602C4.s602c4f19");
    test_class_info(&lv, &cd_S602C4);
    dp->~S602C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS602C4(Test_S602C4, "S602C4", ABISELECT(280,212));

#else // __cplusplus

extern void _ZN6S602C4C1Ev();
extern void _ZN6S602C4D1Ev();
Name_Map name_map_S602C4[] = {
  NSPAIR(_ZN6S602C4C1Ev),
  NSPAIR(_ZN6S602C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S602C5;
extern VTBL_ENTRY _ZTI6S602C5[];
extern  VTBL_ENTRY _ZTV6S602C5[];
static Base_Class bases_S602C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S602C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S602C4[];
extern void _ZN6S602C4D1Ev();
extern void _ZN6S602C4D0Ev();
extern void _ZN6S602C52v5Ev();
extern void _ZN6S602C52v6Ev();
extern void _ZN6S602C52v7Ev();
extern void _ZN6S602C52v8Ev();
extern void _ZN6S602C52v9Ev();
extern void _ZN6S602C53v10Ev();
extern void _ZN6S602C53v11Ev();
extern void _ZN6S602C53v12Ev();
extern void _ZN6S602C53v13Ev();
extern void _ZN6S602C53v14Ev();
extern void _ZN6S602C53v15Ev();
extern void _ZN6S602C53v16Ev();
extern void _ZN6S602C53v17Ev();
extern void _ZN6S602C53v18Ev();
extern void _ZN6S602C53v19Ev();
extern void _ZN6S602C43v20Ev();
extern void _ZN6S602C43v21Ev();
extern void _ZN6S602C43v22Ev();
extern void _ZN6S602C43v23Ev();
extern void _ZN6S602C43v24Ev();
extern void _ZN6S602C43v25Ev();
extern void _ZN6S602C43v26Ev();
extern void _ZN6S602C43v27Ev();
extern void _ZN6S602C43v28Ev();
extern void _ZN6S602C43v29Ev();
extern void _ZN6S602C43v30Ev();
extern void _ZN6S602C43v31Ev();
extern void _ZN6S602C43v32Ev();
extern void _ZN6S602C43v33Ev();
extern void _ZN6S602C43v34Ev();
static  VTBL_ENTRY vtc_S602C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S602C4[0]),
  (VTBL_ENTRY)&_ZN6S602C4D1Ev,
  (VTBL_ENTRY)&_ZN6S602C4D0Ev,
  (VTBL_ENTRY)&_ZN6S602C52v5Ev,
  (VTBL_ENTRY)&_ZN6S602C52v6Ev,
  (VTBL_ENTRY)&_ZN6S602C52v7Ev,
  (VTBL_ENTRY)&_ZN6S602C52v8Ev,
  (VTBL_ENTRY)&_ZN6S602C52v9Ev,
  (VTBL_ENTRY)&_ZN6S602C53v10Ev,
  (VTBL_ENTRY)&_ZN6S602C53v11Ev,
  (VTBL_ENTRY)&_ZN6S602C53v12Ev,
  (VTBL_ENTRY)&_ZN6S602C53v13Ev,
  (VTBL_ENTRY)&_ZN6S602C53v14Ev,
  (VTBL_ENTRY)&_ZN6S602C53v15Ev,
  (VTBL_ENTRY)&_ZN6S602C53v16Ev,
  (VTBL_ENTRY)&_ZN6S602C53v17Ev,
  (VTBL_ENTRY)&_ZN6S602C53v18Ev,
  (VTBL_ENTRY)&_ZN6S602C53v19Ev,
  (VTBL_ENTRY)&_ZN6S602C43v20Ev,
  (VTBL_ENTRY)&_ZN6S602C43v21Ev,
  (VTBL_ENTRY)&_ZN6S602C43v22Ev,
  (VTBL_ENTRY)&_ZN6S602C43v23Ev,
  (VTBL_ENTRY)&_ZN6S602C43v24Ev,
  (VTBL_ENTRY)&_ZN6S602C43v25Ev,
  (VTBL_ENTRY)&_ZN6S602C43v26Ev,
  (VTBL_ENTRY)&_ZN6S602C43v27Ev,
  (VTBL_ENTRY)&_ZN6S602C43v28Ev,
  (VTBL_ENTRY)&_ZN6S602C43v29Ev,
  (VTBL_ENTRY)&_ZN6S602C43v30Ev,
  (VTBL_ENTRY)&_ZN6S602C43v31Ev,
  (VTBL_ENTRY)&_ZN6S602C43v32Ev,
  (VTBL_ENTRY)&_ZN6S602C43v33Ev,
  (VTBL_ENTRY)&_ZN6S602C43v34Ev,
};
extern VTBL_ENTRY _ZTI6S602C4[];
extern  VTBL_ENTRY _ZTV6S602C4[];
Class_Descriptor cd_S602C4 = {  "S602C4", // class name
  bases_S602C4, 1,
  &(vtc_S602C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(280,212), // object size
  NSPAIRA(_ZTI6S602C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S602C4),34, //virtual function table var
  2, // 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  S602C3  : S602C4 {
  ::S601C13_nt s602c3f0;
  ::S601C13_nt s602c3f1;
  ::S601C13_nt s602c3f2;
  ::S601C13_nt s602c3f3;
  ::S2120C13_nt s602c3f4;
  ::S2120C13_nt s602c3f5;
  ::S2120C13_nt s602c3f6;
  ::S2120C13_nt s602c3f7;
  ::S601C14 s602c3f8;
  virtual  ~S602C3(); // _ZN6S602C3D1Ev
  virtual void  v35(); // _ZN6S602C33v35Ev
  virtual void  v36(); // _ZN6S602C33v36Ev
  virtual void  v37(); // _ZN6S602C33v37Ev
  virtual void  v38(); // _ZN6S602C33v38Ev
  virtual void  v39(); // _ZN6S602C33v39Ev
  S602C3(); // tgen
};
//SIG(-1 S602C3) C1{ BC2{ BC3{ vd v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 FC4{ m FC5{ m FL[2]}} FC4 Fp Fi FU6{ m FC7{ Fi:4 Fi:4 Fi:4 Fi:2 Fi:1 Fi:17} Fi} Fi:2 Fi:2 Fc:1 Fc:1 FC8{ m Fp Fp} FC9{ Fp Fp}[2]} vd v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc Fi[2] Fi[2] Fp FC4 FC4 FC4 FC10{ m FC4 FC4} Fp Fi Fi FC11{ m Fp}[4] Fp} vd v1 v2 v3 v4 v5 FC11 FC11 FC11 FC11 FC4 FC4 FC4 FC4 FC12{ m FC13{ m FL FL}}}


 S602C3 ::~S602C3(){ note_dtor("S602C3", this);}
void  S602C3 ::v35(){vfunc_called(this, "_ZN6S602C33v35Ev");}
void  S602C3 ::v36(){vfunc_called(this, "_ZN6S602C33v36Ev");}
void  S602C3 ::v37(){vfunc_called(this, "_ZN6S602C33v37Ev");}
void  S602C3 ::v38(){vfunc_called(this, "_ZN6S602C33v38Ev");}
void  S602C3 ::v39(){vfunc_called(this, "_ZN6S602C33v39Ev");}
S602C3 ::S602C3(){ note_ctor("S602C3", this);} // tgen

static void Test_S602C3()
{
  extern Class_Descriptor cd_S602C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(50,78)];
    init_test(&cd_S602C3, buf);
    S602C3 *dp, &lv = *(dp=new (buf) S602C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(392,308), "sizeof(S602C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S602C3)");
    check_base_class_offset(lv, (S602C5*)(S602C4*), 0, "S602C3");
    check_base_class_offset(lv, (S602C4*), 0, "S602C3");
    check_field_offset(lv, s602c3f0, ABISELECT(280,212), "S602C3.s602c3f0");
    check_field_offset(lv, s602c3f1, ABISELECT(288,216), "S602C3.s602c3f1");
    check_field_offset(lv, s602c3f2, ABISELECT(296,220), "S602C3.s602c3f2");
    check_field_offset(lv, s602c3f3, ABISELECT(304,224), "S602C3.s602c3f3");
    check_field_offset(lv, s602c3f4, ABISELECT(312,228), "S602C3.s602c3f4");
    check_field_offset(lv, s602c3f5, ABISELECT(328,244), "S602C3.s602c3f5");
    check_field_offset(lv, s602c3f6, ABISELECT(344,260), "S602C3.s602c3f6");
    check_field_offset(lv, s602c3f7, ABISELECT(360,276), "S602C3.s602c3f7");
    check_field_offset(lv, s602c3f8, ABISELECT(376,292), "S602C3.s602c3f8");
    test_class_info(&lv, &cd_S602C3);
    dp->~S602C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS602C3(Test_S602C3, "S602C3", ABISELECT(392,308));

#else // __cplusplus

extern void _ZN6S602C3C1Ev();
extern void _ZN6S602C3D1Ev();
Name_Map name_map_S602C3[] = {
  NSPAIR(_ZN6S602C3C1Ev),
  NSPAIR(_ZN6S602C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S602C5;
extern VTBL_ENTRY _ZTI6S602C5[];
extern  VTBL_ENTRY _ZTV6S602C5[];
extern Class_Descriptor cd_S602C4;
extern VTBL_ENTRY _ZTI6S602C4[];
extern  VTBL_ENTRY _ZTV6S602C4[];
static Base_Class bases_S602C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S602C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S602C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S602C3[];
extern void _ZN6S602C3D1Ev();
extern void _ZN6S602C3D0Ev();
extern void _ZN6S602C52v5Ev();
extern void _ZN6S602C52v6Ev();
extern void _ZN6S602C52v7Ev();
extern void _ZN6S602C52v8Ev();
extern void _ZN6S602C52v9Ev();
extern void _ZN6S602C53v10Ev();
extern void _ZN6S602C53v11Ev();
extern void _ZN6S602C53v12Ev();
extern void _ZN6S602C53v13Ev();
extern void _ZN6S602C53v14Ev();
extern void _ZN6S602C53v15Ev();
extern void _ZN6S602C53v16Ev();
extern void _ZN6S602C53v17Ev();
extern void _ZN6S602C53v18Ev();
extern void _ZN6S602C53v19Ev();
extern void _ZN6S602C43v20Ev();
extern void _ZN6S602C43v21Ev();
extern void _ZN6S602C43v22Ev();
extern void _ZN6S602C43v23Ev();
extern void _ZN6S602C43v24Ev();
extern void _ZN6S602C43v25Ev();
extern void _ZN6S602C43v26Ev();
extern void _ZN6S602C43v27Ev();
extern void _ZN6S602C43v28Ev();
extern void _ZN6S602C43v29Ev();
extern void _ZN6S602C43v30Ev();
extern void _ZN6S602C43v31Ev();
extern void _ZN6S602C43v32Ev();
extern void _ZN6S602C43v33Ev();
extern void _ZN6S602C43v34Ev();
extern void _ZN6S602C33v35Ev();
extern void _ZN6S602C33v36Ev();
extern void _ZN6S602C33v37Ev();
extern void _ZN6S602C33v38Ev();
extern void _ZN6S602C33v39Ev();
static  VTBL_ENTRY vtc_S602C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S602C3[0]),
  (VTBL_ENTRY)&_ZN6S602C3D1Ev,
  (VTBL_ENTRY)&_ZN6S602C3D0Ev,
  (VTBL_ENTRY)&_ZN6S602C52v5Ev,
  (VTBL_ENTRY)&_ZN6S602C52v6Ev,
  (VTBL_ENTRY)&_ZN6S602C52v7Ev,
  (VTBL_ENTRY)&_ZN6S602C52v8Ev,
  (VTBL_ENTRY)&_ZN6S602C52v9Ev,
  (VTBL_ENTRY)&_ZN6S602C53v10Ev,
  (VTBL_ENTRY)&_ZN6S602C53v11Ev,
  (VTBL_ENTRY)&_ZN6S602C53v12Ev,
  (VTBL_ENTRY)&_ZN6S602C53v13Ev,
  (VTBL_ENTRY)&_ZN6S602C53v14Ev,
  (VTBL_ENTRY)&_ZN6S602C53v15Ev,
  (VTBL_ENTRY)&_ZN6S602C53v16Ev,
  (VTBL_ENTRY)&_ZN6S602C53v17Ev,
  (VTBL_ENTRY)&_ZN6S602C53v18Ev,
  (VTBL_ENTRY)&_ZN6S602C53v19Ev,
  (VTBL_ENTRY)&_ZN6S602C43v20Ev,
  (VTBL_ENTRY)&_ZN6S602C43v21Ev,
  (VTBL_ENTRY)&_ZN6S602C43v22Ev,
  (VTBL_ENTRY)&_ZN6S602C43v23Ev,
  (VTBL_ENTRY)&_ZN6S602C43v24Ev,
  (VTBL_ENTRY)&_ZN6S602C43v25Ev,
  (VTBL_ENTRY)&_ZN6S602C43v26Ev,
  (VTBL_ENTRY)&_ZN6S602C43v27Ev,
  (VTBL_ENTRY)&_ZN6S602C43v28Ev,
  (VTBL_ENTRY)&_ZN6S602C43v29Ev,
  (VTBL_ENTRY)&_ZN6S602C43v30Ev,
  (VTBL_ENTRY)&_ZN6S602C43v31Ev,
  (VTBL_ENTRY)&_ZN6S602C43v32Ev,
  (VTBL_ENTRY)&_ZN6S602C43v33Ev,
  (VTBL_ENTRY)&_ZN6S602C43v34Ev,
  (VTBL_ENTRY)&_ZN6S602C33v35Ev,
  (VTBL_ENTRY)&_ZN6S602C33v36Ev,
  (VTBL_ENTRY)&_ZN6S602C33v37Ev,
  (VTBL_ENTRY)&_ZN6S602C33v38Ev,
  (VTBL_ENTRY)&_ZN6S602C33v39Ev,
};
extern VTBL_ENTRY _ZTI6S602C3[];
extern  VTBL_ENTRY _ZTV6S602C3[];
Class_Descriptor cd_S602C3 = {  "S602C3", // class name
  bases_S602C3, 2,
  &(vtc_S602C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(392,308), // object size
  NSPAIRA(_ZTI6S602C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S602C3),39, //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  S602C2  : S602C3 {
  virtual  ~S602C2(); // _ZN6S602C2D1Ev
  virtual void  v40(); // _ZN6S602C23v40Ev
  virtual void  v41(); // _ZN6S602C23v41Ev
  virtual void  v42(); // _ZN6S602C23v42Ev
  virtual void  v43(); // _ZN6S602C23v43Ev
  S602C2(); // tgen
};
//SIG(-1 S602C2) C1{ BC2{ BC3{ BC4{ vd v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 FC5{ m FC6{ m FL[2]}} FC5 Fp Fi FU7{ m FC8{ Fi:4 Fi:4 Fi:4 Fi:2 Fi:1 Fi:17} Fi} Fi:2 Fi:2 Fc:1 Fc:1 FC9{ m Fp Fp} FC10{ Fp Fp}[2]} vd v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc Fi[2] Fi[2] Fp FC5 FC5 FC5 FC11{ m FC5 FC5} Fp Fi Fi FC12{ m Fp}[4] Fp} vd v35 v36 v37 v38 v39 FC12 FC12 FC12 FC12 FC5 FC5 FC5 FC5 FC13{ m FC14{ m FL FL}}} vd v1 v2 v3 v4}


 S602C2 ::~S602C2(){ note_dtor("S602C2", this);}
void  S602C2 ::v40(){vfunc_called(this, "_ZN6S602C23v40Ev");}
void  S602C2 ::v41(){vfunc_called(this, "_ZN6S602C23v41Ev");}
void  S602C2 ::v42(){vfunc_called(this, "_ZN6S602C23v42Ev");}
void  S602C2 ::v43(){vfunc_called(this, "_ZN6S602C23v43Ev");}
S602C2 ::S602C2(){ note_ctor("S602C2", this);} // tgen

static void Test_S602C2()
{
  extern Class_Descriptor cd_S602C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(50,78)];
    init_test(&cd_S602C2, buf);
    S602C2 *dp, &lv = *(dp=new (buf) S602C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(392,308), "sizeof(S602C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S602C2)");
    check_base_class_offset(lv, (S602C5*)(S602C4*)(S602C3*), 0, "S602C2");
    check_base_class_offset(lv, (S602C4*)(S602C3*), 0, "S602C2");
    check_base_class_offset(lv, (S602C3*), 0, "S602C2");
    test_class_info(&lv, &cd_S602C2);
    dp->~S602C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS602C2(Test_S602C2, "S602C2", ABISELECT(392,308));

#else // __cplusplus

extern void _ZN6S602C2C1Ev();
extern void _ZN6S602C2D1Ev();
Name_Map name_map_S602C2[] = {
  NSPAIR(_ZN6S602C2C1Ev),
  NSPAIR(_ZN6S602C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S602C5;
extern VTBL_ENTRY _ZTI6S602C5[];
extern  VTBL_ENTRY _ZTV6S602C5[];
extern Class_Descriptor cd_S602C4;
extern VTBL_ENTRY _ZTI6S602C4[];
extern  VTBL_ENTRY _ZTV6S602C4[];
extern Class_Descriptor cd_S602C3;
extern VTBL_ENTRY _ZTI6S602C3[];
extern  VTBL_ENTRY _ZTV6S602C3[];
static Base_Class bases_S602C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S602C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S602C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S602C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S602C2[];
extern void _ZN6S602C2D1Ev();
extern void _ZN6S602C2D0Ev();
extern void _ZN6S602C52v5Ev();
extern void _ZN6S602C52v6Ev();
extern void _ZN6S602C52v7Ev();
extern void _ZN6S602C52v8Ev();
extern void _ZN6S602C52v9Ev();
extern void _ZN6S602C53v10Ev();
extern void _ZN6S602C53v11Ev();
extern void _ZN6S602C53v12Ev();
extern void _ZN6S602C53v13Ev();
extern void _ZN6S602C53v14Ev();
extern void _ZN6S602C53v15Ev();
extern void _ZN6S602C53v16Ev();
extern void _ZN6S602C53v17Ev();
extern void _ZN6S602C53v18Ev();
extern void _ZN6S602C53v19Ev();
extern void _ZN6S602C43v20Ev();
extern void _ZN6S602C43v21Ev();
extern void _ZN6S602C43v22Ev();
extern void _ZN6S602C43v23Ev();
extern void _ZN6S602C43v24Ev();
extern void _ZN6S602C43v25Ev();
extern void _ZN6S602C43v26Ev();
extern void _ZN6S602C43v27Ev();
extern void _ZN6S602C43v28Ev();
extern void _ZN6S602C43v29Ev();
extern void _ZN6S602C43v30Ev();
extern void _ZN6S602C43v31Ev();
extern void _ZN6S602C43v32Ev();
extern void _ZN6S602C43v33Ev();
extern void _ZN6S602C43v34Ev();
extern void _ZN6S602C33v35Ev();
extern void _ZN6S602C33v36Ev();
extern void _ZN6S602C33v37Ev();
extern void _ZN6S602C33v38Ev();
extern void _ZN6S602C33v39Ev();
extern void _ZN6S602C23v40Ev();
extern void _ZN6S602C23v41Ev();
extern void _ZN6S602C23v42Ev();
extern void _ZN6S602C23v43Ev();
static  VTBL_ENTRY vtc_S602C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S602C2[0]),
  (VTBL_ENTRY)&_ZN6S602C2D1Ev,
  (VTBL_ENTRY)&_ZN6S602C2D0Ev,
  (VTBL_ENTRY)&_ZN6S602C52v5Ev,
  (VTBL_ENTRY)&_ZN6S602C52v6Ev,
  (VTBL_ENTRY)&_ZN6S602C52v7Ev,
  (VTBL_ENTRY)&_ZN6S602C52v8Ev,
  (VTBL_ENTRY)&_ZN6S602C52v9Ev,
  (VTBL_ENTRY)&_ZN6S602C53v10Ev,
  (VTBL_ENTRY)&_ZN6S602C53v11Ev,
  (VTBL_ENTRY)&_ZN6S602C53v12Ev,
  (VTBL_ENTRY)&_ZN6S602C53v13Ev,
  (VTBL_ENTRY)&_ZN6S602C53v14Ev,
  (VTBL_ENTRY)&_ZN6S602C53v15Ev,
  (VTBL_ENTRY)&_ZN6S602C53v16Ev,
  (VTBL_ENTRY)&_ZN6S602C53v17Ev,
  (VTBL_ENTRY)&_ZN6S602C53v18Ev,
  (VTBL_ENTRY)&_ZN6S602C53v19Ev,
  (VTBL_ENTRY)&_ZN6S602C43v20Ev,
  (VTBL_ENTRY)&_ZN6S602C43v21Ev,
  (VTBL_ENTRY)&_ZN6S602C43v22Ev,
  (VTBL_ENTRY)&_ZN6S602C43v23Ev,
  (VTBL_ENTRY)&_ZN6S602C43v24Ev,
  (VTBL_ENTRY)&_ZN6S602C43v25Ev,
  (VTBL_ENTRY)&_ZN6S602C43v26Ev,
  (VTBL_ENTRY)&_ZN6S602C43v27Ev,
  (VTBL_ENTRY)&_ZN6S602C43v28Ev,
  (VTBL_ENTRY)&_ZN6S602C43v29Ev,
  (VTBL_ENTRY)&_ZN6S602C43v30Ev,
  (VTBL_ENTRY)&_ZN6S602C43v31Ev,
  (VTBL_ENTRY)&_ZN6S602C43v32Ev,
  (VTBL_ENTRY)&_ZN6S602C43v33Ev,
  (VTBL_ENTRY)&_ZN6S602C43v34Ev,
  (VTBL_ENTRY)&_ZN6S602C33v35Ev,
  (VTBL_ENTRY)&_ZN6S602C33v36Ev,
  (VTBL_ENTRY)&_ZN6S602C33v37Ev,
  (VTBL_ENTRY)&_ZN6S602C33v38Ev,
  (VTBL_ENTRY)&_ZN6S602C33v39Ev,
  (VTBL_ENTRY)&_ZN6S602C23v40Ev,
  (VTBL_ENTRY)&_ZN6S602C23v41Ev,
  (VTBL_ENTRY)&_ZN6S602C23v42Ev,
  (VTBL_ENTRY)&_ZN6S602C23v43Ev,
};
extern VTBL_ENTRY _ZTI6S602C2[];
extern  VTBL_ENTRY _ZTV6S602C2[];
Class_Descriptor cd_S602C2 = {  "S602C2", // class name
  bases_S602C2, 3,
  &(vtc_S602C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(392,308), // object size
  NSPAIRA(_ZTI6S602C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S602C2),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S602C19  {
  ::S601C20 s602c19f0;
  virtual  ~S602C19(); // _ZN7S602C19D1Ev
  virtual void  v50(); // _ZN7S602C193v50Ev
  virtual void  v51(); // _ZN7S602C193v51Ev
  virtual void  v52(); // _ZN7S602C193v52Ev
  virtual void  v53(); // _ZN7S602C193v53Ev
  virtual void  v54(); // _ZN7S602C193v54Ev
  virtual void  v55(); // _ZN7S602C193v55Ev
  S602C19(); // tgen
};
//SIG(-1 S602C19) C1{ vd v1 v2 v3 v4 v5 v6 FC2{ m Fp[4]}}


 S602C19 ::~S602C19(){ note_dtor("S602C19", this);}
void  S602C19 ::v50(){vfunc_called(this, "_ZN7S602C193v50Ev");}
void  S602C19 ::v51(){vfunc_called(this, "_ZN7S602C193v51Ev");}
void  S602C19 ::v52(){vfunc_called(this, "_ZN7S602C193v52Ev");}
void  S602C19 ::v53(){vfunc_called(this, "_ZN7S602C193v53Ev");}
void  S602C19 ::v54(){vfunc_called(this, "_ZN7S602C193v54Ev");}
void  S602C19 ::v55(){vfunc_called(this, "_ZN7S602C193v55Ev");}
S602C19 ::S602C19(){ note_ctor("S602C19", this);} // tgen

static void Test_S602C19()
{
  extern Class_Descriptor cd_S602C19;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S602C19, buf);
    S602C19 *dp, &lv = *(dp=new (buf) S602C19());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S602C19)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S602C19)");
    check_field_offset(lv, s602c19f0, ABISELECT(8,4), "S602C19.s602c19f0");
    test_class_info(&lv, &cd_S602C19);
    dp->~S602C19();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS602C19(Test_S602C19, "S602C19", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S602C19C1Ev();
extern void _ZN7S602C19D1Ev();
Name_Map name_map_S602C19[] = {
  NSPAIR(_ZN7S602C19C1Ev),
  NSPAIR(_ZN7S602C19D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S602C19[];
extern void _ZN7S602C19D1Ev();
extern void _ZN7S602C19D0Ev();
extern void _ZN7S602C193v50Ev();
extern void _ZN7S602C193v51Ev();
extern void _ZN7S602C193v52Ev();
extern void _ZN7S602C193v53Ev();
extern void _ZN7S602C193v54Ev();
extern void _ZN7S602C193v55Ev();
static  VTBL_ENTRY vtc_S602C19[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S602C19[0]),
  (VTBL_ENTRY)&_ZN7S602C19D1Ev,
  (VTBL_ENTRY)&_ZN7S602C19D0Ev,
  (VTBL_ENTRY)&_ZN7S602C193v50Ev,
  (VTBL_ENTRY)&_ZN7S602C193v51Ev,
  (VTBL_ENTRY)&_ZN7S602C193v52Ev,
  (VTBL_ENTRY)&_ZN7S602C193v53Ev,
  (VTBL_ENTRY)&_ZN7S602C193v54Ev,
  (VTBL_ENTRY)&_ZN7S602C193v55Ev,
};
extern VTBL_ENTRY _ZTI7S602C19[];
extern  VTBL_ENTRY _ZTV7S602C19[];
Class_Descriptor cd_S602C19 = {  "S602C19", // class name
  0,0,//no base classes
  &(vtc_S602C19[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S602C19),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S602C19),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S602C18  : S602C19 , S601C21_nt {
  ::S601C22 s602c18f0;
  ::S601C28 s602c18f1;
  ::S601C28 s602c18f2;
  virtual void  v44(); // _ZN7S602C183v44Ev
  virtual void  v45(); // _ZN7S602C183v45Ev
  virtual void  v46(); // _ZN7S602C183v46Ev
  virtual void  v47(); // _ZN7S602C183v47Ev
  virtual void  v48(); // _ZN7S602C183v48Ev
  virtual void  v49(); // _ZN7S602C183v49Ev
  ~S602C18(); // tgen
  S602C18(); // tgen
};
//SIG(-1 S602C18) C1{ BC2{ vd v7 v8 v9 v10 v11 v12 FC3{ m Fp[4]}} BC4{} v1 v2 v3 v4 v5 v6 FC5{ BC6{ m Fp Fi Fp Fi[2]} FC7{ m FC8{ m FC9{ m FL[2]}} FC8 FC8 FC8}} FC10{ BC6 FC11{ m FC12{ m FL}}} FC10}


void  S602C18 ::v44(){vfunc_called(this, "_ZN7S602C183v44Ev");}
void  S602C18 ::v45(){vfunc_called(this, "_ZN7S602C183v45Ev");}
void  S602C18 ::v46(){vfunc_called(this, "_ZN7S602C183v46Ev");}
void  S602C18 ::v47(){vfunc_called(this, "_ZN7S602C183v47Ev");}
void  S602C18 ::v48(){vfunc_called(this, "_ZN7S602C183v48Ev");}
void  S602C18 ::v49(){vfunc_called(this, "_ZN7S602C183v49Ev");}
S602C18 ::~S602C18(){ note_dtor("S602C18", this);} // tgen
S602C18 ::S602C18(){ note_ctor("S602C18", this);} // tgen

static void Test_S602C18()
{
  extern Class_Descriptor cd_S602C18;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(28,41)];
    init_test(&cd_S602C18, buf);
    S602C18 *dp, &lv = *(dp=new (buf) S602C18());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(216,160), "sizeof(S602C18)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S602C18)");
    check_base_class_offset(lv, (S602C19*), 0, "S602C18");
    check_base_class_offset(lv, (S601C21_nt*), 0, "S602C18");
    check_field_offset(lv, s602c18f0, ABISELECT(40,20), "S602C18.s602c18f0");
    check_field_offset(lv, s602c18f1, ABISELECT(136,104), "S602C18.s602c18f1");
    check_field_offset(lv, s602c18f2, ABISELECT(176,132), "S602C18.s602c18f2");
    test_class_info(&lv, &cd_S602C18);
    dp->~S602C18();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS602C18(Test_S602C18, "S602C18", ABISELECT(216,160));

#else // __cplusplus

extern void _ZN7S602C18C1Ev();
extern void _ZN7S602C18D1Ev();
Name_Map name_map_S602C18[] = {
  NSPAIR(_ZN7S602C18C1Ev),
  NSPAIR(_ZN7S602C18D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S602C19;
extern VTBL_ENTRY _ZTI7S602C19[];
extern  VTBL_ENTRY _ZTV7S602C19[];
extern Class_Descriptor cd_S601C21_nt;
extern VTBL_ENTRY _ZTI10S601C21_nt[];
static Base_Class bases_S602C18[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S602C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S601C21_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S602C18[];
extern void _ZN7S602C18D1Ev();
extern void _ZN7S602C18D0Ev();
extern void _ZN7S602C193v50Ev();
extern void _ZN7S602C193v51Ev();
extern void _ZN7S602C193v52Ev();
extern void _ZN7S602C193v53Ev();
extern void _ZN7S602C193v54Ev();
extern void _ZN7S602C193v55Ev();
extern void _ZN7S602C183v44Ev();
extern void _ZN7S602C183v45Ev();
extern void _ZN7S602C183v46Ev();
extern void _ZN7S602C183v47Ev();
extern void _ZN7S602C183v48Ev();
extern void _ZN7S602C183v49Ev();
static  VTBL_ENTRY vtc_S602C18[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S602C18[0]),
  (VTBL_ENTRY)&_ZN7S602C18D1Ev,
  (VTBL_ENTRY)&_ZN7S602C18D0Ev,
  (VTBL_ENTRY)&_ZN7S602C193v50Ev,
  (VTBL_ENTRY)&_ZN7S602C193v51Ev,
  (VTBL_ENTRY)&_ZN7S602C193v52Ev,
  (VTBL_ENTRY)&_ZN7S602C193v53Ev,
  (VTBL_ENTRY)&_ZN7S602C193v54Ev,
  (VTBL_ENTRY)&_ZN7S602C193v55Ev,
  (VTBL_ENTRY)&_ZN7S602C183v44Ev,
  (VTBL_ENTRY)&_ZN7S602C183v45Ev,
  (VTBL_ENTRY)&_ZN7S602C183v46Ev,
  (VTBL_ENTRY)&_ZN7S602C183v47Ev,
  (VTBL_ENTRY)&_ZN7S602C183v48Ev,
  (VTBL_ENTRY)&_ZN7S602C183v49Ev,
};
extern VTBL_ENTRY _ZTI7S602C18[];
extern  VTBL_ENTRY _ZTV7S602C18[];
Class_Descriptor cd_S602C18 = {  "S602C18", // class name
  bases_S602C18, 2,
  &(vtc_S602C18[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(216,160), // object size
  NSPAIRA(_ZTI7S602C18),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S602C18),16, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S602C17  {
  ::S602C18 s602c17f0;
  ::S601C32 s602c17f1;
  void  mf602c17(); // _ZN7S602C178mf602c17Ev
};
//SIG(-1 S602C17) C1{ m FC2{ BC3{ vd v7 v8 v9 v10 v11 v12 FC4{ m Fp[4]}} BC5{} v1 v2 v3 v4 v5 v6 FC6{ BC7{ m Fp Fi Fp Fi[2]} FC8{ m FC9{ m FC10{ m FL[2]}} FC9 FC9 FC9}} FC11{ BC7 FC12{ m FC13{ m FL}}} FC11} FC14{ BC15{ BC16{ vd v13} vd v14 Fp[2] FC17{ m FC18{ m Fp Fi[2] FC19{ m}}} FC20{ m Fp[2]}} vd FC21{ m FC22{ Fs[2] Fc[2] Fs}[12] Fi FC23{ Fs[2]}[4] Fi FC24{ m Fp[2]}}}}


void  S602C17 ::mf602c17(){}

static void Test_S602C17()
{
  {
    init_simple_test("S602C17");
    S602C17 lv;
    check2(sizeof(lv), ABISELECT(416,324), "sizeof(S602C17)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S602C17)");
    check_field_offset(lv, s602c17f0, 0, "S602C17.s602c17f0");
    check_field_offset(lv, s602c17f1, ABISELECT(216,160), "S602C17.s602c17f1");
  }
}
static Arrange_To_Call_Me vS602C17(Test_S602C17, "S602C17", ABISELECT(416,324));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S602C42  : S602C19 , S601C21_nt {
  ::S601C45 s602c42f0;
  ::S601C45 s602c42f1;
  ::S601C27 s602c42f2;
  virtual void  v58(); // _ZN7S602C423v58Ev
  virtual void  v59(); // _ZN7S602C423v59Ev
  virtual void  v60(); // _ZN7S602C423v60Ev
  virtual void  v61(); // _ZN7S602C423v61Ev
  virtual void  v62(); // _ZN7S602C423v62Ev
  virtual void  v63(); // _ZN7S602C423v63Ev
  ~S602C42(); // tgen
  S602C42(); // tgen
};
//SIG(-1 S602C42) C1{ BC2{ vd v7 v8 v9 v10 v11 v12 FC3{ m Fp[4]}} BC4{} v1 v2 v3 v4 v5 v6 FC5{ BC6{ m Fp Fi Fp Fi[2]} FC7{ m FC8{ m Fp[2]} FC9{ m Fp}}} FC5 FC10{ BC6 FC11{ m FC12{ m FL[2]}}}}


void  S602C42 ::v58(){vfunc_called(this, "_ZN7S602C423v58Ev");}
void  S602C42 ::v59(){vfunc_called(this, "_ZN7S602C423v59Ev");}
void  S602C42 ::v60(){vfunc_called(this, "_ZN7S602C423v60Ev");}
void  S602C42 ::v61(){vfunc_called(this, "_ZN7S602C423v61Ev");}
void  S602C42 ::v62(){vfunc_called(this, "_ZN7S602C423v62Ev");}
void  S602C42 ::v63(){vfunc_called(this, "_ZN7S602C423v63Ev");}
S602C42 ::~S602C42(){ note_dtor("S602C42", this);} // tgen
S602C42 ::S602C42(){ note_ctor("S602C42", this);} // tgen

static void Test_S602C42()
{
  extern Class_Descriptor cd_S602C42;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(26,31)];
    init_test(&cd_S602C42, buf);
    S602C42 *dp, &lv = *(dp=new (buf) S602C42());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(200,120), "sizeof(S602C42)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S602C42)");
    check_base_class_offset(lv, (S602C19*), 0, "S602C42");
    check_base_class_offset(lv, (S601C21_nt*), 0, "S602C42");
    check_field_offset(lv, s602c42f0, ABISELECT(40,20), "S602C42.s602c42f0");
    check_field_offset(lv, s602c42f1, ABISELECT(96,52), "S602C42.s602c42f1");
    check_field_offset(lv, s602c42f2, ABISELECT(152,84), "S602C42.s602c42f2");
    test_class_info(&lv, &cd_S602C42);
    dp->~S602C42();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS602C42(Test_S602C42, "S602C42", ABISELECT(200,120));

#else // __cplusplus

extern void _ZN7S602C42C1Ev();
extern void _ZN7S602C42D1Ev();
Name_Map name_map_S602C42[] = {
  NSPAIR(_ZN7S602C42C1Ev),
  NSPAIR(_ZN7S602C42D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S602C19;
extern VTBL_ENTRY _ZTI7S602C19[];
extern  VTBL_ENTRY _ZTV7S602C19[];
extern Class_Descriptor cd_S601C21_nt;
extern VTBL_ENTRY _ZTI10S601C21_nt[];
static Base_Class bases_S602C42[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S602C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S601C21_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S602C42[];
extern void _ZN7S602C42D1Ev();
extern void _ZN7S602C42D0Ev();
extern void _ZN7S602C193v50Ev();
extern void _ZN7S602C193v51Ev();
extern void _ZN7S602C193v52Ev();
extern void _ZN7S602C193v53Ev();
extern void _ZN7S602C193v54Ev();
extern void _ZN7S602C193v55Ev();
extern void _ZN7S602C423v58Ev();
extern void _ZN7S602C423v59Ev();
extern void _ZN7S602C423v60Ev();
extern void _ZN7S602C423v61Ev();
extern void _ZN7S602C423v62Ev();
extern void _ZN7S602C423v63Ev();
static  VTBL_ENTRY vtc_S602C42[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S602C42[0]),
  (VTBL_ENTRY)&_ZN7S602C42D1Ev,
  (VTBL_ENTRY)&_ZN7S602C42D0Ev,
  (VTBL_ENTRY)&_ZN7S602C193v50Ev,
  (VTBL_ENTRY)&_ZN7S602C193v51Ev,
  (VTBL_ENTRY)&_ZN7S602C193v52Ev,
  (VTBL_ENTRY)&_ZN7S602C193v53Ev,
  (VTBL_ENTRY)&_ZN7S602C193v54Ev,
  (VTBL_ENTRY)&_ZN7S602C193v55Ev,
  (VTBL_ENTRY)&_ZN7S602C423v58Ev,
  (VTBL_ENTRY)&_ZN7S602C423v59Ev,
  (VTBL_ENTRY)&_ZN7S602C423v60Ev,
  (VTBL_ENTRY)&_ZN7S602C423v61Ev,
  (VTBL_ENTRY)&_ZN7S602C423v62Ev,
  (VTBL_ENTRY)&_ZN7S602C423v63Ev,
};
extern VTBL_ENTRY _ZTI7S602C42[];
extern  VTBL_ENTRY _ZTV7S602C42[];
Class_Descriptor cd_S602C42 = {  "S602C42", // class name
  bases_S602C42, 2,
  &(vtc_S602C42[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(200,120), // object size
  NSPAIRA(_ZTI7S602C42),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S602C42),16, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S602C41  {
  ::S602C42 s602c41f0;
  ::S601C48 s602c41f1;
  void  mf602c41(); // _ZN7S602C418mf602c41Ev
};
//SIG(-1 S602C41) C1{ m FC2{ BC3{ vd v7 v8 v9 v10 v11 v12 FC4{ m Fp[4]}} BC5{} v1 v2 v3 v4 v5 v6 FC6{ BC7{ m Fp Fi Fp Fi[2]} FC8{ m FC9{ m Fp[2]} FC10{ m Fp}}} FC6 FC11{ BC7 FC12{ m FC13{ m FL[2]}}}} FC14{ BC15{ BC16{ vd v13} vd v14 Fp[2] FC17{ m FC18{ m Fp Fi[2] FC19{ m}}} FC20{ m Fp[2]}} vd FC21{ m Fp Fi FC22{ Fc Fc:4 Fc:4 Fc:4 Fc:4 Fc:4 Fc:4} Fi FC9}}}


void  S602C41 ::mf602c41(){}

static void Test_S602C41()
{
  {
    init_simple_test("S602C41");
    static S602C41 lv;
    check2(sizeof(lv), ABISELECT(304,180), "sizeof(S602C41)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S602C41)");
    check_field_offset(lv, s602c41f0, 0, "S602C41.s602c41f0");
    check_field_offset(lv, s602c41f1, ABISELECT(200,120), "S602C41.s602c41f1");
  }
}
static Arrange_To_Call_Me vS602C41(Test_S602C41, "S602C41", ABISELECT(304,180));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S602C16  {
  ::S602C17 s602c16f0;
  ::S602C41 s602c16f1;
  void  mf602c16(); // _ZN7S602C168mf602c16Ev
};
//SIG(-1 S602C16) C1{ m FC2{ m FC3{ BC4{ vd v7 v8 v9 v10 v11 v12 FC5{ m Fp[4]}} BC6{} v1 v2 v3 v4 v5 v6 FC7{ BC8{ m Fp Fi Fp Fi[2]} FC9{ m FC10{ m FC11{ m FL[2]}} FC10 FC10 FC10}} FC12{ BC8 FC13{ m FC14{ m FL}}} FC12} FC15{ BC16{ BC17{ vd v13} vd v14 Fp[2] FC18{ m FC19{ m Fp Fi[2] FC20{ m}}} FC21{ m Fp[2]}} vd FC22{ m FC23{ Fs[2] Fc[2] Fs}[12] Fi FC24{ Fs[2]}[4] Fi FC25{ m Fp[2]}}}} FC26{ m FC27{ BC4 BC6 v15 v16 v17 v18 v19 v20 FC28{ BC8 FC29{ m FC25 FC30{ m Fp}}} FC28 FC31{ BC8 FC32{ m FC11}}} FC33{ BC34{ BC17 vd v21 Fp[2] FC18 FC35{ m Fp[2]}} vd FC36{ m Fp Fi FC37{ Fc Fc:4 Fc:4 Fc:4 Fc:4 Fc:4 Fc:4} Fi FC25}}}}


void  S602C16 ::mf602c16(){}

static void Test_S602C16()
{
  {
    init_simple_test("S602C16");
    static S602C16 lv;
    check2(sizeof(lv), ABISELECT(720,504), "sizeof(S602C16)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S602C16)");
    check_field_offset(lv, s602c16f0, 0, "S602C16.s602c16f0");
    check_field_offset(lv, s602c16f1, ABISELECT(416,324), "S602C16.s602c16f1");
  }
}
static Arrange_To_Call_Me vS602C16(Test_S602C16, "S602C16", ABISELECT(720,504));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S602C1  : S602C2 {
  ::S602C16 s602c1f0;
  virtual  ~S602C1(); // _ZN6S602C1D1Ev
  virtual void  v1(); // _ZN6S602C12v1Ev
  virtual void  v2(); // _ZN6S602C12v2Ev
  virtual void  v3(); // _ZN6S602C12v3Ev
  virtual void  v4(); // _ZN6S602C12v4Ev
  S602C1(); // tgen
};
//SIG(1 S602C1) C1{ BC2{ BC3{ BC4{ BC5{ vd v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 FC6{ m FC7{ m FL[2]}} FC6 Fp Fi FU8{ m FC9{ Fi:4 Fi:4 Fi:4 Fi:2 Fi:1 Fi:17} Fi} Fi:2 Fi:2 Fc:1 Fc:1 FC10{ m Fp Fp} FC11{ Fp Fp}[2]} vd v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc Fi[2] Fi[2] Fp FC6 FC6 FC6 FC12{ m FC6 FC6} Fp Fi Fi FC13{ m Fp}[4] Fp} vd v35 v36 v37 v38 v39 FC13 FC13 FC13 FC13 FC6 FC6 FC6 FC6 FC14{ m FC15{ m FL FL}}} vd v40 v41 v42 v43} vd v1 v2 v3 v4 FC16{ m FC17{ m FC18{ BC19{ vd v50 v51 v52 v53 v54 v55 FC20{ m Fp Fp Fp Fp}} BC21{} v44 v45 v46 v47 v48 v49 FC22{ BC23{ m Fp Fi Fp Fi Fi} FC24{ m FC6 FC6 FC6 FC6}} FC25{ BC23 FC26{ m FC27{ m FL}}} FC25} FC28{ BC29{ BC30{ vd v56} vd v57 Fp Fp FC31{ m FC32{ m Fp Fi Fi FC33{ m}}} FC34{ m Fp Fp}} vd FC35{ m FC36{ Fs Fs Fc Fc Fs}[12] Fi FC37{ Fs Fs}[4] Fi FC38{ m Fp Fp}}}} FC39{ m FC40{ BC19 BC21 v58 v59 v60 v61 v62 v63 FC41{ BC23 FC42{ m FC38 FC13}} FC41 FC43{ BC23 FC44{ m FC7}}} FC45{ BC46{ BC30 vd v64 Fp Fp FC31 FC10} vd FC47{ m Fp Fi FC48{ Fc Fc:4 Fc:4 Fc:4 Fc:4 Fc:4 Fc:4} Fi FC38}}}}}


 S602C1 ::~S602C1(){ note_dtor("S602C1", this);}
void  S602C1 ::v1(){vfunc_called(this, "_ZN6S602C12v1Ev");}
void  S602C1 ::v2(){vfunc_called(this, "_ZN6S602C12v2Ev");}
void  S602C1 ::v3(){vfunc_called(this, "_ZN6S602C12v3Ev");}
void  S602C1 ::v4(){vfunc_called(this, "_ZN6S602C12v4Ev");}
S602C1 ::S602C1(){ note_ctor("S602C1", this);} // tgen

static void Test_S602C1()
{
  extern Class_Descriptor cd_S602C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(140,204)];
    init_test(&cd_S602C1, buf);
    S602C1 *dp, &lv = *(dp=new (buf) S602C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1112,812), "sizeof(S602C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S602C1)");
    check_base_class_offset(lv, (S602C5*)(S602C4*)(S602C3*)(S602C2*), 0, "S602C1");
    check_base_class_offset(lv, (S602C4*)(S602C3*)(S602C2*), 0, "S602C1");
    check_base_class_offset(lv, (S602C3*)(S602C2*), 0, "S602C1");
    check_base_class_offset(lv, (S602C2*), 0, "S602C1");
    check_field_offset(lv, s602c1f0, ABISELECT(392,308), "S602C1.s602c1f0");
    test_class_info(&lv, &cd_S602C1);
    dp->~S602C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS602C1(Test_S602C1, "S602C1", ABISELECT(1112,812));

#else // __cplusplus

extern void _ZN6S602C1C1Ev();
extern void _ZN6S602C1D1Ev();
Name_Map name_map_S602C1[] = {
  NSPAIR(_ZN6S602C1C1Ev),
  NSPAIR(_ZN6S602C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S602C5;
extern VTBL_ENTRY _ZTI6S602C5[];
extern  VTBL_ENTRY _ZTV6S602C5[];
extern Class_Descriptor cd_S602C4;
extern VTBL_ENTRY _ZTI6S602C4[];
extern  VTBL_ENTRY _ZTV6S602C4[];
extern Class_Descriptor cd_S602C3;
extern VTBL_ENTRY _ZTI6S602C3[];
extern  VTBL_ENTRY _ZTV6S602C3[];
extern Class_Descriptor cd_S602C2;
extern VTBL_ENTRY _ZTI6S602C2[];
extern  VTBL_ENTRY _ZTV6S602C2[];
static Base_Class bases_S602C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S602C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S602C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S602C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S602C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S602C1[];
extern void _ZN6S602C1D1Ev();
extern void _ZN6S602C1D0Ev();
extern void _ZN6S602C52v5Ev();
extern void _ZN6S602C52v6Ev();
extern void _ZN6S602C52v7Ev();
extern void _ZN6S602C52v8Ev();
extern void _ZN6S602C52v9Ev();
extern void _ZN6S602C53v10Ev();
extern void _ZN6S602C53v11Ev();
extern void _ZN6S602C53v12Ev();
extern void _ZN6S602C53v13Ev();
extern void _ZN6S602C53v14Ev();
extern void _ZN6S602C53v15Ev();
extern void _ZN6S602C53v16Ev();
extern void _ZN6S602C53v17Ev();
extern void _ZN6S602C53v18Ev();
extern void _ZN6S602C53v19Ev();
extern void _ZN6S602C43v20Ev();
extern void _ZN6S602C43v21Ev();
extern void _ZN6S602C43v22Ev();
extern void _ZN6S602C43v23Ev();
extern void _ZN6S602C43v24Ev();
extern void _ZN6S602C43v25Ev();
extern void _ZN6S602C43v26Ev();
extern void _ZN6S602C43v27Ev();
extern void _ZN6S602C43v28Ev();
extern void _ZN6S602C43v29Ev();
extern void _ZN6S602C43v30Ev();
extern void _ZN6S602C43v31Ev();
extern void _ZN6S602C43v32Ev();
extern void _ZN6S602C43v33Ev();
extern void _ZN6S602C43v34Ev();
extern void _ZN6S602C33v35Ev();
extern void _ZN6S602C33v36Ev();
extern void _ZN6S602C33v37Ev();
extern void _ZN6S602C33v38Ev();
extern void _ZN6S602C33v39Ev();
extern void _ZN6S602C23v40Ev();
extern void _ZN6S602C23v41Ev();
extern void _ZN6S602C23v42Ev();
extern void _ZN6S602C23v43Ev();
extern void _ZN6S602C12v1Ev();
extern void _ZN6S602C12v2Ev();
extern void _ZN6S602C12v3Ev();
extern void _ZN6S602C12v4Ev();
static  VTBL_ENTRY vtc_S602C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S602C1[0]),
  (VTBL_ENTRY)&_ZN6S602C1D1Ev,
  (VTBL_ENTRY)&_ZN6S602C1D0Ev,
  (VTBL_ENTRY)&_ZN6S602C52v5Ev,
  (VTBL_ENTRY)&_ZN6S602C52v6Ev,
  (VTBL_ENTRY)&_ZN6S602C52v7Ev,
  (VTBL_ENTRY)&_ZN6S602C52v8Ev,
  (VTBL_ENTRY)&_ZN6S602C52v9Ev,
  (VTBL_ENTRY)&_ZN6S602C53v10Ev,
  (VTBL_ENTRY)&_ZN6S602C53v11Ev,
  (VTBL_ENTRY)&_ZN6S602C53v12Ev,
  (VTBL_ENTRY)&_ZN6S602C53v13Ev,
  (VTBL_ENTRY)&_ZN6S602C53v14Ev,
  (VTBL_ENTRY)&_ZN6S602C53v15Ev,
  (VTBL_ENTRY)&_ZN6S602C53v16Ev,
  (VTBL_ENTRY)&_ZN6S602C53v17Ev,
  (VTBL_ENTRY)&_ZN6S602C53v18Ev,
  (VTBL_ENTRY)&_ZN6S602C53v19Ev,
  (VTBL_ENTRY)&_ZN6S602C43v20Ev,
  (VTBL_ENTRY)&_ZN6S602C43v21Ev,
  (VTBL_ENTRY)&_ZN6S602C43v22Ev,
  (VTBL_ENTRY)&_ZN6S602C43v23Ev,
  (VTBL_ENTRY)&_ZN6S602C43v24Ev,
  (VTBL_ENTRY)&_ZN6S602C43v25Ev,
  (VTBL_ENTRY)&_ZN6S602C43v26Ev,
  (VTBL_ENTRY)&_ZN6S602C43v27Ev,
  (VTBL_ENTRY)&_ZN6S602C43v28Ev,
  (VTBL_ENTRY)&_ZN6S602C43v29Ev,
  (VTBL_ENTRY)&_ZN6S602C43v30Ev,
  (VTBL_ENTRY)&_ZN6S602C43v31Ev,
  (VTBL_ENTRY)&_ZN6S602C43v32Ev,
  (VTBL_ENTRY)&_ZN6S602C43v33Ev,
  (VTBL_ENTRY)&_ZN6S602C43v34Ev,
  (VTBL_ENTRY)&_ZN6S602C33v35Ev,
  (VTBL_ENTRY)&_ZN6S602C33v36Ev,
  (VTBL_ENTRY)&_ZN6S602C33v37Ev,
  (VTBL_ENTRY)&_ZN6S602C33v38Ev,
  (VTBL_ENTRY)&_ZN6S602C33v39Ev,
  (VTBL_ENTRY)&_ZN6S602C23v40Ev,
  (VTBL_ENTRY)&_ZN6S602C23v41Ev,
  (VTBL_ENTRY)&_ZN6S602C23v42Ev,
  (VTBL_ENTRY)&_ZN6S602C23v43Ev,
  (VTBL_ENTRY)&_ZN6S602C12v1Ev,
  (VTBL_ENTRY)&_ZN6S602C12v2Ev,
  (VTBL_ENTRY)&_ZN6S602C12v3Ev,
  (VTBL_ENTRY)&_ZN6S602C12v4Ev,
};
extern VTBL_ENTRY _ZTI6S602C1[];
extern  VTBL_ENTRY _ZTV6S602C1[];
Class_Descriptor cd_S602C1 = {  "S602C1", // class name
  bases_S602C1, 4,
  &(vtc_S602C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1112,812), // object size
  NSPAIRA(_ZTI6S602C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S602C1),47, //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  S603C5  {
  ::S2120C13_nt s603c5f0;
  ::S2120C13_nt s603c5f1;
  void *s603c5f2;
  int s603c5f3;
  ::S601C8 s603c5f4;
  int s603c5f5:2;
  int s603c5f6:2;
  unsigned char s603c5f7:1;
  unsigned char s603c5f8:1;
  ::S601C53 s603c5f9;
  ::S601C11 s603c5f10[2];
  virtual  ~S603C5(); // _ZN6S603C5D1Ev
  virtual void  v5(); // _ZN6S603C52v5Ev
  virtual void  v6(); // _ZN6S603C52v6Ev
  virtual void  v7(); // _ZN6S603C52v7Ev
  virtual void  v8(); // _ZN6S603C52v8Ev
  virtual void  v9(); // _ZN6S603C52v9Ev
  virtual void  v10(); // _ZN6S603C53v10Ev
  virtual void  v11(); // _ZN6S603C53v11Ev
  virtual void  v12(); // _ZN6S603C53v12Ev
  virtual void  v13(); // _ZN6S603C53v13Ev
  virtual void  v14(); // _ZN6S603C53v14Ev
  virtual void  v15(); // _ZN6S603C53v15Ev
  virtual void  v16(); // _ZN6S603C53v16Ev
  virtual void  v17(); // _ZN6S603C53v17Ev
  virtual void  v18(); // _ZN6S603C53v18Ev
  virtual void  v19(); // _ZN6S603C53v19Ev
  S603C5(); // tgen
};
//SIG(-1 S603C5) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 FC2{ m FC3{ m FL[2]}} FC2 Fp Fi FU4{ m FC5{ Fi:4 Fi:4 Fi:4 Fi:2 Fi:1 Fi:17} Fi} Fi:2 Fi:2 Fc:1 Fc:1 FC6{ m Fp Fp} FC7{ Fp Fp}[2]}


 S603C5 ::~S603C5(){ note_dtor("S603C5", this);}
void  S603C5 ::v5(){vfunc_called(this, "_ZN6S603C52v5Ev");}
void  S603C5 ::v6(){vfunc_called(this, "_ZN6S603C52v6Ev");}
void  S603C5 ::v7(){vfunc_called(this, "_ZN6S603C52v7Ev");}
void  S603C5 ::v8(){vfunc_called(this, "_ZN6S603C52v8Ev");}
void  S603C5 ::v9(){vfunc_called(this, "_ZN6S603C52v9Ev");}
void  S603C5 ::v10(){vfunc_called(this, "_ZN6S603C53v10Ev");}
void  S603C5 ::v11(){vfunc_called(this, "_ZN6S603C53v11Ev");}
void  S603C5 ::v12(){vfunc_called(this, "_ZN6S603C53v12Ev");}
void  S603C5 ::v13(){vfunc_called(this, "_ZN6S603C53v13Ev");}
void  S603C5 ::v14(){vfunc_called(this, "_ZN6S603C53v14Ev");}
void  S603C5 ::v15(){vfunc_called(this, "_ZN6S603C53v15Ev");}
void  S603C5 ::v16(){vfunc_called(this, "_ZN6S603C53v16Ev");}
void  S603C5 ::v17(){vfunc_called(this, "_ZN6S603C53v17Ev");}
void  S603C5 ::v18(){vfunc_called(this, "_ZN6S603C53v18Ev");}
void  S603C5 ::v19(){vfunc_called(this, "_ZN6S603C53v19Ev");}
S603C5 ::S603C5(){ note_ctor("S603C5", this);} // tgen

static void Test_S603C5()
{
  extern Class_Descriptor cd_S603C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,20)];
    init_test(&cd_S603C5, buf);
    S603C5 *dp, &lv = *(dp=new (buf) S603C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,76), "sizeof(S603C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S603C5)");
    check_field_offset(lv, s603c5f0, ABISELECT(8,4), "S603C5.s603c5f0");
    check_field_offset(lv, s603c5f1, ABISELECT(24,20), "S603C5.s603c5f1");
    check_field_offset(lv, s603c5f2, ABISELECT(40,36), "S603C5.s603c5f2");
    check_field_offset(lv, s603c5f3, ABISELECT(48,40), "S603C5.s603c5f3");
    check_field_offset(lv, s603c5f4, ABISELECT(52,44), "S603C5.s603c5f4");
    set_bf_and_test(lv, s603c5f5, ABISELECT(56,48), 0, 2, 1, "S603C5");
    set_bf_and_test(lv, s603c5f5, ABISELECT(56,48), 0, 2, hide_sll(1LL<<1), "S603C5");
    set_bf_and_test(lv, s603c5f6, ABISELECT(56,48), 2, 2, 1, "S603C5");
    set_bf_and_test(lv, s603c5f6, ABISELECT(56,48), 2, 2, hide_sll(1LL<<1), "S603C5");
    set_bf_and_test(lv, s603c5f7, ABISELECT(56,48), 4, 1, 1, "S603C5");
    set_bf_and_test(lv, s603c5f8, ABISELECT(56,48), 5, 1, 1, "S603C5");
    check_field_offset(lv, s603c5f9, ABISELECT(64,52), "S603C5.s603c5f9");
    check_field_offset(lv, s603c5f10, ABISELECT(80,60), "S603C5.s603c5f10");
    test_class_info(&lv, &cd_S603C5);
    dp->~S603C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS603C5(Test_S603C5, "S603C5", ABISELECT(112,76));

#else // __cplusplus

extern void _ZN6S603C5C1Ev();
extern void _ZN6S603C5D1Ev();
Name_Map name_map_S603C5[] = {
  NSPAIR(_ZN6S603C5C1Ev),
  NSPAIR(_ZN6S603C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S603C5[];
extern void _ZN6S603C5D1Ev();
extern void _ZN6S603C5D0Ev();
extern void _ZN6S603C52v5Ev();
extern void _ZN6S603C52v6Ev();
extern void _ZN6S603C52v7Ev();
extern void _ZN6S603C52v8Ev();
extern void _ZN6S603C52v9Ev();
extern void _ZN6S603C53v10Ev();
extern void _ZN6S603C53v11Ev();
extern void _ZN6S603C53v12Ev();
extern void _ZN6S603C53v13Ev();
extern void _ZN6S603C53v14Ev();
extern void _ZN6S603C53v15Ev();
extern void _ZN6S603C53v16Ev();
extern void _ZN6S603C53v17Ev();
extern void _ZN6S603C53v18Ev();
extern void _ZN6S603C53v19Ev();
static  VTBL_ENTRY vtc_S603C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S603C5[0]),
  (VTBL_ENTRY)&_ZN6S603C5D1Ev,
  (VTBL_ENTRY)&_ZN6S603C5D0Ev,
  (VTBL_ENTRY)&_ZN6S603C52v5Ev,
  (VTBL_ENTRY)&_ZN6S603C52v6Ev,
  (VTBL_ENTRY)&_ZN6S603C52v7Ev,
  (VTBL_ENTRY)&_ZN6S603C52v8Ev,
  (VTBL_ENTRY)&_ZN6S603C52v9Ev,
  (VTBL_ENTRY)&_ZN6S603C53v10Ev,
  (VTBL_ENTRY)&_ZN6S603C53v11Ev,
  (VTBL_ENTRY)&_ZN6S603C53v12Ev,
  (VTBL_ENTRY)&_ZN6S603C53v13Ev,
  (VTBL_ENTRY)&_ZN6S603C53v14Ev,
  (VTBL_ENTRY)&_ZN6S603C53v15Ev,
  (VTBL_ENTRY)&_ZN6S603C53v16Ev,
  (VTBL_ENTRY)&_ZN6S603C53v17Ev,
  (VTBL_ENTRY)&_ZN6S603C53v18Ev,
  (VTBL_ENTRY)&_ZN6S603C53v19Ev,
};
extern VTBL_ENTRY _ZTI6S603C5[];
extern  VTBL_ENTRY _ZTV6S603C5[];
Class_Descriptor cd_S603C5 = {  "S603C5", // class name
  0,0,//no base classes
  &(vtc_S603C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,76), // object size
  NSPAIRA(_ZTI6S603C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S603C5),19, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S603C4  : S603C5 {
  unsigned char s603c4f0:1;
  unsigned char s603c4f1:1;
  unsigned char s603c4f2:1;
  unsigned char s603c4f3:1;
  unsigned char s603c4f4:1;
  unsigned char s603c4f5:1;
  unsigned char s603c4f6:1;
  char s603c4f7;
  int s603c4f8[2];
  int s603c4f9[2];
  void *s603c4f10;
  ::S2120C13_nt s603c4f11;
  ::S2120C13_nt s603c4f12;
  ::S2120C13_nt s603c4f13;
  ::S601C12 s603c4f14;
  void *s603c4f15;
  int s603c4f16;
  int s603c4f17;
  ::S601C13_nt s603c4f18[4];
  void *s603c4f19;
  virtual  ~S603C4(); // _ZN6S603C4D1Ev
  virtual void  v20(); // _ZN6S603C43v20Ev
  virtual void  v21(); // _ZN6S603C43v21Ev
  virtual void  v22(); // _ZN6S603C43v22Ev
  virtual void  v23(); // _ZN6S603C43v23Ev
  virtual void  v24(); // _ZN6S603C43v24Ev
  virtual void  v25(); // _ZN6S603C43v25Ev
  virtual void  v26(); // _ZN6S603C43v26Ev
  virtual void  v27(); // _ZN6S603C43v27Ev
  virtual void  v28(); // _ZN6S603C43v28Ev
  virtual void  v29(); // _ZN6S603C43v29Ev
  virtual void  v30(); // _ZN6S603C43v30Ev
  virtual void  v31(); // _ZN6S603C43v31Ev
  virtual void  v32(); // _ZN6S603C43v32Ev
  virtual void  v33(); // _ZN6S603C43v33Ev
  virtual void  v34(); // _ZN6S603C43v34Ev
  S603C4(); // tgen
};
//SIG(-1 S603C4) C1{ BC2{ vd v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 FC3{ m FC4{ m FL[2]}} FC3 Fp Fi FU5{ m FC6{ Fi:4 Fi:4 Fi:4 Fi:2 Fi:1 Fi:17} Fi} Fi:2 Fi:2 Fc:1 Fc:1 FC7{ m Fp Fp} FC8{ Fp Fp}[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc Fi[2] Fi[2] Fp FC3 FC3 FC3 FC9{ m FC3 FC3} Fp Fi Fi FC10{ m Fp}[4] Fp}


 S603C4 ::~S603C4(){ note_dtor("S603C4", this);}
void  S603C4 ::v20(){vfunc_called(this, "_ZN6S603C43v20Ev");}
void  S603C4 ::v21(){vfunc_called(this, "_ZN6S603C43v21Ev");}
void  S603C4 ::v22(){vfunc_called(this, "_ZN6S603C43v22Ev");}
void  S603C4 ::v23(){vfunc_called(this, "_ZN6S603C43v23Ev");}
void  S603C4 ::v24(){vfunc_called(this, "_ZN6S603C43v24Ev");}
void  S603C4 ::v25(){vfunc_called(this, "_ZN6S603C43v25Ev");}
void  S603C4 ::v26(){vfunc_called(this, "_ZN6S603C43v26Ev");}
void  S603C4 ::v27(){vfunc_called(this, "_ZN6S603C43v27Ev");}
void  S603C4 ::v28(){vfunc_called(this, "_ZN6S603C43v28Ev");}
void  S603C4 ::v29(){vfunc_called(this, "_ZN6S603C43v29Ev");}
void  S603C4 ::v30(){vfunc_called(this, "_ZN6S603C43v30Ev");}
void  S603C4 ::v31(){vfunc_called(this, "_ZN6S603C43v31Ev");}
void  S603C4 ::v32(){vfunc_called(this, "_ZN6S603C43v32Ev");}
void  S603C4 ::v33(){vfunc_called(this, "_ZN6S603C43v33Ev");}
void  S603C4 ::v34(){vfunc_called(this, "_ZN6S603C43v34Ev");}
S603C4 ::S603C4(){ note_ctor("S603C4", this);} // tgen

static void Test_S603C4()
{
  extern Class_Descriptor cd_S603C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(36,54)];
    init_test(&cd_S603C4, buf);
    S603C4 *dp, &lv = *(dp=new (buf) S603C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(280,212), "sizeof(S603C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S603C4)");
    check_base_class_offset(lv, (S603C5*), 0, "S603C4");
    set_bf_and_test(lv, s603c4f0, ABISELECT(112,76), 0, 1, 1, "S603C4");
    set_bf_and_test(lv, s603c4f1, ABISELECT(112,76), 1, 1, 1, "S603C4");
    set_bf_and_test(lv, s603c4f2, ABISELECT(112,76), 2, 1, 1, "S603C4");
    set_bf_and_test(lv, s603c4f3, ABISELECT(112,76), 3, 1, 1, "S603C4");
    set_bf_and_test(lv, s603c4f4, ABISELECT(112,76), 4, 1, 1, "S603C4");
    set_bf_and_test(lv, s603c4f5, ABISELECT(112,76), 5, 1, 1, "S603C4");
    set_bf_and_test(lv, s603c4f6, ABISELECT(112,76), 6, 1, 1, "S603C4");
    check_field_offset(lv, s603c4f7, ABISELECT(113,77), "S603C4.s603c4f7");
    check_field_offset(lv, s603c4f8, ABISELECT(116,80), "S603C4.s603c4f8");
    check_field_offset(lv, s603c4f9, ABISELECT(124,88), "S603C4.s603c4f9");
    check_field_offset(lv, s603c4f10, ABISELECT(136,96), "S603C4.s603c4f10");
    check_field_offset(lv, s603c4f11, ABISELECT(144,100), "S603C4.s603c4f11");
    check_field_offset(lv, s603c4f12, ABISELECT(160,116), "S603C4.s603c4f12");
    check_field_offset(lv, s603c4f13, ABISELECT(176,132), "S603C4.s603c4f13");
    check_field_offset(lv, s603c4f14, ABISELECT(192,148), "S603C4.s603c4f14");
    check_field_offset(lv, s603c4f15, ABISELECT(224,180), "S603C4.s603c4f15");
    check_field_offset(lv, s603c4f16, ABISELECT(232,184), "S603C4.s603c4f16");
    check_field_offset(lv, s603c4f17, ABISELECT(236,188), "S603C4.s603c4f17");
    check_field_offset(lv, s603c4f18, ABISELECT(240,192), "S603C4.s603c4f18");
    check_field_offset(lv, s603c4f19, ABISELECT(272,208), "S603C4.s603c4f19");
    test_class_info(&lv, &cd_S603C4);
    dp->~S603C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS603C4(Test_S603C4, "S603C4", ABISELECT(280,212));

#else // __cplusplus

extern void _ZN6S603C4C1Ev();
extern void _ZN6S603C4D1Ev();
Name_Map name_map_S603C4[] = {
  NSPAIR(_ZN6S603C4C1Ev),
  NSPAIR(_ZN6S603C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S603C5;
extern VTBL_ENTRY _ZTI6S603C5[];
extern  VTBL_ENTRY _ZTV6S603C5[];
static Base_Class bases_S603C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S603C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S603C4[];
extern void _ZN6S603C4D1Ev();
extern void _ZN6S603C4D0Ev();
extern void _ZN6S603C52v5Ev();
extern void _ZN6S603C52v6Ev();
extern void _ZN6S603C52v7Ev();
extern void _ZN6S603C52v8Ev();
extern void _ZN6S603C52v9Ev();
extern void _ZN6S603C53v10Ev();
extern void _ZN6S603C53v11Ev();
extern void _ZN6S603C53v12Ev();
extern void _ZN6S603C53v13Ev();
extern void _ZN6S603C53v14Ev();
extern void _ZN6S603C53v15Ev();
extern void _ZN6S603C53v16Ev();
extern void _ZN6S603C53v17Ev();
extern void _ZN6S603C53v18Ev();
extern void _ZN6S603C53v19Ev();
extern void _ZN6S603C43v20Ev();
extern void _ZN6S603C43v21Ev();
extern void _ZN6S603C43v22Ev();
extern void _ZN6S603C43v23Ev();
extern void _ZN6S603C43v24Ev();
extern void _ZN6S603C43v25Ev();
extern void _ZN6S603C43v26Ev();
extern void _ZN6S603C43v27Ev();
extern void _ZN6S603C43v28Ev();
extern void _ZN6S603C43v29Ev();
extern void _ZN6S603C43v30Ev();
extern void _ZN6S603C43v31Ev();
extern void _ZN6S603C43v32Ev();
extern void _ZN6S603C43v33Ev();
extern void _ZN6S603C43v34Ev();
static  VTBL_ENTRY vtc_S603C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S603C4[0]),
  (VTBL_ENTRY)&_ZN6S603C4D1Ev,
  (VTBL_ENTRY)&_ZN6S603C4D0Ev,
  (VTBL_ENTRY)&_ZN6S603C52v5Ev,
  (VTBL_ENTRY)&_ZN6S603C52v6Ev,
  (VTBL_ENTRY)&_ZN6S603C52v7Ev,
  (VTBL_ENTRY)&_ZN6S603C52v8Ev,
  (VTBL_ENTRY)&_ZN6S603C52v9Ev,
  (VTBL_ENTRY)&_ZN6S603C53v10Ev,
  (VTBL_ENTRY)&_ZN6S603C53v11Ev,
  (VTBL_ENTRY)&_ZN6S603C53v12Ev,
  (VTBL_ENTRY)&_ZN6S603C53v13Ev,
  (VTBL_ENTRY)&_ZN6S603C53v14Ev,
  (VTBL_ENTRY)&_ZN6S603C53v15Ev,
  (VTBL_ENTRY)&_ZN6S603C53v16Ev,
  (VTBL_ENTRY)&_ZN6S603C53v17Ev,
  (VTBL_ENTRY)&_ZN6S603C53v18Ev,
  (VTBL_ENTRY)&_ZN6S603C53v19Ev,
  (VTBL_ENTRY)&_ZN6S603C43v20Ev,
  (VTBL_ENTRY)&_ZN6S603C43v21Ev,
  (VTBL_ENTRY)&_ZN6S603C43v22Ev,
  (VTBL_ENTRY)&_ZN6S603C43v23Ev,
  (VTBL_ENTRY)&_ZN6S603C43v24Ev,
  (VTBL_ENTRY)&_ZN6S603C43v25Ev,
  (VTBL_ENTRY)&_ZN6S603C43v26Ev,
  (VTBL_ENTRY)&_ZN6S603C43v27Ev,
  (VTBL_ENTRY)&_ZN6S603C43v28Ev,
  (VTBL_ENTRY)&_ZN6S603C43v29Ev,
  (VTBL_ENTRY)&_ZN6S603C43v30Ev,
  (VTBL_ENTRY)&_ZN6S603C43v31Ev,
  (VTBL_ENTRY)&_ZN6S603C43v32Ev,
  (VTBL_ENTRY)&_ZN6S603C43v33Ev,
  (VTBL_ENTRY)&_ZN6S603C43v34Ev,
};
extern VTBL_ENTRY _ZTI6S603C4[];
extern  VTBL_ENTRY _ZTV6S603C4[];
Class_Descriptor cd_S603C4 = {  "S603C4", // class name
  bases_S603C4, 1,
  &(vtc_S603C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(280,212), // object size
  NSPAIRA(_ZTI6S603C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S603C4),34, //virtual function table var
  2, // 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  S603C3  : S603C4 {
  ::S601C13_nt s603c3f0;
  ::S601C13_nt s603c3f1;
  ::S601C13_nt s603c3f2;
  ::S601C13_nt s603c3f3;
  ::S2120C13_nt s603c3f4;
  ::S2120C13_nt s603c3f5;
  ::S2120C13_nt s603c3f6;
  ::S2120C13_nt s603c3f7;
  ::S601C14 s603c3f8;
  virtual  ~S603C3(); // _ZN6S603C3D1Ev
  virtual void  v35(); // _ZN6S603C33v35Ev
  virtual void  v36(); // _ZN6S603C33v36Ev
  virtual void  v37(); // _ZN6S603C33v37Ev
  virtual void  v38(); // _ZN6S603C33v38Ev
  virtual void  v39(); // _ZN6S603C33v39Ev
  S603C3(); // tgen
};
//SIG(-1 S603C3) C1{ BC2{ BC3{ vd v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 FC4{ m FC5{ m FL[2]}} FC4 Fp Fi FU6{ m FC7{ Fi:4 Fi:4 Fi:4 Fi:2 Fi:1 Fi:17} Fi} Fi:2 Fi:2 Fc:1 Fc:1 FC8{ m Fp Fp} FC9{ Fp Fp}[2]} vd v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc Fi[2] Fi[2] Fp FC4 FC4 FC4 FC10{ m FC4 FC4} Fp Fi Fi FC11{ m Fp}[4] Fp} vd v1 v2 v3 v4 v5 FC11 FC11 FC11 FC11 FC4 FC4 FC4 FC4 FC12{ m FC13{ m FL FL}}}


 S603C3 ::~S603C3(){ note_dtor("S603C3", this);}
void  S603C3 ::v35(){vfunc_called(this, "_ZN6S603C33v35Ev");}
void  S603C3 ::v36(){vfunc_called(this, "_ZN6S603C33v36Ev");}
void  S603C3 ::v37(){vfunc_called(this, "_ZN6S603C33v37Ev");}
void  S603C3 ::v38(){vfunc_called(this, "_ZN6S603C33v38Ev");}
void  S603C3 ::v39(){vfunc_called(this, "_ZN6S603C33v39Ev");}
S603C3 ::S603C3(){ note_ctor("S603C3", this);} // tgen

static void Test_S603C3()
{
  extern Class_Descriptor cd_S603C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(50,78)];
    init_test(&cd_S603C3, buf);
    S603C3 *dp, &lv = *(dp=new (buf) S603C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(392,308), "sizeof(S603C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S603C3)");
    check_base_class_offset(lv, (S603C5*)(S603C4*), 0, "S603C3");
    check_base_class_offset(lv, (S603C4*), 0, "S603C3");
    check_field_offset(lv, s603c3f0, ABISELECT(280,212), "S603C3.s603c3f0");
    check_field_offset(lv, s603c3f1, ABISELECT(288,216), "S603C3.s603c3f1");
    check_field_offset(lv, s603c3f2, ABISELECT(296,220), "S603C3.s603c3f2");
    check_field_offset(lv, s603c3f3, ABISELECT(304,224), "S603C3.s603c3f3");
    check_field_offset(lv, s603c3f4, ABISELECT(312,228), "S603C3.s603c3f4");
    check_field_offset(lv, s603c3f5, ABISELECT(328,244), "S603C3.s603c3f5");
    check_field_offset(lv, s603c3f6, ABISELECT(344,260), "S603C3.s603c3f6");
    check_field_offset(lv, s603c3f7, ABISELECT(360,276), "S603C3.s603c3f7");
    check_field_offset(lv, s603c3f8, ABISELECT(376,292), "S603C3.s603c3f8");
    test_class_info(&lv, &cd_S603C3);
    dp->~S603C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS603C3(Test_S603C3, "S603C3", ABISELECT(392,308));

#else // __cplusplus

extern void _ZN6S603C3C1Ev();
extern void _ZN6S603C3D1Ev();
Name_Map name_map_S603C3[] = {
  NSPAIR(_ZN6S603C3C1Ev),
  NSPAIR(_ZN6S603C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S603C5;
extern VTBL_ENTRY _ZTI6S603C5[];
extern  VTBL_ENTRY _ZTV6S603C5[];
extern Class_Descriptor cd_S603C4;
extern VTBL_ENTRY _ZTI6S603C4[];
extern  VTBL_ENTRY _ZTV6S603C4[];
static Base_Class bases_S603C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S603C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S603C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S603C3[];
extern void _ZN6S603C3D1Ev();
extern void _ZN6S603C3D0Ev();
extern void _ZN6S603C52v5Ev();
extern void _ZN6S603C52v6Ev();
extern void _ZN6S603C52v7Ev();
extern void _ZN6S603C52v8Ev();
extern void _ZN6S603C52v9Ev();
extern void _ZN6S603C53v10Ev();
extern void _ZN6S603C53v11Ev();
extern void _ZN6S603C53v12Ev();
extern void _ZN6S603C53v13Ev();
extern void _ZN6S603C53v14Ev();
extern void _ZN6S603C53v15Ev();
extern void _ZN6S603C53v16Ev();
extern void _ZN6S603C53v17Ev();
extern void _ZN6S603C53v18Ev();
extern void _ZN6S603C53v19Ev();
extern void _ZN6S603C43v20Ev();
extern void _ZN6S603C43v21Ev();
extern void _ZN6S603C43v22Ev();
extern void _ZN6S603C43v23Ev();
extern void _ZN6S603C43v24Ev();
extern void _ZN6S603C43v25Ev();
extern void _ZN6S603C43v26Ev();
extern void _ZN6S603C43v27Ev();
extern void _ZN6S603C43v28Ev();
extern void _ZN6S603C43v29Ev();
extern void _ZN6S603C43v30Ev();
extern void _ZN6S603C43v31Ev();
extern void _ZN6S603C43v32Ev();
extern void _ZN6S603C43v33Ev();
extern void _ZN6S603C43v34Ev();
extern void _ZN6S603C33v35Ev();
extern void _ZN6S603C33v36Ev();
extern void _ZN6S603C33v37Ev();
extern void _ZN6S603C33v38Ev();
extern void _ZN6S603C33v39Ev();
static  VTBL_ENTRY vtc_S603C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S603C3[0]),
  (VTBL_ENTRY)&_ZN6S603C3D1Ev,
  (VTBL_ENTRY)&_ZN6S603C3D0Ev,
  (VTBL_ENTRY)&_ZN6S603C52v5Ev,
  (VTBL_ENTRY)&_ZN6S603C52v6Ev,
  (VTBL_ENTRY)&_ZN6S603C52v7Ev,
  (VTBL_ENTRY)&_ZN6S603C52v8Ev,
  (VTBL_ENTRY)&_ZN6S603C52v9Ev,
  (VTBL_ENTRY)&_ZN6S603C53v10Ev,
  (VTBL_ENTRY)&_ZN6S603C53v11Ev,
  (VTBL_ENTRY)&_ZN6S603C53v12Ev,
  (VTBL_ENTRY)&_ZN6S603C53v13Ev,
  (VTBL_ENTRY)&_ZN6S603C53v14Ev,
  (VTBL_ENTRY)&_ZN6S603C53v15Ev,
  (VTBL_ENTRY)&_ZN6S603C53v16Ev,
  (VTBL_ENTRY)&_ZN6S603C53v17Ev,
  (VTBL_ENTRY)&_ZN6S603C53v18Ev,
  (VTBL_ENTRY)&_ZN6S603C53v19Ev,
  (VTBL_ENTRY)&_ZN6S603C43v20Ev,
  (VTBL_ENTRY)&_ZN6S603C43v21Ev,
  (VTBL_ENTRY)&_ZN6S603C43v22Ev,
  (VTBL_ENTRY)&_ZN6S603C43v23Ev,
  (VTBL_ENTRY)&_ZN6S603C43v24Ev,
  (VTBL_ENTRY)&_ZN6S603C43v25Ev,
  (VTBL_ENTRY)&_ZN6S603C43v26Ev,
  (VTBL_ENTRY)&_ZN6S603C43v27Ev,
  (VTBL_ENTRY)&_ZN6S603C43v28Ev,
  (VTBL_ENTRY)&_ZN6S603C43v29Ev,
  (VTBL_ENTRY)&_ZN6S603C43v30Ev,
  (VTBL_ENTRY)&_ZN6S603C43v31Ev,
  (VTBL_ENTRY)&_ZN6S603C43v32Ev,
  (VTBL_ENTRY)&_ZN6S603C43v33Ev,
  (VTBL_ENTRY)&_ZN6S603C43v34Ev,
  (VTBL_ENTRY)&_ZN6S603C33v35Ev,
  (VTBL_ENTRY)&_ZN6S603C33v36Ev,
  (VTBL_ENTRY)&_ZN6S603C33v37Ev,
  (VTBL_ENTRY)&_ZN6S603C33v38Ev,
  (VTBL_ENTRY)&_ZN6S603C33v39Ev,
};
extern VTBL_ENTRY _ZTI6S603C3[];
extern  VTBL_ENTRY _ZTV6S603C3[];
Class_Descriptor cd_S603C3 = {  "S603C3", // class name
  bases_S603C3, 2,
  &(vtc_S603C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(392,308), // object size
  NSPAIRA(_ZTI6S603C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S603C3),39, //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  S603C2  : S603C3 {
  virtual  ~S603C2(); // _ZN6S603C2D1Ev
  virtual void  v40(); // _ZN6S603C23v40Ev
  virtual void  v41(); // _ZN6S603C23v41Ev
  virtual void  v42(); // _ZN6S603C23v42Ev
  virtual void  v43(); // _ZN6S603C23v43Ev
  S603C2(); // tgen
};
//SIG(-1 S603C2) C1{ BC2{ BC3{ BC4{ vd v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 FC5{ m FC6{ m FL[2]}} FC5 Fp Fi FU7{ m FC8{ Fi:4 Fi:4 Fi:4 Fi:2 Fi:1 Fi:17} Fi} Fi:2 Fi:2 Fc:1 Fc:1 FC9{ m Fp Fp} FC10{ Fp Fp}[2]} vd v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc Fi[2] Fi[2] Fp FC5 FC5 FC5 FC11{ m FC5 FC5} Fp Fi Fi FC12{ m Fp}[4] Fp} vd v35 v36 v37 v38 v39 FC12 FC12 FC12 FC12 FC5 FC5 FC5 FC5 FC13{ m FC14{ m FL FL}}} vd v1 v2 v3 v4}


 S603C2 ::~S603C2(){ note_dtor("S603C2", this);}
void  S603C2 ::v40(){vfunc_called(this, "_ZN6S603C23v40Ev");}
void  S603C2 ::v41(){vfunc_called(this, "_ZN6S603C23v41Ev");}
void  S603C2 ::v42(){vfunc_called(this, "_ZN6S603C23v42Ev");}
void  S603C2 ::v43(){vfunc_called(this, "_ZN6S603C23v43Ev");}
S603C2 ::S603C2(){ note_ctor("S603C2", this);} // tgen

static void Test_S603C2()
{
  extern Class_Descriptor cd_S603C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(50,78)];
    init_test(&cd_S603C2, buf);
    S603C2 *dp, &lv = *(dp=new (buf) S603C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(392,308), "sizeof(S603C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S603C2)");
    check_base_class_offset(lv, (S603C5*)(S603C4*)(S603C3*), 0, "S603C2");
    check_base_class_offset(lv, (S603C4*)(S603C3*), 0, "S603C2");
    check_base_class_offset(lv, (S603C3*), 0, "S603C2");
    test_class_info(&lv, &cd_S603C2);
    dp->~S603C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS603C2(Test_S603C2, "S603C2", ABISELECT(392,308));

#else // __cplusplus

extern void _ZN6S603C2C1Ev();
extern void _ZN6S603C2D1Ev();
Name_Map name_map_S603C2[] = {
  NSPAIR(_ZN6S603C2C1Ev),
  NSPAIR(_ZN6S603C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S603C5;
extern VTBL_ENTRY _ZTI6S603C5[];
extern  VTBL_ENTRY _ZTV6S603C5[];
extern Class_Descriptor cd_S603C4;
extern VTBL_ENTRY _ZTI6S603C4[];
extern  VTBL_ENTRY _ZTV6S603C4[];
extern Class_Descriptor cd_S603C3;
extern VTBL_ENTRY _ZTI6S603C3[];
extern  VTBL_ENTRY _ZTV6S603C3[];
static Base_Class bases_S603C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S603C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S603C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S603C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S603C2[];
extern void _ZN6S603C2D1Ev();
extern void _ZN6S603C2D0Ev();
extern void _ZN6S603C52v5Ev();
extern void _ZN6S603C52v6Ev();
extern void _ZN6S603C52v7Ev();
extern void _ZN6S603C52v8Ev();
extern void _ZN6S603C52v9Ev();
extern void _ZN6S603C53v10Ev();
extern void _ZN6S603C53v11Ev();
extern void _ZN6S603C53v12Ev();
extern void _ZN6S603C53v13Ev();
extern void _ZN6S603C53v14Ev();
extern void _ZN6S603C53v15Ev();
extern void _ZN6S603C53v16Ev();
extern void _ZN6S603C53v17Ev();
extern void _ZN6S603C53v18Ev();
extern void _ZN6S603C53v19Ev();
extern void _ZN6S603C43v20Ev();
extern void _ZN6S603C43v21Ev();
extern void _ZN6S603C43v22Ev();
extern void _ZN6S603C43v23Ev();
extern void _ZN6S603C43v24Ev();
extern void _ZN6S603C43v25Ev();
extern void _ZN6S603C43v26Ev();
extern void _ZN6S603C43v27Ev();
extern void _ZN6S603C43v28Ev();
extern void _ZN6S603C43v29Ev();
extern void _ZN6S603C43v30Ev();
extern void _ZN6S603C43v31Ev();
extern void _ZN6S603C43v32Ev();
extern void _ZN6S603C43v33Ev();
extern void _ZN6S603C43v34Ev();
extern void _ZN6S603C33v35Ev();
extern void _ZN6S603C33v36Ev();
extern void _ZN6S603C33v37Ev();
extern void _ZN6S603C33v38Ev();
extern void _ZN6S603C33v39Ev();
extern void _ZN6S603C23v40Ev();
extern void _ZN6S603C23v41Ev();
extern void _ZN6S603C23v42Ev();
extern void _ZN6S603C23v43Ev();
static  VTBL_ENTRY vtc_S603C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S603C2[0]),
  (VTBL_ENTRY)&_ZN6S603C2D1Ev,
  (VTBL_ENTRY)&_ZN6S603C2D0Ev,
  (VTBL_ENTRY)&_ZN6S603C52v5Ev,
  (VTBL_ENTRY)&_ZN6S603C52v6Ev,
  (VTBL_ENTRY)&_ZN6S603C52v7Ev,
  (VTBL_ENTRY)&_ZN6S603C52v8Ev,
  (VTBL_ENTRY)&_ZN6S603C52v9Ev,
  (VTBL_ENTRY)&_ZN6S603C53v10Ev,
  (VTBL_ENTRY)&_ZN6S603C53v11Ev,
  (VTBL_ENTRY)&_ZN6S603C53v12Ev,
  (VTBL_ENTRY)&_ZN6S603C53v13Ev,
  (VTBL_ENTRY)&_ZN6S603C53v14Ev,
  (VTBL_ENTRY)&_ZN6S603C53v15Ev,
  (VTBL_ENTRY)&_ZN6S603C53v16Ev,
  (VTBL_ENTRY)&_ZN6S603C53v17Ev,
  (VTBL_ENTRY)&_ZN6S603C53v18Ev,
  (VTBL_ENTRY)&_ZN6S603C53v19Ev,
  (VTBL_ENTRY)&_ZN6S603C43v20Ev,
  (VTBL_ENTRY)&_ZN6S603C43v21Ev,
  (VTBL_ENTRY)&_ZN6S603C43v22Ev,
  (VTBL_ENTRY)&_ZN6S603C43v23Ev,
  (VTBL_ENTRY)&_ZN6S603C43v24Ev,
  (VTBL_ENTRY)&_ZN6S603C43v25Ev,
  (VTBL_ENTRY)&_ZN6S603C43v26Ev,
  (VTBL_ENTRY)&_ZN6S603C43v27Ev,
  (VTBL_ENTRY)&_ZN6S603C43v28Ev,
  (VTBL_ENTRY)&_ZN6S603C43v29Ev,
  (VTBL_ENTRY)&_ZN6S603C43v30Ev,
  (VTBL_ENTRY)&_ZN6S603C43v31Ev,
  (VTBL_ENTRY)&_ZN6S603C43v32Ev,
  (VTBL_ENTRY)&_ZN6S603C43v33Ev,
  (VTBL_ENTRY)&_ZN6S603C43v34Ev,
  (VTBL_ENTRY)&_ZN6S603C33v35Ev,
  (VTBL_ENTRY)&_ZN6S603C33v36Ev,
  (VTBL_ENTRY)&_ZN6S603C33v37Ev,
  (VTBL_ENTRY)&_ZN6S603C33v38Ev,
  (VTBL_ENTRY)&_ZN6S603C33v39Ev,
  (VTBL_ENTRY)&_ZN6S603C23v40Ev,
  (VTBL_ENTRY)&_ZN6S603C23v41Ev,
  (VTBL_ENTRY)&_ZN6S603C23v42Ev,
  (VTBL_ENTRY)&_ZN6S603C23v43Ev,
};
extern VTBL_ENTRY _ZTI6S603C2[];
extern  VTBL_ENTRY _ZTV6S603C2[];
Class_Descriptor cd_S603C2 = {  "S603C2", // class name
  bases_S603C2, 3,
  &(vtc_S603C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(392,308), // object size
  NSPAIRA(_ZTI6S603C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S603C2),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S603C19  {
  ::S601C20 s603c19f0;
  virtual  ~S603C19(); // _ZN7S603C19D1Ev
  virtual void  v50(); // _ZN7S603C193v50Ev
  virtual void  v51(); // _ZN7S603C193v51Ev
  virtual void  v52(); // _ZN7S603C193v52Ev
  virtual void  v53(); // _ZN7S603C193v53Ev
  virtual void  v54(); // _ZN7S603C193v54Ev
  virtual void  v55(); // _ZN7S603C193v55Ev
  S603C19(); // tgen
};
//SIG(-1 S603C19) C1{ vd v1 v2 v3 v4 v5 v6 FC2{ m Fp[4]}}


 S603C19 ::~S603C19(){ note_dtor("S603C19", this);}
void  S603C19 ::v50(){vfunc_called(this, "_ZN7S603C193v50Ev");}
void  S603C19 ::v51(){vfunc_called(this, "_ZN7S603C193v51Ev");}
void  S603C19 ::v52(){vfunc_called(this, "_ZN7S603C193v52Ev");}
void  S603C19 ::v53(){vfunc_called(this, "_ZN7S603C193v53Ev");}
void  S603C19 ::v54(){vfunc_called(this, "_ZN7S603C193v54Ev");}
void  S603C19 ::v55(){vfunc_called(this, "_ZN7S603C193v55Ev");}
S603C19 ::S603C19(){ note_ctor("S603C19", this);} // tgen

static void Test_S603C19()
{
  extern Class_Descriptor cd_S603C19;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S603C19, buf);
    S603C19 *dp, &lv = *(dp=new (buf) S603C19());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S603C19)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S603C19)");
    check_field_offset(lv, s603c19f0, ABISELECT(8,4), "S603C19.s603c19f0");
    test_class_info(&lv, &cd_S603C19);
    dp->~S603C19();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS603C19(Test_S603C19, "S603C19", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S603C19C1Ev();
extern void _ZN7S603C19D1Ev();
Name_Map name_map_S603C19[] = {
  NSPAIR(_ZN7S603C19C1Ev),
  NSPAIR(_ZN7S603C19D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S603C19[];
extern void _ZN7S603C19D1Ev();
extern void _ZN7S603C19D0Ev();
extern void _ZN7S603C193v50Ev();
extern void _ZN7S603C193v51Ev();
extern void _ZN7S603C193v52Ev();
extern void _ZN7S603C193v53Ev();
extern void _ZN7S603C193v54Ev();
extern void _ZN7S603C193v55Ev();
static  VTBL_ENTRY vtc_S603C19[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S603C19[0]),
  (VTBL_ENTRY)&_ZN7S603C19D1Ev,
  (VTBL_ENTRY)&_ZN7S603C19D0Ev,
  (VTBL_ENTRY)&_ZN7S603C193v50Ev,
  (VTBL_ENTRY)&_ZN7S603C193v51Ev,
  (VTBL_ENTRY)&_ZN7S603C193v52Ev,
  (VTBL_ENTRY)&_ZN7S603C193v53Ev,
  (VTBL_ENTRY)&_ZN7S603C193v54Ev,
  (VTBL_ENTRY)&_ZN7S603C193v55Ev,
};
extern VTBL_ENTRY _ZTI7S603C19[];
extern  VTBL_ENTRY _ZTV7S603C19[];
Class_Descriptor cd_S603C19 = {  "S603C19", // class name
  0,0,//no base classes
  &(vtc_S603C19[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S603C19),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S603C19),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S603C42  : S603C19 , S601C21_nt {
  ::S601C45 s603c42f0;
  ::S601C27 s603c42f1;
  virtual void  v58(); // _ZN7S603C423v58Ev
  virtual void  v59(); // _ZN7S603C423v59Ev
  virtual void  v60(); // _ZN7S603C423v60Ev
  virtual void  v61(); // _ZN7S603C423v61Ev
  virtual void  v62(); // _ZN7S603C423v62Ev
  virtual void  v63(); // _ZN7S603C423v63Ev
  ~S603C42(); // tgen
  S603C42(); // tgen
};
//SIG(-1 S603C42) C1{ BC2{ vd v7 v8 v9 v10 v11 v12 FC3{ m Fp[4]}} BC4{} v1 v2 v3 v4 v5 v6 FC5{ BC6{ m Fp Fi Fp Fi[2]} FC7{ m FC8{ m Fp[2]} FC9{ m Fp}}} FC10{ BC6 FC11{ m FC12{ m FL[2]}}}}


void  S603C42 ::v58(){vfunc_called(this, "_ZN7S603C423v58Ev");}
void  S603C42 ::v59(){vfunc_called(this, "_ZN7S603C423v59Ev");}
void  S603C42 ::v60(){vfunc_called(this, "_ZN7S603C423v60Ev");}
void  S603C42 ::v61(){vfunc_called(this, "_ZN7S603C423v61Ev");}
void  S603C42 ::v62(){vfunc_called(this, "_ZN7S603C423v62Ev");}
void  S603C42 ::v63(){vfunc_called(this, "_ZN7S603C423v63Ev");}
S603C42 ::~S603C42(){ note_dtor("S603C42", this);} // tgen
S603C42 ::S603C42(){ note_ctor("S603C42", this);} // tgen

static void Test_S603C42()
{
  extern Class_Descriptor cd_S603C42;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(19,23)];
    init_test(&cd_S603C42, buf);
    S603C42 *dp, &lv = *(dp=new (buf) S603C42());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,88), "sizeof(S603C42)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S603C42)");
    check_base_class_offset(lv, (S603C19*), 0, "S603C42");
    check_base_class_offset(lv, (S601C21_nt*), 0, "S603C42");
    check_field_offset(lv, s603c42f0, ABISELECT(40,20), "S603C42.s603c42f0");
    check_field_offset(lv, s603c42f1, ABISELECT(96,52), "S603C42.s603c42f1");
    test_class_info(&lv, &cd_S603C42);
    dp->~S603C42();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS603C42(Test_S603C42, "S603C42", ABISELECT(144,88));

#else // __cplusplus

extern void _ZN7S603C42C1Ev();
extern void _ZN7S603C42D1Ev();
Name_Map name_map_S603C42[] = {
  NSPAIR(_ZN7S603C42C1Ev),
  NSPAIR(_ZN7S603C42D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S603C19;
extern VTBL_ENTRY _ZTI7S603C19[];
extern  VTBL_ENTRY _ZTV7S603C19[];
extern Class_Descriptor cd_S601C21_nt;
extern VTBL_ENTRY _ZTI10S601C21_nt[];
static Base_Class bases_S603C42[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S603C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S601C21_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S603C42[];
extern void _ZN7S603C42D1Ev();
extern void _ZN7S603C42D0Ev();
extern void _ZN7S603C193v50Ev();
extern void _ZN7S603C193v51Ev();
extern void _ZN7S603C193v52Ev();
extern void _ZN7S603C193v53Ev();
extern void _ZN7S603C193v54Ev();
extern void _ZN7S603C193v55Ev();
extern void _ZN7S603C423v58Ev();
extern void _ZN7S603C423v59Ev();
extern void _ZN7S603C423v60Ev();
extern void _ZN7S603C423v61Ev();
extern void _ZN7S603C423v62Ev();
extern void _ZN7S603C423v63Ev();
static  VTBL_ENTRY vtc_S603C42[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S603C42[0]),
  (VTBL_ENTRY)&_ZN7S603C42D1Ev,
  (VTBL_ENTRY)&_ZN7S603C42D0Ev,
  (VTBL_ENTRY)&_ZN7S603C193v50Ev,
  (VTBL_ENTRY)&_ZN7S603C193v51Ev,
  (VTBL_ENTRY)&_ZN7S603C193v52Ev,
  (VTBL_ENTRY)&_ZN7S603C193v53Ev,
  (VTBL_ENTRY)&_ZN7S603C193v54Ev,
  (VTBL_ENTRY)&_ZN7S603C193v55Ev,
  (VTBL_ENTRY)&_ZN7S603C423v58Ev,
  (VTBL_ENTRY)&_ZN7S603C423v59Ev,
  (VTBL_ENTRY)&_ZN7S603C423v60Ev,
  (VTBL_ENTRY)&_ZN7S603C423v61Ev,
  (VTBL_ENTRY)&_ZN7S603C423v62Ev,
  (VTBL_ENTRY)&_ZN7S603C423v63Ev,
};
extern VTBL_ENTRY _ZTI7S603C42[];
extern  VTBL_ENTRY _ZTV7S603C42[];
Class_Descriptor cd_S603C42 = {  "S603C42", // class name
  bases_S603C42, 2,
  &(vtc_S603C42[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(144,88), // object size
  NSPAIRA(_ZTI7S603C42),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S603C42),16, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S603C41  {
  ::S603C42 s603c41f0;
  ::S601C48 s603c41f1;
  void  mf603c41(); // _ZN7S603C418mf603c41Ev
};
//SIG(-1 S603C41) C1{ m FC2{ BC3{ vd v7 v8 v9 v10 v11 v12 FC4{ m Fp[4]}} BC5{} v1 v2 v3 v4 v5 v6 FC6{ BC7{ m Fp Fi Fp Fi[2]} FC8{ m FC9{ m Fp[2]} FC10{ m Fp}}} FC11{ BC7 FC12{ m FC13{ m FL[2]}}}} FC14{ BC15{ BC16{ vd v13} vd v14 Fp[2] FC17{ m FC18{ m Fp Fi[2] FC19{ m}}} FC20{ m Fp[2]}} vd FC21{ m Fp Fi FC22{ Fc Fc:4 Fc:4 Fc:4 Fc:4 Fc:4 Fc:4} Fi FC9}}}


void  S603C41 ::mf603c41(){}

static void Test_S603C41()
{
  {
    init_simple_test("S603C41");
    static S603C41 lv;
    check2(sizeof(lv), ABISELECT(248,148), "sizeof(S603C41)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S603C41)");
    check_field_offset(lv, s603c41f0, 0, "S603C41.s603c41f0");
    check_field_offset(lv, s603c41f1, ABISELECT(144,88), "S603C41.s603c41f1");
  }
}
static Arrange_To_Call_Me vS603C41(Test_S603C41, "S603C41", ABISELECT(248,148));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S603C16  {
  ::S602C17 s603c16f0;
  ::S603C41 s603c16f1;
  void  mf603c16(); // _ZN7S603C168mf603c16Ev
};
//SIG(-1 S603C16) C1{ m FC2{ m FC3{ BC4{ vd v7 v8 v9 v10 v11 v12 FC5{ m Fp[4]}} BC6{} v1 v2 v3 v4 v5 v6 FC7{ BC8{ m Fp Fi Fp Fi[2]} FC9{ m FC10{ m FC11{ m FL[2]}} FC10 FC10 FC10}} FC12{ BC8 FC13{ m FC14{ m FL}}} FC12} FC15{ BC16{ BC17{ vd v13} vd v14 Fp[2] FC18{ m FC19{ m Fp Fi[2] FC20{ m}}} FC21{ m Fp[2]}} vd FC22{ m FC23{ Fs[2] Fc[2] Fs}[12] Fi FC24{ Fs[2]}[4] Fi FC25{ m Fp[2]}}}} FC26{ m FC27{ BC28{ vd v21 v22 v23 v24 v25 v26 FC5} BC6 v15 v16 v17 v18 v19 v20 FC29{ BC8 FC30{ m FC25 FC31{ m Fp}}} FC32{ BC8 FC33{ m FC11}}} FC34{ BC35{ BC17 vd v27 Fp[2] FC18 FC36{ m Fp[2]}} vd FC37{ m Fp Fi FC38{ Fc Fc:4 Fc:4 Fc:4 Fc:4 Fc:4 Fc:4} Fi FC25}}}}


void  S603C16 ::mf603c16(){}

static void Test_S603C16()
{
  {
    init_simple_test("S603C16");
    static S603C16 lv;
    check2(sizeof(lv), ABISELECT(664,472), "sizeof(S603C16)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S603C16)");
    check_field_offset(lv, s603c16f0, 0, "S603C16.s603c16f0");
    check_field_offset(lv, s603c16f1, ABISELECT(416,324), "S603C16.s603c16f1");
  }
}
static Arrange_To_Call_Me vS603C16(Test_S603C16, "S603C16", ABISELECT(664,472));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S603C1  : S603C2 {
  ::S603C16 s603c1f0;
  virtual  ~S603C1(); // _ZN6S603C1D1Ev
  virtual void  v1(); // _ZN6S603C12v1Ev
  virtual void  v2(); // _ZN6S603C12v2Ev
  virtual void  v3(); // _ZN6S603C12v3Ev
  virtual void  v4(); // _ZN6S603C12v4Ev
  S603C1(); // tgen
};
//SIG(1 S603C1) C1{ BC2{ BC3{ BC4{ BC5{ vd v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 FC6{ m FC7{ m FL[2]}} FC6 Fp Fi FU8{ m FC9{ Fi:4 Fi:4 Fi:4 Fi:2 Fi:1 Fi:17} Fi} Fi:2 Fi:2 Fc:1 Fc:1 FC10{ m Fp Fp} FC11{ Fp Fp}[2]} vd v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc Fi[2] Fi[2] Fp FC6 FC6 FC6 FC12{ m FC6 FC6} Fp Fi Fi FC13{ m Fp}[4] Fp} vd v35 v36 v37 v38 v39 FC13 FC13 FC13 FC13 FC6 FC6 FC6 FC6 FC14{ m FC15{ m FL FL}}} vd v40 v41 v42 v43} vd v1 v2 v3 v4 FC16{ m FC17{ m FC18{ BC19{ vd v50 v51 v52 v53 v54 v55 FC20{ m Fp Fp Fp Fp}} BC21{} v44 v45 v46 v47 v48 v49 FC22{ BC23{ m Fp Fi Fp Fi Fi} FC24{ m FC6 FC6 FC6 FC6}} FC25{ BC23 FC26{ m FC27{ m FL}}} FC25} FC28{ BC29{ BC30{ vd v56} vd v57 Fp Fp FC31{ m FC32{ m Fp Fi Fi FC33{ m}}} FC34{ m Fp Fp}} vd FC35{ m FC36{ Fs Fs Fc Fc Fs}[12] Fi FC37{ Fs Fs}[4] Fi FC38{ m Fp Fp}}}} FC39{ m FC40{ BC41{ vd v64 v65 v66 v67 v68 v69 FC20} BC21 v58 v59 v60 v61 v62 v63 FC42{ BC23 FC43{ m FC38 FC13}} FC44{ BC23 FC45{ m FC7}}} FC46{ BC47{ BC30 vd v70 Fp Fp FC31 FC10} vd FC48{ m Fp Fi FC49{ Fc Fc:4 Fc:4 Fc:4 Fc:4 Fc:4 Fc:4} Fi FC38}}}}}


 S603C1 ::~S603C1(){ note_dtor("S603C1", this);}
void  S603C1 ::v1(){vfunc_called(this, "_ZN6S603C12v1Ev");}
void  S603C1 ::v2(){vfunc_called(this, "_ZN6S603C12v2Ev");}
void  S603C1 ::v3(){vfunc_called(this, "_ZN6S603C12v3Ev");}
void  S603C1 ::v4(){vfunc_called(this, "_ZN6S603C12v4Ev");}
S603C1 ::S603C1(){ note_ctor("S603C1", this);} // tgen

static void Test_S603C1()
{
  extern Class_Descriptor cd_S603C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(133,196)];
    init_test(&cd_S603C1, buf);
    S603C1 *dp, &lv = *(dp=new (buf) S603C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1056,780), "sizeof(S603C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S603C1)");
    check_base_class_offset(lv, (S603C5*)(S603C4*)(S603C3*)(S603C2*), 0, "S603C1");
    check_base_class_offset(lv, (S603C4*)(S603C3*)(S603C2*), 0, "S603C1");
    check_base_class_offset(lv, (S603C3*)(S603C2*), 0, "S603C1");
    check_base_class_offset(lv, (S603C2*), 0, "S603C1");
    check_field_offset(lv, s603c1f0, ABISELECT(392,308), "S603C1.s603c1f0");
    test_class_info(&lv, &cd_S603C1);
    dp->~S603C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS603C1(Test_S603C1, "S603C1", ABISELECT(1056,780));

#else // __cplusplus

extern void _ZN6S603C1C1Ev();
extern void _ZN6S603C1D1Ev();
Name_Map name_map_S603C1[] = {
  NSPAIR(_ZN6S603C1C1Ev),
  NSPAIR(_ZN6S603C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S603C5;
extern VTBL_ENTRY _ZTI6S603C5[];
extern  VTBL_ENTRY _ZTV6S603C5[];
extern Class_Descriptor cd_S603C4;
extern VTBL_ENTRY _ZTI6S603C4[];
extern  VTBL_ENTRY _ZTV6S603C4[];
extern Class_Descriptor cd_S603C3;
extern VTBL_ENTRY _ZTI6S603C3[];
extern  VTBL_ENTRY _ZTV6S603C3[];
extern Class_Descriptor cd_S603C2;
extern VTBL_ENTRY _ZTI6S603C2[];
extern  VTBL_ENTRY _ZTV6S603C2[];
static Base_Class bases_S603C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S603C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S603C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S603C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S603C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S603C1[];
extern void _ZN6S603C1D1Ev();
extern void _ZN6S603C1D0Ev();
extern void _ZN6S603C52v5Ev();
extern void _ZN6S603C52v6Ev();
extern void _ZN6S603C52v7Ev();
extern void _ZN6S603C52v8Ev();
extern void _ZN6S603C52v9Ev();
extern void _ZN6S603C53v10Ev();
extern void _ZN6S603C53v11Ev();
extern void _ZN6S603C53v12Ev();
extern void _ZN6S603C53v13Ev();
extern void _ZN6S603C53v14Ev();
extern void _ZN6S603C53v15Ev();
extern void _ZN6S603C53v16Ev();
extern void _ZN6S603C53v17Ev();
extern void _ZN6S603C53v18Ev();
extern void _ZN6S603C53v19Ev();
extern void _ZN6S603C43v20Ev();
extern void _ZN6S603C43v21Ev();
extern void _ZN6S603C43v22Ev();
extern void _ZN6S603C43v23Ev();
extern void _ZN6S603C43v24Ev();
extern void _ZN6S603C43v25Ev();
extern void _ZN6S603C43v26Ev();
extern void _ZN6S603C43v27Ev();
extern void _ZN6S603C43v28Ev();
extern void _ZN6S603C43v29Ev();
extern void _ZN6S603C43v30Ev();
extern void _ZN6S603C43v31Ev();
extern void _ZN6S603C43v32Ev();
extern void _ZN6S603C43v33Ev();
extern void _ZN6S603C43v34Ev();
extern void _ZN6S603C33v35Ev();
extern void _ZN6S603C33v36Ev();
extern void _ZN6S603C33v37Ev();
extern void _ZN6S603C33v38Ev();
extern void _ZN6S603C33v39Ev();
extern void _ZN6S603C23v40Ev();
extern void _ZN6S603C23v41Ev();
extern void _ZN6S603C23v42Ev();
extern void _ZN6S603C23v43Ev();
extern void _ZN6S603C12v1Ev();
extern void _ZN6S603C12v2Ev();
extern void _ZN6S603C12v3Ev();
extern void _ZN6S603C12v4Ev();
static  VTBL_ENTRY vtc_S603C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S603C1[0]),
  (VTBL_ENTRY)&_ZN6S603C1D1Ev,
  (VTBL_ENTRY)&_ZN6S603C1D0Ev,
  (VTBL_ENTRY)&_ZN6S603C52v5Ev,
  (VTBL_ENTRY)&_ZN6S603C52v6Ev,
  (VTBL_ENTRY)&_ZN6S603C52v7Ev,
  (VTBL_ENTRY)&_ZN6S603C52v8Ev,
  (VTBL_ENTRY)&_ZN6S603C52v9Ev,
  (VTBL_ENTRY)&_ZN6S603C53v10Ev,
  (VTBL_ENTRY)&_ZN6S603C53v11Ev,
  (VTBL_ENTRY)&_ZN6S603C53v12Ev,
  (VTBL_ENTRY)&_ZN6S603C53v13Ev,
  (VTBL_ENTRY)&_ZN6S603C53v14Ev,
  (VTBL_ENTRY)&_ZN6S603C53v15Ev,
  (VTBL_ENTRY)&_ZN6S603C53v16Ev,
  (VTBL_ENTRY)&_ZN6S603C53v17Ev,
  (VTBL_ENTRY)&_ZN6S603C53v18Ev,
  (VTBL_ENTRY)&_ZN6S603C53v19Ev,
  (VTBL_ENTRY)&_ZN6S603C43v20Ev,
  (VTBL_ENTRY)&_ZN6S603C43v21Ev,
  (VTBL_ENTRY)&_ZN6S603C43v22Ev,
  (VTBL_ENTRY)&_ZN6S603C43v23Ev,
  (VTBL_ENTRY)&_ZN6S603C43v24Ev,
  (VTBL_ENTRY)&_ZN6S603C43v25Ev,
  (VTBL_ENTRY)&_ZN6S603C43v26Ev,
  (VTBL_ENTRY)&_ZN6S603C43v27Ev,
  (VTBL_ENTRY)&_ZN6S603C43v28Ev,
  (VTBL_ENTRY)&_ZN6S603C43v29Ev,
  (VTBL_ENTRY)&_ZN6S603C43v30Ev,
  (VTBL_ENTRY)&_ZN6S603C43v31Ev,
  (VTBL_ENTRY)&_ZN6S603C43v32Ev,
  (VTBL_ENTRY)&_ZN6S603C43v33Ev,
  (VTBL_ENTRY)&_ZN6S603C43v34Ev,
  (VTBL_ENTRY)&_ZN6S603C33v35Ev,
  (VTBL_ENTRY)&_ZN6S603C33v36Ev,
  (VTBL_ENTRY)&_ZN6S603C33v37Ev,
  (VTBL_ENTRY)&_ZN6S603C33v38Ev,
  (VTBL_ENTRY)&_ZN6S603C33v39Ev,
  (VTBL_ENTRY)&_ZN6S603C23v40Ev,
  (VTBL_ENTRY)&_ZN6S603C23v41Ev,
  (VTBL_ENTRY)&_ZN6S603C23v42Ev,
  (VTBL_ENTRY)&_ZN6S603C23v43Ev,
  (VTBL_ENTRY)&_ZN6S603C12v1Ev,
  (VTBL_ENTRY)&_ZN6S603C12v2Ev,
  (VTBL_ENTRY)&_ZN6S603C12v3Ev,
  (VTBL_ENTRY)&_ZN6S603C12v4Ev,
};
extern VTBL_ENTRY _ZTI6S603C1[];
extern  VTBL_ENTRY _ZTV6S603C1[];
Class_Descriptor cd_S603C1 = {  "S603C1", // class name
  bases_S603C1, 4,
  &(vtc_S603C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1056,780), // object size
  NSPAIRA(_ZTI6S603C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S603C1),47, //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  S600C5  {
  ::S2120C13_nt s600c5f0;
  ::S2120C13_nt s600c5f1;
  void *s600c5f2;
  int s600c5f3;
  ::S601C8 s600c5f4;
  int s600c5f5:2;
  int s600c5f6:2;
  unsigned char s600c5f7:1;
  unsigned char s600c5f8:1;
  ::S601C53 s600c5f9;
  ::S601C11 s600c5f10[2];
  virtual  ~S600C5(); // _ZN6S600C5D1Ev
  virtual void  v5(); // _ZN6S600C52v5Ev
  virtual void  v6(); // _ZN6S600C52v6Ev
  virtual void  v7(); // _ZN6S600C52v7Ev
  virtual void  v8(); // _ZN6S600C52v8Ev
  virtual void  v9(); // _ZN6S600C52v9Ev
  virtual void  v10(); // _ZN6S600C53v10Ev
  virtual void  v11(); // _ZN6S600C53v11Ev
  virtual void  v12(); // _ZN6S600C53v12Ev
  virtual void  v13(); // _ZN6S600C53v13Ev
  virtual void  v14(); // _ZN6S600C53v14Ev
  virtual void  v15(); // _ZN6S600C53v15Ev
  virtual void  v16(); // _ZN6S600C53v16Ev
  virtual void  v17(); // _ZN6S600C53v17Ev
  virtual void  v18(); // _ZN6S600C53v18Ev
  virtual void  v19(); // _ZN6S600C53v19Ev
  S600C5(); // tgen
};
//SIG(-1 S600C5) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 FC2{ m FC3{ m FL[2]}} FC2 Fp Fi FU4{ m FC5{ Fi:4 Fi:4 Fi:4 Fi:2 Fi:1 Fi:17} Fi} Fi:2 Fi:2 Fc:1 Fc:1 FC6{ m Fp Fp} FC7{ Fp Fp}[2]}


 S600C5 ::~S600C5(){ note_dtor("S600C5", this);}
void  S600C5 ::v5(){vfunc_called(this, "_ZN6S600C52v5Ev");}
void  S600C5 ::v6(){vfunc_called(this, "_ZN6S600C52v6Ev");}
void  S600C5 ::v7(){vfunc_called(this, "_ZN6S600C52v7Ev");}
void  S600C5 ::v8(){vfunc_called(this, "_ZN6S600C52v8Ev");}
void  S600C5 ::v9(){vfunc_called(this, "_ZN6S600C52v9Ev");}
void  S600C5 ::v10(){vfunc_called(this, "_ZN6S600C53v10Ev");}
void  S600C5 ::v11(){vfunc_called(this, "_ZN6S600C53v11Ev");}
void  S600C5 ::v12(){vfunc_called(this, "_ZN6S600C53v12Ev");}
void  S600C5 ::v13(){vfunc_called(this, "_ZN6S600C53v13Ev");}
void  S600C5 ::v14(){vfunc_called(this, "_ZN6S600C53v14Ev");}
void  S600C5 ::v15(){vfunc_called(this, "_ZN6S600C53v15Ev");}
void  S600C5 ::v16(){vfunc_called(this, "_ZN6S600C53v16Ev");}
void  S600C5 ::v17(){vfunc_called(this, "_ZN6S600C53v17Ev");}
void  S600C5 ::v18(){vfunc_called(this, "_ZN6S600C53v18Ev");}
void  S600C5 ::v19(){vfunc_called(this, "_ZN6S600C53v19Ev");}
S600C5 ::S600C5(){ note_ctor("S600C5", this);} // tgen

static void Test_S600C5()
{
  extern Class_Descriptor cd_S600C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,20)];
    init_test(&cd_S600C5, buf);
    S600C5 *dp, &lv = *(dp=new (buf) S600C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,76), "sizeof(S600C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S600C5)");
    check_field_offset(lv, s600c5f0, ABISELECT(8,4), "S600C5.s600c5f0");
    check_field_offset(lv, s600c5f1, ABISELECT(24,20), "S600C5.s600c5f1");
    check_field_offset(lv, s600c5f2, ABISELECT(40,36), "S600C5.s600c5f2");
    check_field_offset(lv, s600c5f3, ABISELECT(48,40), "S600C5.s600c5f3");
    check_field_offset(lv, s600c5f4, ABISELECT(52,44), "S600C5.s600c5f4");
    set_bf_and_test(lv, s600c5f5, ABISELECT(56,48), 0, 2, 1, "S600C5");
    set_bf_and_test(lv, s600c5f5, ABISELECT(56,48), 0, 2, hide_sll(1LL<<1), "S600C5");
    set_bf_and_test(lv, s600c5f6, ABISELECT(56,48), 2, 2, 1, "S600C5");
    set_bf_and_test(lv, s600c5f6, ABISELECT(56,48), 2, 2, hide_sll(1LL<<1), "S600C5");
    set_bf_and_test(lv, s600c5f7, ABISELECT(56,48), 4, 1, 1, "S600C5");
    set_bf_and_test(lv, s600c5f8, ABISELECT(56,48), 5, 1, 1, "S600C5");
    check_field_offset(lv, s600c5f9, ABISELECT(64,52), "S600C5.s600c5f9");
    check_field_offset(lv, s600c5f10, ABISELECT(80,60), "S600C5.s600c5f10");
    test_class_info(&lv, &cd_S600C5);
    dp->~S600C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS600C5(Test_S600C5, "S600C5", ABISELECT(112,76));

#else // __cplusplus

extern void _ZN6S600C5C1Ev();
extern void _ZN6S600C5D1Ev();
Name_Map name_map_S600C5[] = {
  NSPAIR(_ZN6S600C5C1Ev),
  NSPAIR(_ZN6S600C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S600C5[];
extern void _ZN6S600C5D1Ev();
extern void _ZN6S600C5D0Ev();
extern void _ZN6S600C52v5Ev();
extern void _ZN6S600C52v6Ev();
extern void _ZN6S600C52v7Ev();
extern void _ZN6S600C52v8Ev();
extern void _ZN6S600C52v9Ev();
extern void _ZN6S600C53v10Ev();
extern void _ZN6S600C53v11Ev();
extern void _ZN6S600C53v12Ev();
extern void _ZN6S600C53v13Ev();
extern void _ZN6S600C53v14Ev();
extern void _ZN6S600C53v15Ev();
extern void _ZN6S600C53v16Ev();
extern void _ZN6S600C53v17Ev();
extern void _ZN6S600C53v18Ev();
extern void _ZN6S600C53v19Ev();
static  VTBL_ENTRY vtc_S600C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S600C5[0]),
  (VTBL_ENTRY)&_ZN6S600C5D1Ev,
  (VTBL_ENTRY)&_ZN6S600C5D0Ev,
  (VTBL_ENTRY)&_ZN6S600C52v5Ev,
  (VTBL_ENTRY)&_ZN6S600C52v6Ev,
  (VTBL_ENTRY)&_ZN6S600C52v7Ev,
  (VTBL_ENTRY)&_ZN6S600C52v8Ev,
  (VTBL_ENTRY)&_ZN6S600C52v9Ev,
  (VTBL_ENTRY)&_ZN6S600C53v10Ev,
  (VTBL_ENTRY)&_ZN6S600C53v11Ev,
  (VTBL_ENTRY)&_ZN6S600C53v12Ev,
  (VTBL_ENTRY)&_ZN6S600C53v13Ev,
  (VTBL_ENTRY)&_ZN6S600C53v14Ev,
  (VTBL_ENTRY)&_ZN6S600C53v15Ev,
  (VTBL_ENTRY)&_ZN6S600C53v16Ev,
  (VTBL_ENTRY)&_ZN6S600C53v17Ev,
  (VTBL_ENTRY)&_ZN6S600C53v18Ev,
  (VTBL_ENTRY)&_ZN6S600C53v19Ev,
};
extern VTBL_ENTRY _ZTI6S600C5[];
extern  VTBL_ENTRY _ZTV6S600C5[];
Class_Descriptor cd_S600C5 = {  "S600C5", // class name
  0,0,//no base classes
  &(vtc_S600C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,76), // object size
  NSPAIRA(_ZTI6S600C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S600C5),19, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S600C4  : S600C5 {
  unsigned char s600c4f0:1;
  unsigned char s600c4f1:1;
  unsigned char s600c4f2:1;
  unsigned char s600c4f3:1;
  unsigned char s600c4f4:1;
  unsigned char s600c4f5:1;
  unsigned char s600c4f6:1;
  char s600c4f7;
  int s600c4f8[2];
  int s600c4f9[2];
  void *s600c4f10;
  ::S2120C13_nt s600c4f11;
  ::S2120C13_nt s600c4f12;
  ::S2120C13_nt s600c4f13;
  ::S601C12 s600c4f14;
  void *s600c4f15;
  int s600c4f16;
  int s600c4f17;
  ::S601C13_nt s600c4f18[4];
  void *s600c4f19;
  virtual  ~S600C4(); // _ZN6S600C4D1Ev
  virtual void  v20(); // _ZN6S600C43v20Ev
  virtual void  v21(); // _ZN6S600C43v21Ev
  virtual void  v22(); // _ZN6S600C43v22Ev
  virtual void  v23(); // _ZN6S600C43v23Ev
  virtual void  v24(); // _ZN6S600C43v24Ev
  virtual void  v25(); // _ZN6S600C43v25Ev
  virtual void  v26(); // _ZN6S600C43v26Ev
  virtual void  v27(); // _ZN6S600C43v27Ev
  virtual void  v28(); // _ZN6S600C43v28Ev
  virtual void  v29(); // _ZN6S600C43v29Ev
  virtual void  v30(); // _ZN6S600C43v30Ev
  virtual void  v31(); // _ZN6S600C43v31Ev
  virtual void  v32(); // _ZN6S600C43v32Ev
  virtual void  v33(); // _ZN6S600C43v33Ev
  virtual void  v34(); // _ZN6S600C43v34Ev
  S600C4(); // tgen
};
//SIG(-1 S600C4) C1{ BC2{ vd v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 FC3{ m FC4{ m FL[2]}} FC3 Fp Fi FU5{ m FC6{ Fi:4 Fi:4 Fi:4 Fi:2 Fi:1 Fi:17} Fi} Fi:2 Fi:2 Fc:1 Fc:1 FC7{ m Fp Fp} FC8{ Fp Fp}[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc Fi[2] Fi[2] Fp FC3 FC3 FC3 FC9{ m FC3 FC3} Fp Fi Fi FC10{ m Fp}[4] Fp}


 S600C4 ::~S600C4(){ note_dtor("S600C4", this);}
void  S600C4 ::v20(){vfunc_called(this, "_ZN6S600C43v20Ev");}
void  S600C4 ::v21(){vfunc_called(this, "_ZN6S600C43v21Ev");}
void  S600C4 ::v22(){vfunc_called(this, "_ZN6S600C43v22Ev");}
void  S600C4 ::v23(){vfunc_called(this, "_ZN6S600C43v23Ev");}
void  S600C4 ::v24(){vfunc_called(this, "_ZN6S600C43v24Ev");}
void  S600C4 ::v25(){vfunc_called(this, "_ZN6S600C43v25Ev");}
void  S600C4 ::v26(){vfunc_called(this, "_ZN6S600C43v26Ev");}
void  S600C4 ::v27(){vfunc_called(this, "_ZN6S600C43v27Ev");}
void  S600C4 ::v28(){vfunc_called(this, "_ZN6S600C43v28Ev");}
void  S600C4 ::v29(){vfunc_called(this, "_ZN6S600C43v29Ev");}
void  S600C4 ::v30(){vfunc_called(this, "_ZN6S600C43v30Ev");}
void  S600C4 ::v31(){vfunc_called(this, "_ZN6S600C43v31Ev");}
void  S600C4 ::v32(){vfunc_called(this, "_ZN6S600C43v32Ev");}
void  S600C4 ::v33(){vfunc_called(this, "_ZN6S600C43v33Ev");}
void  S600C4 ::v34(){vfunc_called(this, "_ZN6S600C43v34Ev");}
S600C4 ::S600C4(){ note_ctor("S600C4", this);} // tgen

static void Test_S600C4()
{
  extern Class_Descriptor cd_S600C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(36,54)];
    init_test(&cd_S600C4, buf);
    S600C4 *dp, &lv = *(dp=new (buf) S600C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(280,212), "sizeof(S600C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S600C4)");
    check_base_class_offset(lv, (S600C5*), 0, "S600C4");
    set_bf_and_test(lv, s600c4f0, ABISELECT(112,76), 0, 1, 1, "S600C4");
    set_bf_and_test(lv, s600c4f1, ABISELECT(112,76), 1, 1, 1, "S600C4");
    set_bf_and_test(lv, s600c4f2, ABISELECT(112,76), 2, 1, 1, "S600C4");
    set_bf_and_test(lv, s600c4f3, ABISELECT(112,76), 3, 1, 1, "S600C4");
    set_bf_and_test(lv, s600c4f4, ABISELECT(112,76), 4, 1, 1, "S600C4");
    set_bf_and_test(lv, s600c4f5, ABISELECT(112,76), 5, 1, 1, "S600C4");
    set_bf_and_test(lv, s600c4f6, ABISELECT(112,76), 6, 1, 1, "S600C4");
    check_field_offset(lv, s600c4f7, ABISELECT(113,77), "S600C4.s600c4f7");
    check_field_offset(lv, s600c4f8, ABISELECT(116,80), "S600C4.s600c4f8");
    check_field_offset(lv, s600c4f9, ABISELECT(124,88), "S600C4.s600c4f9");
    check_field_offset(lv, s600c4f10, ABISELECT(136,96), "S600C4.s600c4f10");
    check_field_offset(lv, s600c4f11, ABISELECT(144,100), "S600C4.s600c4f11");
    check_field_offset(lv, s600c4f12, ABISELECT(160,116), "S600C4.s600c4f12");
    check_field_offset(lv, s600c4f13, ABISELECT(176,132), "S600C4.s600c4f13");
    check_field_offset(lv, s600c4f14, ABISELECT(192,148), "S600C4.s600c4f14");
    check_field_offset(lv, s600c4f15, ABISELECT(224,180), "S600C4.s600c4f15");
    check_field_offset(lv, s600c4f16, ABISELECT(232,184), "S600C4.s600c4f16");
    check_field_offset(lv, s600c4f17, ABISELECT(236,188), "S600C4.s600c4f17");
    check_field_offset(lv, s600c4f18, ABISELECT(240,192), "S600C4.s600c4f18");
    check_field_offset(lv, s600c4f19, ABISELECT(272,208), "S600C4.s600c4f19");
    test_class_info(&lv, &cd_S600C4);
    dp->~S600C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS600C4(Test_S600C4, "S600C4", ABISELECT(280,212));

#else // __cplusplus

extern void _ZN6S600C4C1Ev();
extern void _ZN6S600C4D1Ev();
Name_Map name_map_S600C4[] = {
  NSPAIR(_ZN6S600C4C1Ev),
  NSPAIR(_ZN6S600C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S600C5;
extern VTBL_ENTRY _ZTI6S600C5[];
extern  VTBL_ENTRY _ZTV6S600C5[];
static Base_Class bases_S600C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S600C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S600C4[];
extern void _ZN6S600C4D1Ev();
extern void _ZN6S600C4D0Ev();
extern void _ZN6S600C52v5Ev();
extern void _ZN6S600C52v6Ev();
extern void _ZN6S600C52v7Ev();
extern void _ZN6S600C52v8Ev();
extern void _ZN6S600C52v9Ev();
extern void _ZN6S600C53v10Ev();
extern void _ZN6S600C53v11Ev();
extern void _ZN6S600C53v12Ev();
extern void _ZN6S600C53v13Ev();
extern void _ZN6S600C53v14Ev();
extern void _ZN6S600C53v15Ev();
extern void _ZN6S600C53v16Ev();
extern void _ZN6S600C53v17Ev();
extern void _ZN6S600C53v18Ev();
extern void _ZN6S600C53v19Ev();
extern void _ZN6S600C43v20Ev();
extern void _ZN6S600C43v21Ev();
extern void _ZN6S600C43v22Ev();
extern void _ZN6S600C43v23Ev();
extern void _ZN6S600C43v24Ev();
extern void _ZN6S600C43v25Ev();
extern void _ZN6S600C43v26Ev();
extern void _ZN6S600C43v27Ev();
extern void _ZN6S600C43v28Ev();
extern void _ZN6S600C43v29Ev();
extern void _ZN6S600C43v30Ev();
extern void _ZN6S600C43v31Ev();
extern void _ZN6S600C43v32Ev();
extern void _ZN6S600C43v33Ev();
extern void _ZN6S600C43v34Ev();
static  VTBL_ENTRY vtc_S600C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S600C4[0]),
  (VTBL_ENTRY)&_ZN6S600C4D1Ev,
  (VTBL_ENTRY)&_ZN6S600C4D0Ev,
  (VTBL_ENTRY)&_ZN6S600C52v5Ev,
  (VTBL_ENTRY)&_ZN6S600C52v6Ev,
  (VTBL_ENTRY)&_ZN6S600C52v7Ev,
  (VTBL_ENTRY)&_ZN6S600C52v8Ev,
  (VTBL_ENTRY)&_ZN6S600C52v9Ev,
  (VTBL_ENTRY)&_ZN6S600C53v10Ev,
  (VTBL_ENTRY)&_ZN6S600C53v11Ev,
  (VTBL_ENTRY)&_ZN6S600C53v12Ev,
  (VTBL_ENTRY)&_ZN6S600C53v13Ev,
  (VTBL_ENTRY)&_ZN6S600C53v14Ev,
  (VTBL_ENTRY)&_ZN6S600C53v15Ev,
  (VTBL_ENTRY)&_ZN6S600C53v16Ev,
  (VTBL_ENTRY)&_ZN6S600C53v17Ev,
  (VTBL_ENTRY)&_ZN6S600C53v18Ev,
  (VTBL_ENTRY)&_ZN6S600C53v19Ev,
  (VTBL_ENTRY)&_ZN6S600C43v20Ev,
  (VTBL_ENTRY)&_ZN6S600C43v21Ev,
  (VTBL_ENTRY)&_ZN6S600C43v22Ev,
  (VTBL_ENTRY)&_ZN6S600C43v23Ev,
  (VTBL_ENTRY)&_ZN6S600C43v24Ev,
  (VTBL_ENTRY)&_ZN6S600C43v25Ev,
  (VTBL_ENTRY)&_ZN6S600C43v26Ev,
  (VTBL_ENTRY)&_ZN6S600C43v27Ev,
  (VTBL_ENTRY)&_ZN6S600C43v28Ev,
  (VTBL_ENTRY)&_ZN6S600C43v29Ev,
  (VTBL_ENTRY)&_ZN6S600C43v30Ev,
  (VTBL_ENTRY)&_ZN6S600C43v31Ev,
  (VTBL_ENTRY)&_ZN6S600C43v32Ev,
  (VTBL_ENTRY)&_ZN6S600C43v33Ev,
  (VTBL_ENTRY)&_ZN6S600C43v34Ev,
};
extern VTBL_ENTRY _ZTI6S600C4[];
extern  VTBL_ENTRY _ZTV6S600C4[];
Class_Descriptor cd_S600C4 = {  "S600C4", // class name
  bases_S600C4, 1,
  &(vtc_S600C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(280,212), // object size
  NSPAIRA(_ZTI6S600C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S600C4),34, //virtual function table var
  2, // 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  S600C3  : S600C4 {
  ::S601C13_nt s600c3f0;
  ::S601C13_nt s600c3f1;
  ::S601C13_nt s600c3f2;
  ::S601C13_nt s600c3f3;
  ::S2120C13_nt s600c3f4;
  ::S2120C13_nt s600c3f5;
  ::S2120C13_nt s600c3f6;
  ::S2120C13_nt s600c3f7;
  ::S601C14 s600c3f8;
  virtual  ~S600C3(); // _ZN6S600C3D1Ev
  virtual void  v35(); // _ZN6S600C33v35Ev
  virtual void  v36(); // _ZN6S600C33v36Ev
  virtual void  v37(); // _ZN6S600C33v37Ev
  virtual void  v38(); // _ZN6S600C33v38Ev
  virtual void  v39(); // _ZN6S600C33v39Ev
  S600C3(); // tgen
};
//SIG(-1 S600C3) C1{ BC2{ BC3{ vd v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 FC4{ m FC5{ m FL[2]}} FC4 Fp Fi FU6{ m FC7{ Fi:4 Fi:4 Fi:4 Fi:2 Fi:1 Fi:17} Fi} Fi:2 Fi:2 Fc:1 Fc:1 FC8{ m Fp Fp} FC9{ Fp Fp}[2]} vd v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc Fi[2] Fi[2] Fp FC4 FC4 FC4 FC10{ m FC4 FC4} Fp Fi Fi FC11{ m Fp}[4] Fp} vd v1 v2 v3 v4 v5 FC11 FC11 FC11 FC11 FC4 FC4 FC4 FC4 FC12{ m FC13{ m FL FL}}}


 S600C3 ::~S600C3(){ note_dtor("S600C3", this);}
void  S600C3 ::v35(){vfunc_called(this, "_ZN6S600C33v35Ev");}
void  S600C3 ::v36(){vfunc_called(this, "_ZN6S600C33v36Ev");}
void  S600C3 ::v37(){vfunc_called(this, "_ZN6S600C33v37Ev");}
void  S600C3 ::v38(){vfunc_called(this, "_ZN6S600C33v38Ev");}
void  S600C3 ::v39(){vfunc_called(this, "_ZN6S600C33v39Ev");}
S600C3 ::S600C3(){ note_ctor("S600C3", this);} // tgen

static void Test_S600C3()
{
  extern Class_Descriptor cd_S600C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(50,78)];
    init_test(&cd_S600C3, buf);
    S600C3 *dp, &lv = *(dp=new (buf) S600C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(392,308), "sizeof(S600C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S600C3)");
    check_base_class_offset(lv, (S600C5*)(S600C4*), 0, "S600C3");
    check_base_class_offset(lv, (S600C4*), 0, "S600C3");
    check_field_offset(lv, s600c3f0, ABISELECT(280,212), "S600C3.s600c3f0");
    check_field_offset(lv, s600c3f1, ABISELECT(288,216), "S600C3.s600c3f1");
    check_field_offset(lv, s600c3f2, ABISELECT(296,220), "S600C3.s600c3f2");
    check_field_offset(lv, s600c3f3, ABISELECT(304,224), "S600C3.s600c3f3");
    check_field_offset(lv, s600c3f4, ABISELECT(312,228), "S600C3.s600c3f4");
    check_field_offset(lv, s600c3f5, ABISELECT(328,244), "S600C3.s600c3f5");
    check_field_offset(lv, s600c3f6, ABISELECT(344,260), "S600C3.s600c3f6");
    check_field_offset(lv, s600c3f7, ABISELECT(360,276), "S600C3.s600c3f7");
    check_field_offset(lv, s600c3f8, ABISELECT(376,292), "S600C3.s600c3f8");
    test_class_info(&lv, &cd_S600C3);
    dp->~S600C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS600C3(Test_S600C3, "S600C3", ABISELECT(392,308));

#else // __cplusplus

extern void _ZN6S600C3C1Ev();
extern void _ZN6S600C3D1Ev();
Name_Map name_map_S600C3[] = {
  NSPAIR(_ZN6S600C3C1Ev),
  NSPAIR(_ZN6S600C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S600C5;
extern VTBL_ENTRY _ZTI6S600C5[];
extern  VTBL_ENTRY _ZTV6S600C5[];
extern Class_Descriptor cd_S600C4;
extern VTBL_ENTRY _ZTI6S600C4[];
extern  VTBL_ENTRY _ZTV6S600C4[];
static Base_Class bases_S600C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S600C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S600C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S600C3[];
extern void _ZN6S600C3D1Ev();
extern void _ZN6S600C3D0Ev();
extern void _ZN6S600C52v5Ev();
extern void _ZN6S600C52v6Ev();
extern void _ZN6S600C52v7Ev();
extern void _ZN6S600C52v8Ev();
extern void _ZN6S600C52v9Ev();
extern void _ZN6S600C53v10Ev();
extern void _ZN6S600C53v11Ev();
extern void _ZN6S600C53v12Ev();
extern void _ZN6S600C53v13Ev();
extern void _ZN6S600C53v14Ev();
extern void _ZN6S600C53v15Ev();
extern void _ZN6S600C53v16Ev();
extern void _ZN6S600C53v17Ev();
extern void _ZN6S600C53v18Ev();
extern void _ZN6S600C53v19Ev();
extern void _ZN6S600C43v20Ev();
extern void _ZN6S600C43v21Ev();
extern void _ZN6S600C43v22Ev();
extern void _ZN6S600C43v23Ev();
extern void _ZN6S600C43v24Ev();
extern void _ZN6S600C43v25Ev();
extern void _ZN6S600C43v26Ev();
extern void _ZN6S600C43v27Ev();
extern void _ZN6S600C43v28Ev();
extern void _ZN6S600C43v29Ev();
extern void _ZN6S600C43v30Ev();
extern void _ZN6S600C43v31Ev();
extern void _ZN6S600C43v32Ev();
extern void _ZN6S600C43v33Ev();
extern void _ZN6S600C43v34Ev();
extern void _ZN6S600C33v35Ev();
extern void _ZN6S600C33v36Ev();
extern void _ZN6S600C33v37Ev();
extern void _ZN6S600C33v38Ev();
extern void _ZN6S600C33v39Ev();
static  VTBL_ENTRY vtc_S600C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S600C3[0]),
  (VTBL_ENTRY)&_ZN6S600C3D1Ev,
  (VTBL_ENTRY)&_ZN6S600C3D0Ev,
  (VTBL_ENTRY)&_ZN6S600C52v5Ev,
  (VTBL_ENTRY)&_ZN6S600C52v6Ev,
  (VTBL_ENTRY)&_ZN6S600C52v7Ev,
  (VTBL_ENTRY)&_ZN6S600C52v8Ev,
  (VTBL_ENTRY)&_ZN6S600C52v9Ev,
  (VTBL_ENTRY)&_ZN6S600C53v10Ev,
  (VTBL_ENTRY)&_ZN6S600C53v11Ev,
  (VTBL_ENTRY)&_ZN6S600C53v12Ev,
  (VTBL_ENTRY)&_ZN6S600C53v13Ev,
  (VTBL_ENTRY)&_ZN6S600C53v14Ev,
  (VTBL_ENTRY)&_ZN6S600C53v15Ev,
  (VTBL_ENTRY)&_ZN6S600C53v16Ev,
  (VTBL_ENTRY)&_ZN6S600C53v17Ev,
  (VTBL_ENTRY)&_ZN6S600C53v18Ev,
  (VTBL_ENTRY)&_ZN6S600C53v19Ev,
  (VTBL_ENTRY)&_ZN6S600C43v20Ev,
  (VTBL_ENTRY)&_ZN6S600C43v21Ev,
  (VTBL_ENTRY)&_ZN6S600C43v22Ev,
  (VTBL_ENTRY)&_ZN6S600C43v23Ev,
  (VTBL_ENTRY)&_ZN6S600C43v24Ev,
  (VTBL_ENTRY)&_ZN6S600C43v25Ev,
  (VTBL_ENTRY)&_ZN6S600C43v26Ev,
  (VTBL_ENTRY)&_ZN6S600C43v27Ev,
  (VTBL_ENTRY)&_ZN6S600C43v28Ev,
  (VTBL_ENTRY)&_ZN6S600C43v29Ev,
  (VTBL_ENTRY)&_ZN6S600C43v30Ev,
  (VTBL_ENTRY)&_ZN6S600C43v31Ev,
  (VTBL_ENTRY)&_ZN6S600C43v32Ev,
  (VTBL_ENTRY)&_ZN6S600C43v33Ev,
  (VTBL_ENTRY)&_ZN6S600C43v34Ev,
  (VTBL_ENTRY)&_ZN6S600C33v35Ev,
  (VTBL_ENTRY)&_ZN6S600C33v36Ev,
  (VTBL_ENTRY)&_ZN6S600C33v37Ev,
  (VTBL_ENTRY)&_ZN6S600C33v38Ev,
  (VTBL_ENTRY)&_ZN6S600C33v39Ev,
};
extern VTBL_ENTRY _ZTI6S600C3[];
extern  VTBL_ENTRY _ZTV6S600C3[];
Class_Descriptor cd_S600C3 = {  "S600C3", // class name
  bases_S600C3, 2,
  &(vtc_S600C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(392,308), // object size
  NSPAIRA(_ZTI6S600C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S600C3),39, //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  S600C2  : S600C3 {
  virtual  ~S600C2(); // _ZN6S600C2D1Ev
  virtual void  v40(); // _ZN6S600C23v40Ev
  virtual void  v41(); // _ZN6S600C23v41Ev
  virtual void  v42(); // _ZN6S600C23v42Ev
  virtual void  v43(); // _ZN6S600C23v43Ev
  S600C2(); // tgen
};
//SIG(-1 S600C2) C1{ BC2{ BC3{ BC4{ vd v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 FC5{ m FC6{ m FL[2]}} FC5 Fp Fi FU7{ m FC8{ Fi:4 Fi:4 Fi:4 Fi:2 Fi:1 Fi:17} Fi} Fi:2 Fi:2 Fc:1 Fc:1 FC9{ m Fp Fp} FC10{ Fp Fp}[2]} vd v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc Fi[2] Fi[2] Fp FC5 FC5 FC5 FC11{ m FC5 FC5} Fp Fi Fi FC12{ m Fp}[4] Fp} vd v35 v36 v37 v38 v39 FC12 FC12 FC12 FC12 FC5 FC5 FC5 FC5 FC13{ m FC14{ m FL FL}}} vd v1 v2 v3 v4}


 S600C2 ::~S600C2(){ note_dtor("S600C2", this);}
void  S600C2 ::v40(){vfunc_called(this, "_ZN6S600C23v40Ev");}
void  S600C2 ::v41(){vfunc_called(this, "_ZN6S600C23v41Ev");}
void  S600C2 ::v42(){vfunc_called(this, "_ZN6S600C23v42Ev");}
void  S600C2 ::v43(){vfunc_called(this, "_ZN6S600C23v43Ev");}
S600C2 ::S600C2(){ note_ctor("S600C2", this);} // tgen

static void Test_S600C2()
{
  extern Class_Descriptor cd_S600C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(50,78)];
    init_test(&cd_S600C2, buf);
    S600C2 *dp, &lv = *(dp=new (buf) S600C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(392,308), "sizeof(S600C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S600C2)");
    check_base_class_offset(lv, (S600C5*)(S600C4*)(S600C3*), 0, "S600C2");
    check_base_class_offset(lv, (S600C4*)(S600C3*), 0, "S600C2");
    check_base_class_offset(lv, (S600C3*), 0, "S600C2");
    test_class_info(&lv, &cd_S600C2);
    dp->~S600C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS600C2(Test_S600C2, "S600C2", ABISELECT(392,308));

#else // __cplusplus

extern void _ZN6S600C2C1Ev();
extern void _ZN6S600C2D1Ev();
Name_Map name_map_S600C2[] = {
  NSPAIR(_ZN6S600C2C1Ev),
  NSPAIR(_ZN6S600C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S600C5;
extern VTBL_ENTRY _ZTI6S600C5[];
extern  VTBL_ENTRY _ZTV6S600C5[];
extern Class_Descriptor cd_S600C4;
extern VTBL_ENTRY _ZTI6S600C4[];
extern  VTBL_ENTRY _ZTV6S600C4[];
extern Class_Descriptor cd_S600C3;
extern VTBL_ENTRY _ZTI6S600C3[];
extern  VTBL_ENTRY _ZTV6S600C3[];
static Base_Class bases_S600C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S600C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S600C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S600C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S600C2[];
extern void _ZN6S600C2D1Ev();
extern void _ZN6S600C2D0Ev();
extern void _ZN6S600C52v5Ev();
extern void _ZN6S600C52v6Ev();
extern void _ZN6S600C52v7Ev();
extern void _ZN6S600C52v8Ev();
extern void _ZN6S600C52v9Ev();
extern void _ZN6S600C53v10Ev();
extern void _ZN6S600C53v11Ev();
extern void _ZN6S600C53v12Ev();
extern void _ZN6S600C53v13Ev();
extern void _ZN6S600C53v14Ev();
extern void _ZN6S600C53v15Ev();
extern void _ZN6S600C53v16Ev();
extern void _ZN6S600C53v17Ev();
extern void _ZN6S600C53v18Ev();
extern void _ZN6S600C53v19Ev();
extern void _ZN6S600C43v20Ev();
extern void _ZN6S600C43v21Ev();
extern void _ZN6S600C43v22Ev();
extern void _ZN6S600C43v23Ev();
extern void _ZN6S600C43v24Ev();
extern void _ZN6S600C43v25Ev();
extern void _ZN6S600C43v26Ev();
extern void _ZN6S600C43v27Ev();
extern void _ZN6S600C43v28Ev();
extern void _ZN6S600C43v29Ev();
extern void _ZN6S600C43v30Ev();
extern void _ZN6S600C43v31Ev();
extern void _ZN6S600C43v32Ev();
extern void _ZN6S600C43v33Ev();
extern void _ZN6S600C43v34Ev();
extern void _ZN6S600C33v35Ev();
extern void _ZN6S600C33v36Ev();
extern void _ZN6S600C33v37Ev();
extern void _ZN6S600C33v38Ev();
extern void _ZN6S600C33v39Ev();
extern void _ZN6S600C23v40Ev();
extern void _ZN6S600C23v41Ev();
extern void _ZN6S600C23v42Ev();
extern void _ZN6S600C23v43Ev();
static  VTBL_ENTRY vtc_S600C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S600C2[0]),
  (VTBL_ENTRY)&_ZN6S600C2D1Ev,
  (VTBL_ENTRY)&_ZN6S600C2D0Ev,
  (VTBL_ENTRY)&_ZN6S600C52v5Ev,
  (VTBL_ENTRY)&_ZN6S600C52v6Ev,
  (VTBL_ENTRY)&_ZN6S600C52v7Ev,
  (VTBL_ENTRY)&_ZN6S600C52v8Ev,
  (VTBL_ENTRY)&_ZN6S600C52v9Ev,
  (VTBL_ENTRY)&_ZN6S600C53v10Ev,
  (VTBL_ENTRY)&_ZN6S600C53v11Ev,
  (VTBL_ENTRY)&_ZN6S600C53v12Ev,
  (VTBL_ENTRY)&_ZN6S600C53v13Ev,
  (VTBL_ENTRY)&_ZN6S600C53v14Ev,
  (VTBL_ENTRY)&_ZN6S600C53v15Ev,
  (VTBL_ENTRY)&_ZN6S600C53v16Ev,
  (VTBL_ENTRY)&_ZN6S600C53v17Ev,
  (VTBL_ENTRY)&_ZN6S600C53v18Ev,
  (VTBL_ENTRY)&_ZN6S600C53v19Ev,
  (VTBL_ENTRY)&_ZN6S600C43v20Ev,
  (VTBL_ENTRY)&_ZN6S600C43v21Ev,
  (VTBL_ENTRY)&_ZN6S600C43v22Ev,
  (VTBL_ENTRY)&_ZN6S600C43v23Ev,
  (VTBL_ENTRY)&_ZN6S600C43v24Ev,
  (VTBL_ENTRY)&_ZN6S600C43v25Ev,
  (VTBL_ENTRY)&_ZN6S600C43v26Ev,
  (VTBL_ENTRY)&_ZN6S600C43v27Ev,
  (VTBL_ENTRY)&_ZN6S600C43v28Ev,
  (VTBL_ENTRY)&_ZN6S600C43v29Ev,
  (VTBL_ENTRY)&_ZN6S600C43v30Ev,
  (VTBL_ENTRY)&_ZN6S600C43v31Ev,
  (VTBL_ENTRY)&_ZN6S600C43v32Ev,
  (VTBL_ENTRY)&_ZN6S600C43v33Ev,
  (VTBL_ENTRY)&_ZN6S600C43v34Ev,
  (VTBL_ENTRY)&_ZN6S600C33v35Ev,
  (VTBL_ENTRY)&_ZN6S600C33v36Ev,
  (VTBL_ENTRY)&_ZN6S600C33v37Ev,
  (VTBL_ENTRY)&_ZN6S600C33v38Ev,
  (VTBL_ENTRY)&_ZN6S600C33v39Ev,
  (VTBL_ENTRY)&_ZN6S600C23v40Ev,
  (VTBL_ENTRY)&_ZN6S600C23v41Ev,
  (VTBL_ENTRY)&_ZN6S600C23v42Ev,
  (VTBL_ENTRY)&_ZN6S600C23v43Ev,
};
extern VTBL_ENTRY _ZTI6S600C2[];
extern  VTBL_ENTRY _ZTV6S600C2[];
Class_Descriptor cd_S600C2 = {  "S600C2", // class name
  bases_S600C2, 3,
  &(vtc_S600C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(392,308), // object size
  NSPAIRA(_ZTI6S600C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S600C2),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S600C19  {
  ::S601C20 s600c19f0;
  virtual  ~S600C19(); // _ZN7S600C19D1Ev
  virtual void  v50(); // _ZN7S600C193v50Ev
  virtual void  v51(); // _ZN7S600C193v51Ev
  virtual void  v52(); // _ZN7S600C193v52Ev
  virtual void  v53(); // _ZN7S600C193v53Ev
  virtual void  v54(); // _ZN7S600C193v54Ev
  virtual void  v55(); // _ZN7S600C193v55Ev
  S600C19(); // tgen
};
//SIG(-1 S600C19) C1{ vd v1 v2 v3 v4 v5 v6 FC2{ m Fp[4]}}


 S600C19 ::~S600C19(){ note_dtor("S600C19", this);}
void  S600C19 ::v50(){vfunc_called(this, "_ZN7S600C193v50Ev");}
void  S600C19 ::v51(){vfunc_called(this, "_ZN7S600C193v51Ev");}
void  S600C19 ::v52(){vfunc_called(this, "_ZN7S600C193v52Ev");}
void  S600C19 ::v53(){vfunc_called(this, "_ZN7S600C193v53Ev");}
void  S600C19 ::v54(){vfunc_called(this, "_ZN7S600C193v54Ev");}
void  S600C19 ::v55(){vfunc_called(this, "_ZN7S600C193v55Ev");}
S600C19 ::S600C19(){ note_ctor("S600C19", this);} // tgen

static void Test_S600C19()
{
  extern Class_Descriptor cd_S600C19;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S600C19, buf);
    S600C19 *dp, &lv = *(dp=new (buf) S600C19());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S600C19)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S600C19)");
    check_field_offset(lv, s600c19f0, ABISELECT(8,4), "S600C19.s600c19f0");
    test_class_info(&lv, &cd_S600C19);
    dp->~S600C19();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS600C19(Test_S600C19, "S600C19", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S600C19C1Ev();
extern void _ZN7S600C19D1Ev();
Name_Map name_map_S600C19[] = {
  NSPAIR(_ZN7S600C19C1Ev),
  NSPAIR(_ZN7S600C19D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S600C19[];
extern void _ZN7S600C19D1Ev();
extern void _ZN7S600C19D0Ev();
extern void _ZN7S600C193v50Ev();
extern void _ZN7S600C193v51Ev();
extern void _ZN7S600C193v52Ev();
extern void _ZN7S600C193v53Ev();
extern void _ZN7S600C193v54Ev();
extern void _ZN7S600C193v55Ev();
static  VTBL_ENTRY vtc_S600C19[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S600C19[0]),
  (VTBL_ENTRY)&_ZN7S600C19D1Ev,
  (VTBL_ENTRY)&_ZN7S600C19D0Ev,
  (VTBL_ENTRY)&_ZN7S600C193v50Ev,
  (VTBL_ENTRY)&_ZN7S600C193v51Ev,
  (VTBL_ENTRY)&_ZN7S600C193v52Ev,
  (VTBL_ENTRY)&_ZN7S600C193v53Ev,
  (VTBL_ENTRY)&_ZN7S600C193v54Ev,
  (VTBL_ENTRY)&_ZN7S600C193v55Ev,
};
extern VTBL_ENTRY _ZTI7S600C19[];
extern  VTBL_ENTRY _ZTV7S600C19[];
Class_Descriptor cd_S600C19 = {  "S600C19", // class name
  0,0,//no base classes
  &(vtc_S600C19[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S600C19),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S600C19),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S600C18  : S600C19 , S601C21_nt {
  ::S601C22 s600c18f0;
  ::S601C27 s600c18f1;
  ::S601C27 s600c18f2;
  virtual void  v44(); // _ZN7S600C183v44Ev
  virtual void  v45(); // _ZN7S600C183v45Ev
  virtual void  v46(); // _ZN7S600C183v46Ev
  virtual void  v47(); // _ZN7S600C183v47Ev
  virtual void  v48(); // _ZN7S600C183v48Ev
  virtual void  v49(); // _ZN7S600C183v49Ev
  ~S600C18(); // tgen
  S600C18(); // tgen
};
//SIG(-1 S600C18) C1{ BC2{ vd v7 v8 v9 v10 v11 v12 FC3{ m Fp[4]}} BC4{} v1 v2 v3 v4 v5 v6 FC5{ BC6{ m Fp Fi Fp Fi[2]} FC7{ m FC8{ m FC9{ m FL[2]}} FC8 FC8 FC8}} FC10{ BC6 FC11{ m FC9}} FC10}


void  S600C18 ::v44(){vfunc_called(this, "_ZN7S600C183v44Ev");}
void  S600C18 ::v45(){vfunc_called(this, "_ZN7S600C183v45Ev");}
void  S600C18 ::v46(){vfunc_called(this, "_ZN7S600C183v46Ev");}
void  S600C18 ::v47(){vfunc_called(this, "_ZN7S600C183v47Ev");}
void  S600C18 ::v48(){vfunc_called(this, "_ZN7S600C183v48Ev");}
void  S600C18 ::v49(){vfunc_called(this, "_ZN7S600C183v49Ev");}
S600C18 ::~S600C18(){ note_dtor("S600C18", this);} // tgen
S600C18 ::S600C18(){ note_ctor("S600C18", this);} // tgen

static void Test_S600C18()
{
  extern Class_Descriptor cd_S600C18;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(30,45)];
    init_test(&cd_S600C18, buf);
    S600C18 *dp, &lv = *(dp=new (buf) S600C18());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(232,176), "sizeof(S600C18)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S600C18)");
    check_base_class_offset(lv, (S600C19*), 0, "S600C18");
    check_base_class_offset(lv, (S601C21_nt*), 0, "S600C18");
    check_field_offset(lv, s600c18f0, ABISELECT(40,20), "S600C18.s600c18f0");
    check_field_offset(lv, s600c18f1, ABISELECT(136,104), "S600C18.s600c18f1");
    check_field_offset(lv, s600c18f2, ABISELECT(184,140), "S600C18.s600c18f2");
    test_class_info(&lv, &cd_S600C18);
    dp->~S600C18();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS600C18(Test_S600C18, "S600C18", ABISELECT(232,176));

#else // __cplusplus

extern void _ZN7S600C18C1Ev();
extern void _ZN7S600C18D1Ev();
Name_Map name_map_S600C18[] = {
  NSPAIR(_ZN7S600C18C1Ev),
  NSPAIR(_ZN7S600C18D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S600C19;
extern VTBL_ENTRY _ZTI7S600C19[];
extern  VTBL_ENTRY _ZTV7S600C19[];
extern Class_Descriptor cd_S601C21_nt;
extern VTBL_ENTRY _ZTI10S601C21_nt[];
static Base_Class bases_S600C18[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S601C21_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S600C18[];
extern void _ZN7S600C18D1Ev();
extern void _ZN7S600C18D0Ev();
extern void _ZN7S600C193v50Ev();
extern void _ZN7S600C193v51Ev();
extern void _ZN7S600C193v52Ev();
extern void _ZN7S600C193v53Ev();
extern void _ZN7S600C193v54Ev();
extern void _ZN7S600C193v55Ev();
extern void _ZN7S600C183v44Ev();
extern void _ZN7S600C183v45Ev();
extern void _ZN7S600C183v46Ev();
extern void _ZN7S600C183v47Ev();
extern void _ZN7S600C183v48Ev();
extern void _ZN7S600C183v49Ev();
static  VTBL_ENTRY vtc_S600C18[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S600C18[0]),
  (VTBL_ENTRY)&_ZN7S600C18D1Ev,
  (VTBL_ENTRY)&_ZN7S600C18D0Ev,
  (VTBL_ENTRY)&_ZN7S600C193v50Ev,
  (VTBL_ENTRY)&_ZN7S600C193v51Ev,
  (VTBL_ENTRY)&_ZN7S600C193v52Ev,
  (VTBL_ENTRY)&_ZN7S600C193v53Ev,
  (VTBL_ENTRY)&_ZN7S600C193v54Ev,
  (VTBL_ENTRY)&_ZN7S600C193v55Ev,
  (VTBL_ENTRY)&_ZN7S600C183v44Ev,
  (VTBL_ENTRY)&_ZN7S600C183v45Ev,
  (VTBL_ENTRY)&_ZN7S600C183v46Ev,
  (VTBL_ENTRY)&_ZN7S600C183v47Ev,
  (VTBL_ENTRY)&_ZN7S600C183v48Ev,
  (VTBL_ENTRY)&_ZN7S600C183v49Ev,
};
extern VTBL_ENTRY _ZTI7S600C18[];
extern  VTBL_ENTRY _ZTV7S600C18[];
Class_Descriptor cd_S600C18 = {  "S600C18", // class name
  bases_S600C18, 2,
  &(vtc_S600C18[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(232,176), // object size
  NSPAIRA(_ZTI7S600C18),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S600C18),16, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S600C17  {
  ::S600C18 s600c17f0;
  ::S601C32 s600c17f1;
  void  mf600c17(); // _ZN7S600C178mf600c17Ev
};
//SIG(-1 S600C17) C1{ m FC2{ BC3{ vd v7 v8 v9 v10 v11 v12 FC4{ m Fp[4]}} BC5{} v1 v2 v3 v4 v5 v6 FC6{ BC7{ m Fp Fi Fp Fi[2]} FC8{ m FC9{ m FC10{ m FL[2]}} FC9 FC9 FC9}} FC11{ BC7 FC12{ m FC10}} FC11} FC13{ BC14{ BC15{ vd v13} vd v14 Fp[2] FC16{ m FC17{ m Fp Fi[2] FC18{ m}}} FC19{ m Fp[2]}} vd FC20{ m FC21{ Fs[2] Fc[2] Fs}[12] Fi FC22{ Fs[2]}[4] Fi FC23{ m Fp[2]}}}}


void  S600C17 ::mf600c17(){}

static void Test_S600C17()
{
  {
    init_simple_test("S600C17");
    S600C17 lv;
    check2(sizeof(lv), ABISELECT(432,340), "sizeof(S600C17)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S600C17)");
    check_field_offset(lv, s600c17f0, 0, "S600C17.s600c17f0");
    check_field_offset(lv, s600c17f1, ABISELECT(232,176), "S600C17.s600c17f1");
  }
}
static Arrange_To_Call_Me vS600C17(Test_S600C17, "S600C17", ABISELECT(432,340));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S600C40  : S600C19 , S601C21_nt {
  ::S601C45 s600c40f0;
  ::S601C45 s600c40f1;
  ::S601C27 s600c40f2;
  ::S601C27 s600c40f3;
  virtual void  v58(); // _ZN7S600C403v58Ev
  virtual void  v59(); // _ZN7S600C403v59Ev
  virtual void  v60(); // _ZN7S600C403v60Ev
  virtual void  v61(); // _ZN7S600C403v61Ev
  virtual void  v62(); // _ZN7S600C403v62Ev
  virtual void  v63(); // _ZN7S600C403v63Ev
  ~S600C40(); // tgen
  S600C40(); // tgen
};
//SIG(-1 S600C40) C1{ BC2{ vd v7 v8 v9 v10 v11 v12 FC3{ m Fp[4]}} BC4{} v1 v2 v3 v4 v5 v6 FC5{ BC6{ m Fp Fi Fp Fi[2]} FC7{ m FC8{ m Fp[2]} FC9{ m Fp}}} FC5 FC10{ BC6 FC11{ m FC12{ m FL[2]}}} FC10}


void  S600C40 ::v58(){vfunc_called(this, "_ZN7S600C403v58Ev");}
void  S600C40 ::v59(){vfunc_called(this, "_ZN7S600C403v59Ev");}
void  S600C40 ::v60(){vfunc_called(this, "_ZN7S600C403v60Ev");}
void  S600C40 ::v61(){vfunc_called(this, "_ZN7S600C403v61Ev");}
void  S600C40 ::v62(){vfunc_called(this, "_ZN7S600C403v62Ev");}
void  S600C40 ::v63(){vfunc_called(this, "_ZN7S600C403v63Ev");}
S600C40 ::~S600C40(){ note_dtor("S600C40", this);} // tgen
S600C40 ::S600C40(){ note_ctor("S600C40", this);} // tgen

static void Test_S600C40()
{
  extern Class_Descriptor cd_S600C40;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(32,40)];
    init_test(&cd_S600C40, buf);
    S600C40 *dp, &lv = *(dp=new (buf) S600C40());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(248,156), "sizeof(S600C40)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S600C40)");
    check_base_class_offset(lv, (S600C19*), 0, "S600C40");
    check_base_class_offset(lv, (S601C21_nt*), 0, "S600C40");
    check_field_offset(lv, s600c40f0, ABISELECT(40,20), "S600C40.s600c40f0");
    check_field_offset(lv, s600c40f1, ABISELECT(96,52), "S600C40.s600c40f1");
    check_field_offset(lv, s600c40f2, ABISELECT(152,84), "S600C40.s600c40f2");
    check_field_offset(lv, s600c40f3, ABISELECT(200,120), "S600C40.s600c40f3");
    test_class_info(&lv, &cd_S600C40);
    dp->~S600C40();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS600C40(Test_S600C40, "S600C40", ABISELECT(248,156));

#else // __cplusplus

extern void _ZN7S600C40C1Ev();
extern void _ZN7S600C40D1Ev();
Name_Map name_map_S600C40[] = {
  NSPAIR(_ZN7S600C40C1Ev),
  NSPAIR(_ZN7S600C40D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S600C19;
extern VTBL_ENTRY _ZTI7S600C19[];
extern  VTBL_ENTRY _ZTV7S600C19[];
extern Class_Descriptor cd_S601C21_nt;
extern VTBL_ENTRY _ZTI10S601C21_nt[];
static Base_Class bases_S600C40[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S600C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S601C21_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S600C40[];
extern void _ZN7S600C40D1Ev();
extern void _ZN7S600C40D0Ev();
extern void _ZN7S600C193v50Ev();
extern void _ZN7S600C193v51Ev();
extern void _ZN7S600C193v52Ev();
extern void _ZN7S600C193v53Ev();
extern void _ZN7S600C193v54Ev();
extern void _ZN7S600C193v55Ev();
extern void _ZN7S600C403v58Ev();
extern void _ZN7S600C403v59Ev();
extern void _ZN7S600C403v60Ev();
extern void _ZN7S600C403v61Ev();
extern void _ZN7S600C403v62Ev();
extern void _ZN7S600C403v63Ev();
static  VTBL_ENTRY vtc_S600C40[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S600C40[0]),
  (VTBL_ENTRY)&_ZN7S600C40D1Ev,
  (VTBL_ENTRY)&_ZN7S600C40D0Ev,
  (VTBL_ENTRY)&_ZN7S600C193v50Ev,
  (VTBL_ENTRY)&_ZN7S600C193v51Ev,
  (VTBL_ENTRY)&_ZN7S600C193v52Ev,
  (VTBL_ENTRY)&_ZN7S600C193v53Ev,
  (VTBL_ENTRY)&_ZN7S600C193v54Ev,
  (VTBL_ENTRY)&_ZN7S600C193v55Ev,
  (VTBL_ENTRY)&_ZN7S600C403v58Ev,
  (VTBL_ENTRY)&_ZN7S600C403v59Ev,
  (VTBL_ENTRY)&_ZN7S600C403v60Ev,
  (VTBL_ENTRY)&_ZN7S600C403v61Ev,
  (VTBL_ENTRY)&_ZN7S600C403v62Ev,
  (VTBL_ENTRY)&_ZN7S600C403v63Ev,
};
extern VTBL_ENTRY _ZTI7S600C40[];
extern  VTBL_ENTRY _ZTV7S600C40[];
Class_Descriptor cd_S600C40 = {  "S600C40", // class name
  bases_S600C40, 2,
  &(vtc_S600C40[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(248,156), // object size
  NSPAIRA(_ZTI7S600C40),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S600C40),16, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S600C39  {
  ::S600C40 s600c39f0;
  ::S601C48 s600c39f1;
  void  mf600c39(); // _ZN7S600C398mf600c39Ev
};
//SIG(-1 S600C39) C1{ m FC2{ BC3{ vd v7 v8 v9 v10 v11 v12 FC4{ m Fp[4]}} BC5{} v1 v2 v3 v4 v5 v6 FC6{ BC7{ m Fp Fi Fp Fi[2]} FC8{ m FC9{ m Fp[2]} FC10{ m Fp}}} FC6 FC11{ BC7 FC12{ m FC13{ m FL[2]}}} FC11} FC14{ BC15{ BC16{ vd v13} vd v14 Fp[2] FC17{ m FC18{ m Fp Fi[2] FC19{ m}}} FC20{ m Fp[2]}} vd FC21{ m Fp Fi FC22{ Fc Fc:4 Fc:4 Fc:4 Fc:4 Fc:4 Fc:4} Fi FC9}}}


void  S600C39 ::mf600c39(){}

static void Test_S600C39()
{
  {
    init_simple_test("S600C39");
    static S600C39 lv;
    check2(sizeof(lv), ABISELECT(352,216), "sizeof(S600C39)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S600C39)");
    check_field_offset(lv, s600c39f0, 0, "S600C39.s600c39f0");
    check_field_offset(lv, s600c39f1, ABISELECT(248,156), "S600C39.s600c39f1");
  }
}
static Arrange_To_Call_Me vS600C39(Test_S600C39, "S600C39", ABISELECT(352,216));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S600C16  {
  ::S600C17 s600c16f0;
  ::S600C39 s600c16f1;
  void  mf600c16(); // _ZN7S600C168mf600c16Ev
};
//SIG(-1 S600C16) C1{ m FC2{ m FC3{ BC4{ vd v7 v8 v9 v10 v11 v12 FC5{ m Fp[4]}} BC6{} v1 v2 v3 v4 v5 v6 FC7{ BC8{ m Fp Fi Fp Fi[2]} FC9{ m FC10{ m FC11{ m FL[2]}} FC10 FC10 FC10}} FC12{ BC8 FC13{ m FC11}} FC12} FC14{ BC15{ BC16{ vd v13} vd v14 Fp[2] FC17{ m FC18{ m Fp Fi[2] FC19{ m}}} FC20{ m Fp[2]}} vd FC21{ m FC22{ Fs[2] Fc[2] Fs}[12] Fi FC23{ Fs[2]}[4] Fi FC24{ m Fp[2]}}}} FC25{ m FC26{ BC4 BC6 v15 v16 v17 v18 v19 v20 FC27{ BC8 FC28{ m FC24 FC29{ m Fp}}} FC27 FC12 FC12} FC30{ BC31{ BC16 vd v21 Fp[2] FC17 FC32{ m Fp[2]}} vd FC33{ m Fp Fi FC34{ Fc Fc:4 Fc:4 Fc:4 Fc:4 Fc:4 Fc:4} Fi FC24}}}}


void  S600C16 ::mf600c16(){}

static void Test_S600C16()
{
  {
    init_simple_test("S600C16");
    static S600C16 lv;
    check2(sizeof(lv), ABISELECT(784,556), "sizeof(S600C16)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S600C16)");
    check_field_offset(lv, s600c16f0, 0, "S600C16.s600c16f0");
    check_field_offset(lv, s600c16f1, ABISELECT(432,340), "S600C16.s600c16f1");
  }
}
static Arrange_To_Call_Me vS600C16(Test_S600C16, "S600C16", ABISELECT(784,556));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S600C1  : S600C2 {
  ::S600C16 s600c1f0;
  virtual  ~S600C1(); // _ZN6S600C1D1Ev
  virtual void  v1(); // _ZN6S600C12v1Ev
  virtual void  v2(); // _ZN6S600C12v2Ev
  virtual void  v3(); // _ZN6S600C12v3Ev
  virtual void  v4(); // _ZN6S600C12v4Ev
  S600C1(); // tgen
};
//SIG(1 S600C1) C1{ BC2{ BC3{ BC4{ BC5{ vd v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 FC6{ m FC7{ m FL[2]}} FC6 Fp Fi FU8{ m FC9{ Fi:4 Fi:4 Fi:4 Fi:2 Fi:1 Fi:17} Fi} Fi:2 Fi:2 Fc:1 Fc:1 FC10{ m Fp Fp} FC11{ Fp Fp}[2]} vd v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc Fi[2] Fi[2] Fp FC6 FC6 FC6 FC12{ m FC6 FC6} Fp Fi Fi FC13{ m Fp}[4] Fp} vd v35 v36 v37 v38 v39 FC13 FC13 FC13 FC13 FC6 FC6 FC6 FC6 FC14{ m FC15{ m FL FL}}} vd v40 v41 v42 v43} vd v1 v2 v3 v4 FC16{ m FC17{ m FC18{ BC19{ vd v50 v51 v52 v53 v54 v55 FC20{ m Fp Fp Fp Fp}} BC21{} v44 v45 v46 v47 v48 v49 FC22{ BC23{ m Fp Fi Fp Fi Fi} FC24{ m FC6 FC6 FC6 FC6}} FC25{ BC23 FC26{ m FC7}} FC25} FC27{ BC28{ BC29{ vd v56} vd v57 Fp Fp FC30{ m FC31{ m Fp Fi Fi FC32{ m}}} FC33{ m Fp Fp}} vd FC34{ m FC35{ Fs Fs Fc Fc Fs}[12] Fi FC36{ Fs Fs}[4] Fi FC37{ m Fp Fp}}}} FC38{ m FC39{ BC19 BC21 v58 v59 v60 v61 v62 v63 FC40{ BC23 FC41{ m FC37 FC13}} FC40 FC25 FC25} FC42{ BC43{ BC29 vd v64 Fp Fp FC30 FC10} vd FC44{ m Fp Fi FC45{ Fc Fc:4 Fc:4 Fc:4 Fc:4 Fc:4 Fc:4} Fi FC37}}}}}


 S600C1 ::~S600C1(){ note_dtor("S600C1", this);}
void  S600C1 ::v1(){vfunc_called(this, "_ZN6S600C12v1Ev");}
void  S600C1 ::v2(){vfunc_called(this, "_ZN6S600C12v2Ev");}
void  S600C1 ::v3(){vfunc_called(this, "_ZN6S600C12v3Ev");}
void  S600C1 ::v4(){vfunc_called(this, "_ZN6S600C12v4Ev");}
S600C1 ::S600C1(){ note_ctor("S600C1", this);} // tgen

static void Test_S600C1()
{
  extern Class_Descriptor cd_S600C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(148,217)];
    init_test(&cd_S600C1, buf);
    S600C1 *dp, &lv = *(dp=new (buf) S600C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1176,864), "sizeof(S600C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S600C1)");
    check_base_class_offset(lv, (S600C5*)(S600C4*)(S600C3*)(S600C2*), 0, "S600C1");
    check_base_class_offset(lv, (S600C4*)(S600C3*)(S600C2*), 0, "S600C1");
    check_base_class_offset(lv, (S600C3*)(S600C2*), 0, "S600C1");
    check_base_class_offset(lv, (S600C2*), 0, "S600C1");
    check_field_offset(lv, s600c1f0, ABISELECT(392,308), "S600C1.s600c1f0");
    test_class_info(&lv, &cd_S600C1);
    dp->~S600C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS600C1(Test_S600C1, "S600C1", ABISELECT(1176,864));

#else // __cplusplus

extern void _ZN6S600C1C1Ev();
extern void _ZN6S600C1D1Ev();
Name_Map name_map_S600C1[] = {
  NSPAIR(_ZN6S600C1C1Ev),
  NSPAIR(_ZN6S600C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S600C5;
extern VTBL_ENTRY _ZTI6S600C5[];
extern  VTBL_ENTRY _ZTV6S600C5[];
extern Class_Descriptor cd_S600C4;
extern VTBL_ENTRY _ZTI6S600C4[];
extern  VTBL_ENTRY _ZTV6S600C4[];
extern Class_Descriptor cd_S600C3;
extern VTBL_ENTRY _ZTI6S600C3[];
extern  VTBL_ENTRY _ZTV6S600C3[];
extern Class_Descriptor cd_S600C2;
extern VTBL_ENTRY _ZTI6S600C2[];
extern  VTBL_ENTRY _ZTV6S600C2[];
static Base_Class bases_S600C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S600C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S600C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S600C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S600C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S600C1[];
extern void _ZN6S600C1D1Ev();
extern void _ZN6S600C1D0Ev();
extern void _ZN6S600C52v5Ev();
extern void _ZN6S600C52v6Ev();
extern void _ZN6S600C52v7Ev();
extern void _ZN6S600C52v8Ev();
extern void _ZN6S600C52v9Ev();
extern void _ZN6S600C53v10Ev();
extern void _ZN6S600C53v11Ev();
extern void _ZN6S600C53v12Ev();
extern void _ZN6S600C53v13Ev();
extern void _ZN6S600C53v14Ev();
extern void _ZN6S600C53v15Ev();
extern void _ZN6S600C53v16Ev();
extern void _ZN6S600C53v17Ev();
extern void _ZN6S600C53v18Ev();
extern void _ZN6S600C53v19Ev();
extern void _ZN6S600C43v20Ev();
extern void _ZN6S600C43v21Ev();
extern void _ZN6S600C43v22Ev();
extern void _ZN6S600C43v23Ev();
extern void _ZN6S600C43v24Ev();
extern void _ZN6S600C43v25Ev();
extern void _ZN6S600C43v26Ev();
extern void _ZN6S600C43v27Ev();
extern void _ZN6S600C43v28Ev();
extern void _ZN6S600C43v29Ev();
extern void _ZN6S600C43v30Ev();
extern void _ZN6S600C43v31Ev();
extern void _ZN6S600C43v32Ev();
extern void _ZN6S600C43v33Ev();
extern void _ZN6S600C43v34Ev();
extern void _ZN6S600C33v35Ev();
extern void _ZN6S600C33v36Ev();
extern void _ZN6S600C33v37Ev();
extern void _ZN6S600C33v38Ev();
extern void _ZN6S600C33v39Ev();
extern void _ZN6S600C23v40Ev();
extern void _ZN6S600C23v41Ev();
extern void _ZN6S600C23v42Ev();
extern void _ZN6S600C23v43Ev();
extern void _ZN6S600C12v1Ev();
extern void _ZN6S600C12v2Ev();
extern void _ZN6S600C12v3Ev();
extern void _ZN6S600C12v4Ev();
static  VTBL_ENTRY vtc_S600C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S600C1[0]),
  (VTBL_ENTRY)&_ZN6S600C1D1Ev,
  (VTBL_ENTRY)&_ZN6S600C1D0Ev,
  (VTBL_ENTRY)&_ZN6S600C52v5Ev,
  (VTBL_ENTRY)&_ZN6S600C52v6Ev,
  (VTBL_ENTRY)&_ZN6S600C52v7Ev,
  (VTBL_ENTRY)&_ZN6S600C52v8Ev,
  (VTBL_ENTRY)&_ZN6S600C52v9Ev,
  (VTBL_ENTRY)&_ZN6S600C53v10Ev,
  (VTBL_ENTRY)&_ZN6S600C53v11Ev,
  (VTBL_ENTRY)&_ZN6S600C53v12Ev,
  (VTBL_ENTRY)&_ZN6S600C53v13Ev,
  (VTBL_ENTRY)&_ZN6S600C53v14Ev,
  (VTBL_ENTRY)&_ZN6S600C53v15Ev,
  (VTBL_ENTRY)&_ZN6S600C53v16Ev,
  (VTBL_ENTRY)&_ZN6S600C53v17Ev,
  (VTBL_ENTRY)&_ZN6S600C53v18Ev,
  (VTBL_ENTRY)&_ZN6S600C53v19Ev,
  (VTBL_ENTRY)&_ZN6S600C43v20Ev,
  (VTBL_ENTRY)&_ZN6S600C43v21Ev,
  (VTBL_ENTRY)&_ZN6S600C43v22Ev,
  (VTBL_ENTRY)&_ZN6S600C43v23Ev,
  (VTBL_ENTRY)&_ZN6S600C43v24Ev,
  (VTBL_ENTRY)&_ZN6S600C43v25Ev,
  (VTBL_ENTRY)&_ZN6S600C43v26Ev,
  (VTBL_ENTRY)&_ZN6S600C43v27Ev,
  (VTBL_ENTRY)&_ZN6S600C43v28Ev,
  (VTBL_ENTRY)&_ZN6S600C43v29Ev,
  (VTBL_ENTRY)&_ZN6S600C43v30Ev,
  (VTBL_ENTRY)&_ZN6S600C43v31Ev,
  (VTBL_ENTRY)&_ZN6S600C43v32Ev,
  (VTBL_ENTRY)&_ZN6S600C43v33Ev,
  (VTBL_ENTRY)&_ZN6S600C43v34Ev,
  (VTBL_ENTRY)&_ZN6S600C33v35Ev,
  (VTBL_ENTRY)&_ZN6S600C33v36Ev,
  (VTBL_ENTRY)&_ZN6S600C33v37Ev,
  (VTBL_ENTRY)&_ZN6S600C33v38Ev,
  (VTBL_ENTRY)&_ZN6S600C33v39Ev,
  (VTBL_ENTRY)&_ZN6S600C23v40Ev,
  (VTBL_ENTRY)&_ZN6S600C23v41Ev,
  (VTBL_ENTRY)&_ZN6S600C23v42Ev,
  (VTBL_ENTRY)&_ZN6S600C23v43Ev,
  (VTBL_ENTRY)&_ZN6S600C12v1Ev,
  (VTBL_ENTRY)&_ZN6S600C12v2Ev,
  (VTBL_ENTRY)&_ZN6S600C12v3Ev,
  (VTBL_ENTRY)&_ZN6S600C12v4Ev,
};
extern VTBL_ENTRY _ZTI6S600C1[];
extern  VTBL_ENTRY _ZTV6S600C1[];
Class_Descriptor cd_S600C1 = {  "S600C1", // class name
  bases_S600C1, 4,
  &(vtc_S600C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1176,864), // object size
  NSPAIRA(_ZTI6S600C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S600C1),47, //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  S1564C4  {
  ::S2120C13_nt s1564c4f0;
  ::S2120C13_nt s1564c4f1;
  void *s1564c4f2;
  int s1564c4f3;
  ::S601C8 s1564c4f4;
  int s1564c4f5:2;
  int s1564c4f6:2;
  unsigned char s1564c4f7:1;
  unsigned char s1564c4f8:1;
  ::S601C53 s1564c4f9;
  ::S601C11 s1564c4f10[2];
  virtual  ~S1564C4(); // _ZN7S1564C4D1Ev
  virtual void  v8(); // _ZN7S1564C42v8Ev
  virtual void  v9(); // _ZN7S1564C42v9Ev
  virtual void  v10(); // _ZN7S1564C43v10Ev
  virtual void  v11(); // _ZN7S1564C43v11Ev
  virtual void  v12(); // _ZN7S1564C43v12Ev
  virtual void  v13(); // _ZN7S1564C43v13Ev
  virtual void  v14(); // _ZN7S1564C43v14Ev
  virtual void  v15(); // _ZN7S1564C43v15Ev
  virtual void  v16(); // _ZN7S1564C43v16Ev
  virtual void  v17(); // _ZN7S1564C43v17Ev
  virtual void  v18(); // _ZN7S1564C43v18Ev
  virtual void  v19(); // _ZN7S1564C43v19Ev
  virtual void  v20(); // _ZN7S1564C43v20Ev
  virtual void  v21(); // _ZN7S1564C43v21Ev
  virtual void  v22(); // _ZN7S1564C43v22Ev
  S1564C4(); // tgen
};
//SIG(-1 S1564C4) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 FC2{ m FC3{ m FL[2]}} FC2 Fp Fi FU4{ m FC5{ Fi:4 Fi:4 Fi:4 Fi:2 Fi:1 Fi:17} Fi} Fi:2 Fi:2 Fc:1 Fc:1 FC6{ m Fp Fp} FC7{ Fp Fp}[2]}


 S1564C4 ::~S1564C4(){ note_dtor("S1564C4", this);}
void  S1564C4 ::v8(){vfunc_called(this, "_ZN7S1564C42v8Ev");}
void  S1564C4 ::v9(){vfunc_called(this, "_ZN7S1564C42v9Ev");}
void  S1564C4 ::v10(){vfunc_called(this, "_ZN7S1564C43v10Ev");}
void  S1564C4 ::v11(){vfunc_called(this, "_ZN7S1564C43v11Ev");}
void  S1564C4 ::v12(){vfunc_called(this, "_ZN7S1564C43v12Ev");}
void  S1564C4 ::v13(){vfunc_called(this, "_ZN7S1564C43v13Ev");}
void  S1564C4 ::v14(){vfunc_called(this, "_ZN7S1564C43v14Ev");}
void  S1564C4 ::v15(){vfunc_called(this, "_ZN7S1564C43v15Ev");}
void  S1564C4 ::v16(){vfunc_called(this, "_ZN7S1564C43v16Ev");}
void  S1564C4 ::v17(){vfunc_called(this, "_ZN7S1564C43v17Ev");}
void  S1564C4 ::v18(){vfunc_called(this, "_ZN7S1564C43v18Ev");}
void  S1564C4 ::v19(){vfunc_called(this, "_ZN7S1564C43v19Ev");}
void  S1564C4 ::v20(){vfunc_called(this, "_ZN7S1564C43v20Ev");}
void  S1564C4 ::v21(){vfunc_called(this, "_ZN7S1564C43v21Ev");}
void  S1564C4 ::v22(){vfunc_called(this, "_ZN7S1564C43v22Ev");}
S1564C4 ::S1564C4(){ note_ctor("S1564C4", this);} // tgen

static void Test_S1564C4()
{
  extern Class_Descriptor cd_S1564C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,20)];
    init_test(&cd_S1564C4, buf);
    S1564C4 *dp, &lv = *(dp=new (buf) S1564C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,76), "sizeof(S1564C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1564C4)");
    check_field_offset(lv, s1564c4f0, ABISELECT(8,4), "S1564C4.s1564c4f0");
    check_field_offset(lv, s1564c4f1, ABISELECT(24,20), "S1564C4.s1564c4f1");
    check_field_offset(lv, s1564c4f2, ABISELECT(40,36), "S1564C4.s1564c4f2");
    check_field_offset(lv, s1564c4f3, ABISELECT(48,40), "S1564C4.s1564c4f3");
    check_field_offset(lv, s1564c4f4, ABISELECT(52,44), "S1564C4.s1564c4f4");
    set_bf_and_test(lv, s1564c4f5, ABISELECT(56,48), 0, 2, 1, "S1564C4");
    set_bf_and_test(lv, s1564c4f5, ABISELECT(56,48), 0, 2, hide_sll(1LL<<1), "S1564C4");
    set_bf_and_test(lv, s1564c4f6, ABISELECT(56,48), 2, 2, 1, "S1564C4");
    set_bf_and_test(lv, s1564c4f6, ABISELECT(56,48), 2, 2, hide_sll(1LL<<1), "S1564C4");
    set_bf_and_test(lv, s1564c4f7, ABISELECT(56,48), 4, 1, 1, "S1564C4");
    set_bf_and_test(lv, s1564c4f8, ABISELECT(56,48), 5, 1, 1, "S1564C4");
    check_field_offset(lv, s1564c4f9, ABISELECT(64,52), "S1564C4.s1564c4f9");
    check_field_offset(lv, s1564c4f10, ABISELECT(80,60), "S1564C4.s1564c4f10");
    test_class_info(&lv, &cd_S1564C4);
    dp->~S1564C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1564C4(Test_S1564C4, "S1564C4", ABISELECT(112,76));

#else // __cplusplus

extern void _ZN7S1564C4C1Ev();
extern void _ZN7S1564C4D1Ev();
Name_Map name_map_S1564C4[] = {
  NSPAIR(_ZN7S1564C4C1Ev),
  NSPAIR(_ZN7S1564C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1564C4[];
extern void _ZN7S1564C4D1Ev();
extern void _ZN7S1564C4D0Ev();
extern void _ZN7S1564C42v8Ev();
extern void _ZN7S1564C42v9Ev();
extern void _ZN7S1564C43v10Ev();
extern void _ZN7S1564C43v11Ev();
extern void _ZN7S1564C43v12Ev();
extern void _ZN7S1564C43v13Ev();
extern void _ZN7S1564C43v14Ev();
extern void _ZN7S1564C43v15Ev();
extern void _ZN7S1564C43v16Ev();
extern void _ZN7S1564C43v17Ev();
extern void _ZN7S1564C43v18Ev();
extern void _ZN7S1564C43v19Ev();
extern void _ZN7S1564C43v20Ev();
extern void _ZN7S1564C43v21Ev();
extern void _ZN7S1564C43v22Ev();
static  VTBL_ENTRY vtc_S1564C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1564C4[0]),
  (VTBL_ENTRY)&_ZN7S1564C4D1Ev,
  (VTBL_ENTRY)&_ZN7S1564C4D0Ev,
  (VTBL_ENTRY)&_ZN7S1564C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1564C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1564C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1564C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1564C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1564C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1564C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1564C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1564C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1564C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1564C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1564C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1564C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1564C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1564C43v22Ev,
};
extern VTBL_ENTRY _ZTI7S1564C4[];
extern  VTBL_ENTRY _ZTV7S1564C4[];
Class_Descriptor cd_S1564C4 = {  "S1564C4", // class name
  0,0,//no base classes
  &(vtc_S1564C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,76), // object size
  NSPAIRA(_ZTI7S1564C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1564C4),19, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1564C3  : S1564C4 {
  unsigned char s1564c3f0:1;
  unsigned char s1564c3f1:1;
  unsigned char s1564c3f2:1;
  unsigned char s1564c3f3:1;
  unsigned char s1564c3f4:1;
  unsigned char s1564c3f5:1;
  unsigned char s1564c3f6:1;
  char s1564c3f7;
  int s1564c3f8[2];
  int s1564c3f9[2];
  void *s1564c3f10;
  ::S2120C13_nt s1564c3f11;
  ::S2120C13_nt s1564c3f12;
  ::S2120C13_nt s1564c3f13;
  ::S601C12 s1564c3f14;
  void *s1564c3f15;
  int s1564c3f16;
  int s1564c3f17;
  ::S601C13_nt s1564c3f18[4];
  void *s1564c3f19;
  virtual  ~S1564C3(); // _ZN7S1564C3D1Ev
  virtual void  v23(); // _ZN7S1564C33v23Ev
  virtual void  v24(); // _ZN7S1564C33v24Ev
  virtual void  v25(); // _ZN7S1564C33v25Ev
  virtual void  v26(); // _ZN7S1564C33v26Ev
  virtual void  v27(); // _ZN7S1564C33v27Ev
  virtual void  v28(); // _ZN7S1564C33v28Ev
  virtual void  v29(); // _ZN7S1564C33v29Ev
  virtual void  v30(); // _ZN7S1564C33v30Ev
  virtual void  v31(); // _ZN7S1564C33v31Ev
  virtual void  v32(); // _ZN7S1564C33v32Ev
  virtual void  v33(); // _ZN7S1564C33v33Ev
  virtual void  v34(); // _ZN7S1564C33v34Ev
  virtual void  v35(); // _ZN7S1564C33v35Ev
  virtual void  v36(); // _ZN7S1564C33v36Ev
  virtual void  v37(); // _ZN7S1564C33v37Ev
  S1564C3(); // tgen
};
//SIG(-1 S1564C3) C1{ BC2{ vd v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 FC3{ m FC4{ m FL[2]}} FC3 Fp Fi FU5{ m FC6{ Fi:4 Fi:4 Fi:4 Fi:2 Fi:1 Fi:17} Fi} Fi:2 Fi:2 Fc:1 Fc:1 FC7{ m Fp Fp} FC8{ Fp Fp}[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc Fi[2] Fi[2] Fp FC3 FC3 FC3 FC9{ m FC3 FC3} Fp Fi Fi FC10{ m Fp}[4] Fp}


 S1564C3 ::~S1564C3(){ note_dtor("S1564C3", this);}
void  S1564C3 ::v23(){vfunc_called(this, "_ZN7S1564C33v23Ev");}
void  S1564C3 ::v24(){vfunc_called(this, "_ZN7S1564C33v24Ev");}
void  S1564C3 ::v25(){vfunc_called(this, "_ZN7S1564C33v25Ev");}
void  S1564C3 ::v26(){vfunc_called(this, "_ZN7S1564C33v26Ev");}
void  S1564C3 ::v27(){vfunc_called(this, "_ZN7S1564C33v27Ev");}
void  S1564C3 ::v28(){vfunc_called(this, "_ZN7S1564C33v28Ev");}
void  S1564C3 ::v29(){vfunc_called(this, "_ZN7S1564C33v29Ev");}
void  S1564C3 ::v30(){vfunc_called(this, "_ZN7S1564C33v30Ev");}
void  S1564C3 ::v31(){vfunc_called(this, "_ZN7S1564C33v31Ev");}
void  S1564C3 ::v32(){vfunc_called(this, "_ZN7S1564C33v32Ev");}
void  S1564C3 ::v33(){vfunc_called(this, "_ZN7S1564C33v33Ev");}
void  S1564C3 ::v34(){vfunc_called(this, "_ZN7S1564C33v34Ev");}
void  S1564C3 ::v35(){vfunc_called(this, "_ZN7S1564C33v35Ev");}
void  S1564C3 ::v36(){vfunc_called(this, "_ZN7S1564C33v36Ev");}
void  S1564C3 ::v37(){vfunc_called(this, "_ZN7S1564C33v37Ev");}
S1564C3 ::S1564C3(){ note_ctor("S1564C3", this);} // tgen

static void Test_S1564C3()
{
  extern Class_Descriptor cd_S1564C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(36,54)];
    init_test(&cd_S1564C3, buf);
    S1564C3 *dp, &lv = *(dp=new (buf) S1564C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(280,212), "sizeof(S1564C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1564C3)");
    check_base_class_offset(lv, (S1564C4*), 0, "S1564C3");
    set_bf_and_test(lv, s1564c3f0, ABISELECT(112,76), 0, 1, 1, "S1564C3");
    set_bf_and_test(lv, s1564c3f1, ABISELECT(112,76), 1, 1, 1, "S1564C3");
    set_bf_and_test(lv, s1564c3f2, ABISELECT(112,76), 2, 1, 1, "S1564C3");
    set_bf_and_test(lv, s1564c3f3, ABISELECT(112,76), 3, 1, 1, "S1564C3");
    set_bf_and_test(lv, s1564c3f4, ABISELECT(112,76), 4, 1, 1, "S1564C3");
    set_bf_and_test(lv, s1564c3f5, ABISELECT(112,76), 5, 1, 1, "S1564C3");
    set_bf_and_test(lv, s1564c3f6, ABISELECT(112,76), 6, 1, 1, "S1564C3");
    check_field_offset(lv, s1564c3f7, ABISELECT(113,77), "S1564C3.s1564c3f7");
    check_field_offset(lv, s1564c3f8, ABISELECT(116,80), "S1564C3.s1564c3f8");
    check_field_offset(lv, s1564c3f9, ABISELECT(124,88), "S1564C3.s1564c3f9");
    check_field_offset(lv, s1564c3f10, ABISELECT(136,96), "S1564C3.s1564c3f10");
    check_field_offset(lv, s1564c3f11, ABISELECT(144,100), "S1564C3.s1564c3f11");
    check_field_offset(lv, s1564c3f12, ABISELECT(160,116), "S1564C3.s1564c3f12");
    check_field_offset(lv, s1564c3f13, ABISELECT(176,132), "S1564C3.s1564c3f13");
    check_field_offset(lv, s1564c3f14, ABISELECT(192,148), "S1564C3.s1564c3f14");
    check_field_offset(lv, s1564c3f15, ABISELECT(224,180), "S1564C3.s1564c3f15");
    check_field_offset(lv, s1564c3f16, ABISELECT(232,184), "S1564C3.s1564c3f16");
    check_field_offset(lv, s1564c3f17, ABISELECT(236,188), "S1564C3.s1564c3f17");
    check_field_offset(lv, s1564c3f18, ABISELECT(240,192), "S1564C3.s1564c3f18");
    check_field_offset(lv, s1564c3f19, ABISELECT(272,208), "S1564C3.s1564c3f19");
    test_class_info(&lv, &cd_S1564C3);
    dp->~S1564C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1564C3(Test_S1564C3, "S1564C3", ABISELECT(280,212));

#else // __cplusplus

extern void _ZN7S1564C3C1Ev();
extern void _ZN7S1564C3D1Ev();
Name_Map name_map_S1564C3[] = {
  NSPAIR(_ZN7S1564C3C1Ev),
  NSPAIR(_ZN7S1564C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1564C4;
extern VTBL_ENTRY _ZTI7S1564C4[];
extern  VTBL_ENTRY _ZTV7S1564C4[];
static Base_Class bases_S1564C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1564C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1564C3[];
extern void _ZN7S1564C3D1Ev();
extern void _ZN7S1564C3D0Ev();
extern void _ZN7S1564C42v8Ev();
extern void _ZN7S1564C42v9Ev();
extern void _ZN7S1564C43v10Ev();
extern void _ZN7S1564C43v11Ev();
extern void _ZN7S1564C43v12Ev();
extern void _ZN7S1564C43v13Ev();
extern void _ZN7S1564C43v14Ev();
extern void _ZN7S1564C43v15Ev();
extern void _ZN7S1564C43v16Ev();
extern void _ZN7S1564C43v17Ev();
extern void _ZN7S1564C43v18Ev();
extern void _ZN7S1564C43v19Ev();
extern void _ZN7S1564C43v20Ev();
extern void _ZN7S1564C43v21Ev();
extern void _ZN7S1564C43v22Ev();
extern void _ZN7S1564C33v23Ev();
extern void _ZN7S1564C33v24Ev();
extern void _ZN7S1564C33v25Ev();
extern void _ZN7S1564C33v26Ev();
extern void _ZN7S1564C33v27Ev();
extern void _ZN7S1564C33v28Ev();
extern void _ZN7S1564C33v29Ev();
extern void _ZN7S1564C33v30Ev();
extern void _ZN7S1564C33v31Ev();
extern void _ZN7S1564C33v32Ev();
extern void _ZN7S1564C33v33Ev();
extern void _ZN7S1564C33v34Ev();
extern void _ZN7S1564C33v35Ev();
extern void _ZN7S1564C33v36Ev();
extern void _ZN7S1564C33v37Ev();
static  VTBL_ENTRY vtc_S1564C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1564C3[0]),
  (VTBL_ENTRY)&_ZN7S1564C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1564C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1564C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1564C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1564C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1564C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1564C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1564C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1564C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1564C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1564C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1564C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1564C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1564C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1564C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1564C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1564C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1564C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1564C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1564C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1564C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1564C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1564C33v28Ev,
  (VTBL_ENTRY)&_ZN7S1564C33v29Ev,
  (VTBL_ENTRY)&_ZN7S1564C33v30Ev,
  (VTBL_ENTRY)&_ZN7S1564C33v31Ev,
  (VTBL_ENTRY)&_ZN7S1564C33v32Ev,
  (VTBL_ENTRY)&_ZN7S1564C33v33Ev,
  (VTBL_ENTRY)&_ZN7S1564C33v34Ev,
  (VTBL_ENTRY)&_ZN7S1564C33v35Ev,
  (VTBL_ENTRY)&_ZN7S1564C33v36Ev,
  (VTBL_ENTRY)&_ZN7S1564C33v37Ev,
};
extern VTBL_ENTRY _ZTI7S1564C3[];
extern  VTBL_ENTRY _ZTV7S1564C3[];
Class_Descriptor cd_S1564C3 = {  "S1564C3", // class name
  bases_S1564C3, 1,
  &(vtc_S1564C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(280,212), // object size
  NSPAIRA(_ZTI7S1564C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1564C3),34, //virtual function table var
  2, // 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  S1564C13_nt  {
  virtual  ~S1564C13_nt(); // _ZN11S1564C13_ntD1Ev
  virtual void  v38(); // _ZN11S1564C13_nt3v38Ev
  virtual void  v39(); // _ZN11S1564C13_nt3v39Ev
  virtual void  v40(); // _ZN11S1564C13_nt3v40Ev
  virtual void  v41(); // _ZN11S1564C13_nt3v41Ev
  virtual void  v42(); // _ZN11S1564C13_nt3v42Ev
  virtual void  v43(); // _ZN11S1564C13_nt3v43Ev
  S1564C13_nt(); // tgen
};
//SIG(-1 S1564C13_nt) C1{ vd v1 v2 v3 v4 v5 v6}


 S1564C13_nt ::~S1564C13_nt(){ note_dtor("S1564C13_nt", this);}
void  S1564C13_nt ::v38(){vfunc_called(this, "_ZN11S1564C13_nt3v38Ev");}
void  S1564C13_nt ::v39(){vfunc_called(this, "_ZN11S1564C13_nt3v39Ev");}
void  S1564C13_nt ::v40(){vfunc_called(this, "_ZN11S1564C13_nt3v40Ev");}
void  S1564C13_nt ::v41(){vfunc_called(this, "_ZN11S1564C13_nt3v41Ev");}
void  S1564C13_nt ::v42(){vfunc_called(this, "_ZN11S1564C13_nt3v42Ev");}
void  S1564C13_nt ::v43(){vfunc_called(this, "_ZN11S1564C13_nt3v43Ev");}
S1564C13_nt ::S1564C13_nt(){ note_ctor("S1564C13_nt", this);} // tgen

//skip512 S1564C13_nt

#else // __cplusplus

extern void _ZN11S1564C13_ntC1Ev();
extern void _ZN11S1564C13_ntD1Ev();
Name_Map name_map_S1564C13_nt[] = {
  NSPAIR(_ZN11S1564C13_ntC1Ev),
  NSPAIR(_ZN11S1564C13_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S1564C13_nt[];
extern void _ZN11S1564C13_ntD1Ev();
extern void _ZN11S1564C13_ntD0Ev();
extern void _ZN11S1564C13_nt3v38Ev();
extern void _ZN11S1564C13_nt3v39Ev();
extern void _ZN11S1564C13_nt3v40Ev();
extern void _ZN11S1564C13_nt3v41Ev();
extern void _ZN11S1564C13_nt3v42Ev();
extern void _ZN11S1564C13_nt3v43Ev();
static  VTBL_ENTRY vtc_S1564C13_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S1564C13_nt[0]),
  (VTBL_ENTRY)&_ZN11S1564C13_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S1564C13_ntD0Ev,
  (VTBL_ENTRY)&_ZN11S1564C13_nt3v38Ev,
  (VTBL_ENTRY)&_ZN11S1564C13_nt3v39Ev,
  (VTBL_ENTRY)&_ZN11S1564C13_nt3v40Ev,
  (VTBL_ENTRY)&_ZN11S1564C13_nt3v41Ev,
  (VTBL_ENTRY)&_ZN11S1564C13_nt3v42Ev,
  (VTBL_ENTRY)&_ZN11S1564C13_nt3v43Ev,
};
extern VTBL_ENTRY _ZTI11S1564C13_nt[];
VTBL_ENTRY *P__ZTI11S1564C13_nt = _ZTI11S1564C13_nt; 
extern  VTBL_ENTRY _ZTV11S1564C13_nt[];
Class_Descriptor cd_S1564C13_nt = {  "S1564C13_nt", // class name
  0,0,//no base classes
  &(vtc_S1564C13_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI11S1564C13_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S1564C13_nt),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1564C14  {
  ::S2120C13_nt s1564c14f0;
  ::S2120C13_nt s1564c14f1;
  ::S2120C13_nt s1564c14f2;
  void  mf1564c14(); // _ZN8S1564C149mf1564c14Ev
};
//SIG(-1 S1564C14) C1{ m FC2{ m FC3{ m FL[2]}} FC2 FC2}


void  S1564C14 ::mf1564c14(){}

static void Test_S1564C14()
{
  {
    init_simple_test("S1564C14");
    S1564C14 lv;
    check2(sizeof(lv), 48, "sizeof(S1564C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1564C14)");
    check_field_offset(lv, s1564c14f0, 0, "S1564C14.s1564c14f0");
    check_field_offset(lv, s1564c14f1, 16, "S1564C14.s1564c14f1");
    check_field_offset(lv, s1564c14f2, 32, "S1564C14.s1564c14f2");
  }
}
static Arrange_To_Call_Me vS1564C14(Test_S1564C14, "S1564C14", 48);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1564C15  {
  int s1564c15f0;
  int s1564c15f1;
  int s1564c15f2;
  int s1564c15f3;
  void  mf1564c15(); // _ZN8S1564C159mf1564c15Ev
};
//SIG(-1 S1564C15) C1{ m Fi[4]}


void  S1564C15 ::mf1564c15(){}

static void Test_S1564C15()
{
  {
    init_simple_test("S1564C15");
    S1564C15 lv;
    check2(sizeof(lv), 16, "sizeof(S1564C15)");
    check2(__alignof__(lv), 4, "__alignof__(S1564C15)");
    check_field_offset(lv, s1564c15f0, 0, "S1564C15.s1564c15f0");
    check_field_offset(lv, s1564c15f1, 4, "S1564C15.s1564c15f1");
    check_field_offset(lv, s1564c15f2, 8, "S1564C15.s1564c15f2");
    check_field_offset(lv, s1564c15f3, 12, "S1564C15.s1564c15f3");
  }
}
static Arrange_To_Call_Me vS1564C15(Test_S1564C15, "S1564C15", 16);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1564C2  : S1564C3 , S1564C13_nt {
  ::S1564C14 s1564c2f0;
  ::S1564C14 s1564c2f1;
  ::S601C13_nt s1564c2f2;
  void *s1564c2f3;
  ::S1564C15 s1564c2f4;
  ::S1564C15 s1564c2f5;
  int s1564c2f6;
  int s1564c2f7;
  void *s1564c2f8;
  int s1564c2f9;
  char s1564c2f10;
  ::S1564C15 s1564c2f11;
  ::S1564C15 s1564c2f12;
  ::S601C29_nt s1564c2f13;
  ::S601C29_nt s1564c2f14;
  ::S601C29_nt s1564c2f15;
  ::S601C29_nt s1564c2f16;
  char s1564c2f17;
  int s1564c2f18;
  int s1564c2f19;
  char s1564c2f20;
  char s1564c2f21;
  char s1564c2f22;
  ::S601C29_nt s1564c2f23;
  int s1564c2f24;
  ::S2120C13_nt s1564c2f25;
  ::S1564C15 s1564c2f26;
  int s1564c2f27;
  char s1564c2f28;
  void *s1564c2f29;
  virtual  ~S1564C2(); // _ZN7S1564C2D1Ev
  virtual void  v44(); // _ZN7S1564C23v44Ev
  virtual void  v45(); // _ZN7S1564C23v45Ev
  virtual void  v46(); // _ZN7S1564C23v46Ev
  virtual void  v47(); // _ZN7S1564C23v47Ev
  virtual void  v48(); // _ZN7S1564C23v48Ev
  virtual void  v49(); // _ZN7S1564C23v49Ev
  virtual void  v50(); // _ZN7S1564C23v50Ev
  virtual void  v51(); // _ZN7S1564C23v51Ev
  virtual void  v52(); // _ZN7S1564C23v52Ev
  virtual void  v53(); // _ZN7S1564C23v53Ev
  virtual void  v54(); // _ZN7S1564C23v54Ev
  virtual void  v55(); // _ZN7S1564C23v55Ev
  virtual void  v56(); // _ZN7S1564C23v56Ev
  virtual void  v57(); // _ZN7S1564C23v57Ev
  virtual void  v58(); // _ZN7S1564C23v58Ev
  virtual void  v59(); // _ZN7S1564C23v59Ev
  virtual void  v60(); // _ZN7S1564C23v60Ev
  virtual void  v61(); // _ZN7S1564C23v61Ev
  virtual void  v62(); // _ZN7S1564C23v62Ev
  virtual void  v63(); // _ZN7S1564C23v63Ev
  virtual void  v64(); // _ZN7S1564C23v64Ev
  virtual void  v65(); // _ZN7S1564C23v65Ev
  virtual void  v66(); // _ZN7S1564C23v66Ev
  virtual void  v67(); // _ZN7S1564C23v67Ev
  S1564C2(); // tgen
};
//SIG(-1 S1564C2) C1{ BC2{ BC3{ vd v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 FC4{ m FC5{ m FL[2]}} FC4 Fp Fi FU6{ m FC7{ Fi:4 Fi:4 Fi:4 Fi:2 Fi:1 Fi:17} Fi} Fi:2 Fi:2 Fc:1 Fc:1 FC8{ m Fp Fp} FC9{ Fp Fp}[2]} vd v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc Fi[2] Fi[2] Fp FC4 FC4 FC4 FC10{ m FC4 FC4} Fp Fi Fi FC11{ m Fp}[4] Fp} BC12{ vd v55 v56 v57 v58 v59 v60} 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 FC13{ m FC4 FC4 FC4} FC13 FC11 Fp FC14{ m Fi Fi Fi Fi} FC14 Fi Fi Fp Fi Fc FC14 FC14 FC15{ m FC16{ m FL}} FC15 FC15 FC15 Fc Fi Fi Fc Fc Fc FC15 Fi FC4 FC14 Fi Fc Fp}


 S1564C2 ::~S1564C2(){ note_dtor("S1564C2", this);}
void  S1564C2 ::v44(){vfunc_called(this, "_ZN7S1564C23v44Ev");}
void  S1564C2 ::v45(){vfunc_called(this, "_ZN7S1564C23v45Ev");}
void  S1564C2 ::v46(){vfunc_called(this, "_ZN7S1564C23v46Ev");}
void  S1564C2 ::v47(){vfunc_called(this, "_ZN7S1564C23v47Ev");}
void  S1564C2 ::v48(){vfunc_called(this, "_ZN7S1564C23v48Ev");}
void  S1564C2 ::v49(){vfunc_called(this, "_ZN7S1564C23v49Ev");}
void  S1564C2 ::v50(){vfunc_called(this, "_ZN7S1564C23v50Ev");}
void  S1564C2 ::v51(){vfunc_called(this, "_ZN7S1564C23v51Ev");}
void  S1564C2 ::v52(){vfunc_called(this, "_ZN7S1564C23v52Ev");}
void  S1564C2 ::v53(){vfunc_called(this, "_ZN7S1564C23v53Ev");}
void  S1564C2 ::v54(){vfunc_called(this, "_ZN7S1564C23v54Ev");}
void  S1564C2 ::v55(){vfunc_called(this, "_ZN7S1564C23v55Ev");}
void  S1564C2 ::v56(){vfunc_called(this, "_ZN7S1564C23v56Ev");}
void  S1564C2 ::v57(){vfunc_called(this, "_ZN7S1564C23v57Ev");}
void  S1564C2 ::v58(){vfunc_called(this, "_ZN7S1564C23v58Ev");}
void  S1564C2 ::v59(){vfunc_called(this, "_ZN7S1564C23v59Ev");}
void  S1564C2 ::v60(){vfunc_called(this, "_ZN7S1564C23v60Ev");}
void  S1564C2 ::v61(){vfunc_called(this, "_ZN7S1564C23v61Ev");}
void  S1564C2 ::v62(){vfunc_called(this, "_ZN7S1564C23v62Ev");}
void  S1564C2 ::v63(){vfunc_called(this, "_ZN7S1564C23v63Ev");}
void  S1564C2 ::v64(){vfunc_called(this, "_ZN7S1564C23v64Ev");}
void  S1564C2 ::v65(){vfunc_called(this, "_ZN7S1564C23v65Ev");}
void  S1564C2 ::v66(){vfunc_called(this, "_ZN7S1564C23v66Ev");}
void  S1564C2 ::v67(){vfunc_called(this, "_ZN7S1564C23v67Ev");}
S1564C2 ::S1564C2(){ note_ctor("S1564C2", this);} // tgen

static void Test_S1564C2()
{
  extern Class_Descriptor cd_S1564C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(76,128)];
    init_test(&cd_S1564C2, buf);
    S1564C2 *dp, &lv = *(dp=new (buf) S1564C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(600,508), "sizeof(S1564C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1564C2)");
    check_base_class_offset(lv, (S1564C4*)(S1564C3*), 0, "S1564C2");
    check_base_class_offset(lv, (S1564C3*), 0, "S1564C2");
    check_base_class_offset(lv, (S1564C13_nt*), ABISELECT(280,212), "S1564C2");
    check_field_offset(lv, s1564c2f0, ABISELECT(288,216), "S1564C2.s1564c2f0");
    check_field_offset(lv, s1564c2f1, ABISELECT(336,264), "S1564C2.s1564c2f1");
    check_field_offset(lv, s1564c2f2, ABISELECT(384,312), "S1564C2.s1564c2f2");
    check_field_offset(lv, s1564c2f3, ABISELECT(392,316), "S1564C2.s1564c2f3");
    check_field_offset(lv, s1564c2f4, ABISELECT(400,320), "S1564C2.s1564c2f4");
    check_field_offset(lv, s1564c2f5, ABISELECT(416,336), "S1564C2.s1564c2f5");
    check_field_offset(lv, s1564c2f6, ABISELECT(432,352), "S1564C2.s1564c2f6");
    check_field_offset(lv, s1564c2f7, ABISELECT(436,356), "S1564C2.s1564c2f7");
    check_field_offset(lv, s1564c2f8, ABISELECT(440,360), "S1564C2.s1564c2f8");
    check_field_offset(lv, s1564c2f9, ABISELECT(448,364), "S1564C2.s1564c2f9");
    check_field_offset(lv, s1564c2f10, ABISELECT(452,368), "S1564C2.s1564c2f10");
    check_field_offset(lv, s1564c2f11, ABISELECT(456,372), "S1564C2.s1564c2f11");
    check_field_offset(lv, s1564c2f12, ABISELECT(472,388), "S1564C2.s1564c2f12");
    check_field_offset(lv, s1564c2f13, ABISELECT(488,404), "S1564C2.s1564c2f13");
    check_field_offset(lv, s1564c2f14, ABISELECT(496,412), "S1564C2.s1564c2f14");
    check_field_offset(lv, s1564c2f15, ABISELECT(504,420), "S1564C2.s1564c2f15");
    check_field_offset(lv, s1564c2f16, ABISELECT(512,428), "S1564C2.s1564c2f16");
    check_field_offset(lv, s1564c2f17, ABISELECT(520,436), "S1564C2.s1564c2f17");
    check_field_offset(lv, s1564c2f18, ABISELECT(524,440), "S1564C2.s1564c2f18");
    check_field_offset(lv, s1564c2f19, ABISELECT(528,444), "S1564C2.s1564c2f19");
    check_field_offset(lv, s1564c2f20, ABISELECT(532,448), "S1564C2.s1564c2f20");
    check_field_offset(lv, s1564c2f21, ABISELECT(533,449), "S1564C2.s1564c2f21");
    check_field_offset(lv, s1564c2f22, ABISELECT(534,450), "S1564C2.s1564c2f22");
    check_field_offset(lv, s1564c2f23, ABISELECT(536,452), "S1564C2.s1564c2f23");
    check_field_offset(lv, s1564c2f24, ABISELECT(544,460), "S1564C2.s1564c2f24");
    check_field_offset(lv, s1564c2f25, ABISELECT(552,464), "S1564C2.s1564c2f25");
    check_field_offset(lv, s1564c2f26, ABISELECT(568,480), "S1564C2.s1564c2f26");
    check_field_offset(lv, s1564c2f27, ABISELECT(584,496), "S1564C2.s1564c2f27");
    check_field_offset(lv, s1564c2f28, ABISELECT(588,500), "S1564C2.s1564c2f28");
    check_field_offset(lv, s1564c2f29, ABISELECT(592,504), "S1564C2.s1564c2f29");
    test_class_info(&lv, &cd_S1564C2);
    dp->~S1564C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1564C2(Test_S1564C2, "S1564C2", ABISELECT(600,508));

#else // __cplusplus

extern void _ZN7S1564C2C1Ev();
extern void _ZN7S1564C2D1Ev();
Name_Map name_map_S1564C2[] = {
  NSPAIR(_ZN7S1564C2C1Ev),
  NSPAIR(_ZN7S1564C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1564C4;
extern VTBL_ENTRY _ZTI7S1564C4[];
extern  VTBL_ENTRY _ZTV7S1564C4[];
extern Class_Descriptor cd_S1564C3;
extern VTBL_ENTRY _ZTI7S1564C3[];
extern  VTBL_ENTRY _ZTV7S1564C3[];
extern Class_Descriptor cd_S1564C13_nt;
extern VTBL_ENTRY _ZTI11S1564C13_nt[];
extern  VTBL_ENTRY _ZTV11S1564C13_nt[];
static Base_Class bases_S1564C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1564C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1564C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S1564C13_nt,    ABISELECT(280,212), //bcp->offset
    58, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S1564C2[];
extern void _ZN7S1564C2D1Ev();
extern void _ZN7S1564C2D0Ev();
extern void _ZN7S1564C42v8Ev();
extern void _ZN7S1564C42v9Ev();
extern void _ZN7S1564C43v10Ev();
extern void _ZN7S1564C43v11Ev();
extern void _ZN7S1564C43v12Ev();
extern void _ZN7S1564C43v13Ev();
extern void _ZN7S1564C43v14Ev();
extern void _ZN7S1564C43v15Ev();
extern void _ZN7S1564C43v16Ev();
extern void _ZN7S1564C43v17Ev();
extern void _ZN7S1564C43v18Ev();
extern void _ZN7S1564C43v19Ev();
extern void _ZN7S1564C43v20Ev();
extern void _ZN7S1564C43v21Ev();
extern void _ZN7S1564C43v22Ev();
extern void _ZN7S1564C33v23Ev();
extern void _ZN7S1564C33v24Ev();
extern void _ZN7S1564C33v25Ev();
extern void _ZN7S1564C33v26Ev();
extern void _ZN7S1564C33v27Ev();
extern void _ZN7S1564C33v28Ev();
extern void _ZN7S1564C33v29Ev();
extern void _ZN7S1564C33v30Ev();
extern void _ZN7S1564C33v31Ev();
extern void _ZN7S1564C33v32Ev();
extern void _ZN7S1564C33v33Ev();
extern void _ZN7S1564C33v34Ev();
extern void _ZN7S1564C33v35Ev();
extern void _ZN7S1564C33v36Ev();
extern void _ZN7S1564C33v37Ev();
extern void _ZN7S1564C23v44Ev();
extern void _ZN7S1564C23v45Ev();
extern void _ZN7S1564C23v46Ev();
extern void _ZN7S1564C23v47Ev();
extern void _ZN7S1564C23v48Ev();
extern void _ZN7S1564C23v49Ev();
extern void _ZN7S1564C23v50Ev();
extern void _ZN7S1564C23v51Ev();
extern void _ZN7S1564C23v52Ev();
extern void _ZN7S1564C23v53Ev();
extern void _ZN7S1564C23v54Ev();
extern void _ZN7S1564C23v55Ev();
extern void _ZN7S1564C23v56Ev();
extern void _ZN7S1564C23v57Ev();
extern void _ZN7S1564C23v58Ev();
extern void _ZN7S1564C23v59Ev();
extern void _ZN7S1564C23v60Ev();
extern void _ZN7S1564C23v61Ev();
extern void _ZN7S1564C23v62Ev();
extern void _ZN7S1564C23v63Ev();
extern void _ZN7S1564C23v64Ev();
extern void _ZN7S1564C23v65Ev();
extern void _ZN7S1564C23v66Ev();
extern void _ZN7S1564C23v67Ev();
extern void ABISELECT(_ZThn280_N7S1564C2D1Ev,_ZThn212_N7S1564C2D1Ev)();
extern void ABISELECT(_ZThn280_N7S1564C2D0Ev,_ZThn212_N7S1564C2D0Ev)();
extern void _ZN11S1564C13_nt3v38Ev();
extern void _ZN11S1564C13_nt3v39Ev();
extern void _ZN11S1564C13_nt3v40Ev();
extern void _ZN11S1564C13_nt3v41Ev();
extern void _ZN11S1564C13_nt3v42Ev();
extern void _ZN11S1564C13_nt3v43Ev();
static  VTBL_ENTRY vtc_S1564C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1564C2[0]),
  (VTBL_ENTRY)&_ZN7S1564C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1564C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1564C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1564C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1564C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1564C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1564C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1564C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1564C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1564C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1564C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1564C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1564C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1564C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1564C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1564C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1564C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1564C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1564C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1564C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1564C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1564C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1564C33v28Ev,
  (VTBL_ENTRY)&_ZN7S1564C33v29Ev,
  (VTBL_ENTRY)&_ZN7S1564C33v30Ev,
  (VTBL_ENTRY)&_ZN7S1564C33v31Ev,
  (VTBL_ENTRY)&_ZN7S1564C33v32Ev,
  (VTBL_ENTRY)&_ZN7S1564C33v33Ev,
  (VTBL_ENTRY)&_ZN7S1564C33v34Ev,
  (VTBL_ENTRY)&_ZN7S1564C33v35Ev,
  (VTBL_ENTRY)&_ZN7S1564C33v36Ev,
  (VTBL_ENTRY)&_ZN7S1564C33v37Ev,
  (VTBL_ENTRY)&_ZN7S1564C23v44Ev,
  (VTBL_ENTRY)&_ZN7S1564C23v45Ev,
  (VTBL_ENTRY)&_ZN7S1564C23v46Ev,
  (VTBL_ENTRY)&_ZN7S1564C23v47Ev,
  (VTBL_ENTRY)&_ZN7S1564C23v48Ev,
  (VTBL_ENTRY)&_ZN7S1564C23v49Ev,
  (VTBL_ENTRY)&_ZN7S1564C23v50Ev,
  (VTBL_ENTRY)&_ZN7S1564C23v51Ev,
  (VTBL_ENTRY)&_ZN7S1564C23v52Ev,
  (VTBL_ENTRY)&_ZN7S1564C23v53Ev,
  (VTBL_ENTRY)&_ZN7S1564C23v54Ev,
  (VTBL_ENTRY)&_ZN7S1564C23v55Ev,
  (VTBL_ENTRY)&_ZN7S1564C23v56Ev,
  (VTBL_ENTRY)&_ZN7S1564C23v57Ev,
  (VTBL_ENTRY)&_ZN7S1564C23v58Ev,
  (VTBL_ENTRY)&_ZN7S1564C23v59Ev,
  (VTBL_ENTRY)&_ZN7S1564C23v60Ev,
  (VTBL_ENTRY)&_ZN7S1564C23v61Ev,
  (VTBL_ENTRY)&_ZN7S1564C23v62Ev,
  (VTBL_ENTRY)&_ZN7S1564C23v63Ev,
  (VTBL_ENTRY)&_ZN7S1564C23v64Ev,
  (VTBL_ENTRY)&_ZN7S1564C23v65Ev,
  (VTBL_ENTRY)&_ZN7S1564C23v66Ev,
  (VTBL_ENTRY)&_ZN7S1564C23v67Ev,
  ABISELECT(-280,-212),
  (VTBL_ENTRY)&(_ZTI7S1564C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn280_N7S1564C2D1Ev,_ZThn212_N7S1564C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn280_N7S1564C2D0Ev,_ZThn212_N7S1564C2D0Ev),
  (VTBL_ENTRY)&_ZN11S1564C13_nt3v38Ev,
  (VTBL_ENTRY)&_ZN11S1564C13_nt3v39Ev,
  (VTBL_ENTRY)&_ZN11S1564C13_nt3v40Ev,
  (VTBL_ENTRY)&_ZN11S1564C13_nt3v41Ev,
  (VTBL_ENTRY)&_ZN11S1564C13_nt3v42Ev,
  (VTBL_ENTRY)&_ZN11S1564C13_nt3v43Ev,
};
extern VTBL_ENTRY _ZTI7S1564C2[];
extern  VTBL_ENTRY _ZTV7S1564C2[];
Class_Descriptor cd_S1564C2 = {  "S1564C2", // class name
  bases_S1564C2, 3,
  &(vtc_S1564C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(600,508), // object size
  NSPAIRA(_ZTI7S1564C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S1564C2),68, //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  S1564C1  : S1564C2 {
  ::S1564C15 s1564c1f0;
  char s1564c1f1;
  ::S2120C13_nt s1564c1f2;
  char s1564c1f3;
  void *s1564c1f4;
  void *s1564c1f5;
  char s1564c1f6;
  char s1564c1f7;
  char s1564c1f8;
  ::S601C13_nt s1564c1f9;
  char s1564c1f10;
  virtual  ~S1564C1(); // _ZN7S1564C1D1Ev
  virtual void  v1(); // _ZN7S1564C12v1Ev
  virtual void  v2(); // _ZN7S1564C12v2Ev
  virtual void  v3(); // _ZN7S1564C12v3Ev
  virtual void  v4(); // _ZN7S1564C12v4Ev
  virtual void  v5(); // _ZN7S1564C12v5Ev
  virtual void  v6(); // _ZN7S1564C12v6Ev
  virtual void  v7(); // _ZN7S1564C12v7Ev
  S1564C1(); // tgen
};
//SIG(1 S1564C1) C1{ BC2{ BC3{ BC4{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 FC5{ m FC6{ m FL[2]}} FC5 Fp Fi FU7{ m FC8{ Fi:4 Fi:4 Fi:4 Fi:2 Fi:1 Fi:17} Fi} Fi:2 Fi:2 Fc:1 Fc:1 FC9{ m Fp Fp} FC10{ Fp Fp}[2]} vd v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc Fi[2] Fi[2] Fp FC5 FC5 FC5 FC11{ m FC5 FC5} Fp Fi Fi FC12{ m Fp}[4] Fp} BC13{ vd v38 v39 v40 v41 v42 v43} vd v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 FC14{ m FC5 FC5 FC5} FC14 FC12 Fp FC15{ m Fi Fi Fi Fi} FC15 Fi Fi Fp Fi Fc FC15 FC15 FC16{ m FC17{ m FL}} FC16 FC16 FC16 Fc Fi Fi Fc Fc Fc FC16 Fi FC5 FC15 Fi Fc Fp} vd v1 v2 v3 v4 v5 v6 v7 FC15 Fc FC5 Fc Fp Fp Fc Fc Fc FC12 Fc}


 S1564C1 ::~S1564C1(){ note_dtor("S1564C1", this);}
void  S1564C1 ::v1(){vfunc_called(this, "_ZN7S1564C12v1Ev");}
void  S1564C1 ::v2(){vfunc_called(this, "_ZN7S1564C12v2Ev");}
void  S1564C1 ::v3(){vfunc_called(this, "_ZN7S1564C12v3Ev");}
void  S1564C1 ::v4(){vfunc_called(this, "_ZN7S1564C12v4Ev");}
void  S1564C1 ::v5(){vfunc_called(this, "_ZN7S1564C12v5Ev");}
void  S1564C1 ::v6(){vfunc_called(this, "_ZN7S1564C12v6Ev");}
void  S1564C1 ::v7(){vfunc_called(this, "_ZN7S1564C12v7Ev");}
S1564C1 ::S1564C1(){ note_ctor("S1564C1", this);} // tgen

static void Test_S1564C1()
{
  extern Class_Descriptor cd_S1564C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(87,143)];
    init_test(&cd_S1564C1, buf);
    S1564C1 *dp, &lv = *(dp=new (buf) S1564C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(688,568), "sizeof(S1564C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1564C1)");
    check_base_class_offset(lv, (S1564C4*)(S1564C3*)(S1564C2*), 0, "S1564C1");
    check_base_class_offset(lv, (S1564C3*)(S1564C2*), 0, "S1564C1");
    check_base_class_offset(lv, (S1564C13_nt*)(S1564C2*), ABISELECT(280,212), "S1564C1");
    check_base_class_offset(lv, (S1564C2*), 0, "S1564C1");
    check_field_offset(lv, s1564c1f0, ABISELECT(600,508), "S1564C1.s1564c1f0");
    check_field_offset(lv, s1564c1f1, ABISELECT(616,524), "S1564C1.s1564c1f1");
    check_field_offset(lv, s1564c1f2, ABISELECT(624,528), "S1564C1.s1564c1f2");
    check_field_offset(lv, s1564c1f3, ABISELECT(640,544), "S1564C1.s1564c1f3");
    check_field_offset(lv, s1564c1f4, ABISELECT(648,548), "S1564C1.s1564c1f4");
    check_field_offset(lv, s1564c1f5, ABISELECT(656,552), "S1564C1.s1564c1f5");
    check_field_offset(lv, s1564c1f6, ABISELECT(664,556), "S1564C1.s1564c1f6");
    check_field_offset(lv, s1564c1f7, ABISELECT(665,557), "S1564C1.s1564c1f7");
    check_field_offset(lv, s1564c1f8, ABISELECT(666,558), "S1564C1.s1564c1f8");
    check_field_offset(lv, s1564c1f9, ABISELECT(672,560), "S1564C1.s1564c1f9");
    check_field_offset(lv, s1564c1f10, ABISELECT(680,564), "S1564C1.s1564c1f10");
    test_class_info(&lv, &cd_S1564C1);
    dp->~S1564C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1564C1(Test_S1564C1, "S1564C1", ABISELECT(688,568));

#else // __cplusplus

extern void _ZN7S1564C1C1Ev();
extern void _ZN7S1564C1D1Ev();
Name_Map name_map_S1564C1[] = {
  NSPAIR(_ZN7S1564C1C1Ev),
  NSPAIR(_ZN7S1564C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1564C4;
extern VTBL_ENTRY _ZTI7S1564C4[];
extern  VTBL_ENTRY _ZTV7S1564C4[];
extern Class_Descriptor cd_S1564C3;
extern VTBL_ENTRY _ZTI7S1564C3[];
extern  VTBL_ENTRY _ZTV7S1564C3[];
extern Class_Descriptor cd_S1564C13_nt;
extern VTBL_ENTRY _ZTI11S1564C13_nt[];
extern  VTBL_ENTRY _ZTV11S1564C13_nt[];
extern Class_Descriptor cd_S1564C2;
extern VTBL_ENTRY _ZTI7S1564C2[];
extern  VTBL_ENTRY _ZTV7S1564C2[];
static Base_Class bases_S1564C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1564C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1564C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S1564C13_nt,    ABISELECT(280,212), //bcp->offset
    65, //bcp->virtual_function_table_offset
    2, //num_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_S1564C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1564C1[];
extern void _ZN7S1564C1D1Ev();
extern void _ZN7S1564C1D0Ev();
extern void _ZN7S1564C42v8Ev();
extern void _ZN7S1564C42v9Ev();
extern void _ZN7S1564C43v10Ev();
extern void _ZN7S1564C43v11Ev();
extern void _ZN7S1564C43v12Ev();
extern void _ZN7S1564C43v13Ev();
extern void _ZN7S1564C43v14Ev();
extern void _ZN7S1564C43v15Ev();
extern void _ZN7S1564C43v16Ev();
extern void _ZN7S1564C43v17Ev();
extern void _ZN7S1564C43v18Ev();
extern void _ZN7S1564C43v19Ev();
extern void _ZN7S1564C43v20Ev();
extern void _ZN7S1564C43v21Ev();
extern void _ZN7S1564C43v22Ev();
extern void _ZN7S1564C33v23Ev();
extern void _ZN7S1564C33v24Ev();
extern void _ZN7S1564C33v25Ev();
extern void _ZN7S1564C33v26Ev();
extern void _ZN7S1564C33v27Ev();
extern void _ZN7S1564C33v28Ev();
extern void _ZN7S1564C33v29Ev();
extern void _ZN7S1564C33v30Ev();
extern void _ZN7S1564C33v31Ev();
extern void _ZN7S1564C33v32Ev();
extern void _ZN7S1564C33v33Ev();
extern void _ZN7S1564C33v34Ev();
extern void _ZN7S1564C33v35Ev();
extern void _ZN7S1564C33v36Ev();
extern void _ZN7S1564C33v37Ev();
extern void _ZN7S1564C23v44Ev();
extern void _ZN7S1564C23v45Ev();
extern void _ZN7S1564C23v46Ev();
extern void _ZN7S1564C23v47Ev();
extern void _ZN7S1564C23v48Ev();
extern void _ZN7S1564C23v49Ev();
extern void _ZN7S1564C23v50Ev();
extern void _ZN7S1564C23v51Ev();
extern void _ZN7S1564C23v52Ev();
extern void _ZN7S1564C23v53Ev();
extern void _ZN7S1564C23v54Ev();
extern void _ZN7S1564C23v55Ev();
extern void _ZN7S1564C23v56Ev();
extern void _ZN7S1564C23v57Ev();
extern void _ZN7S1564C23v58Ev();
extern void _ZN7S1564C23v59Ev();
extern void _ZN7S1564C23v60Ev();
extern void _ZN7S1564C23v61Ev();
extern void _ZN7S1564C23v62Ev();
extern void _ZN7S1564C23v63Ev();
extern void _ZN7S1564C23v64Ev();
extern void _ZN7S1564C23v65Ev();
extern void _ZN7S1564C23v66Ev();
extern void _ZN7S1564C23v67Ev();
extern void _ZN7S1564C12v1Ev();
extern void _ZN7S1564C12v2Ev();
extern void _ZN7S1564C12v3Ev();
extern void _ZN7S1564C12v4Ev();
extern void _ZN7S1564C12v5Ev();
extern void _ZN7S1564C12v6Ev();
extern void _ZN7S1564C12v7Ev();
extern void ABISELECT(_ZThn280_N7S1564C1D1Ev,_ZThn212_N7S1564C1D1Ev)();
extern void ABISELECT(_ZThn280_N7S1564C1D0Ev,_ZThn212_N7S1564C1D0Ev)();
extern void _ZN11S1564C13_nt3v38Ev();
extern void _ZN11S1564C13_nt3v39Ev();
extern void _ZN11S1564C13_nt3v40Ev();
extern void _ZN11S1564C13_nt3v41Ev();
extern void _ZN11S1564C13_nt3v42Ev();
extern void _ZN11S1564C13_nt3v43Ev();
static  VTBL_ENTRY vtc_S1564C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1564C1[0]),
  (VTBL_ENTRY)&_ZN7S1564C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1564C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1564C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1564C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1564C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1564C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1564C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1564C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1564C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1564C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1564C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1564C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1564C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1564C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1564C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1564C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1564C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1564C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1564C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1564C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1564C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1564C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1564C33v28Ev,
  (VTBL_ENTRY)&_ZN7S1564C33v29Ev,
  (VTBL_ENTRY)&_ZN7S1564C33v30Ev,
  (VTBL_ENTRY)&_ZN7S1564C33v31Ev,
  (VTBL_ENTRY)&_ZN7S1564C33v32Ev,
  (VTBL_ENTRY)&_ZN7S1564C33v33Ev,
  (VTBL_ENTRY)&_ZN7S1564C33v34Ev,
  (VTBL_ENTRY)&_ZN7S1564C33v35Ev,
  (VTBL_ENTRY)&_ZN7S1564C33v36Ev,
  (VTBL_ENTRY)&_ZN7S1564C33v37Ev,
  (VTBL_ENTRY)&_ZN7S1564C23v44Ev,
  (VTBL_ENTRY)&_ZN7S1564C23v45Ev,
  (VTBL_ENTRY)&_ZN7S1564C23v46Ev,
  (VTBL_ENTRY)&_ZN7S1564C23v47Ev,
  (VTBL_ENTRY)&_ZN7S1564C23v48Ev,
  (VTBL_ENTRY)&_ZN7S1564C23v49Ev,
  (VTBL_ENTRY)&_ZN7S1564C23v50Ev,
  (VTBL_ENTRY)&_ZN7S1564C23v51Ev,
  (VTBL_ENTRY)&_ZN7S1564C23v52Ev,
  (VTBL_ENTRY)&_ZN7S1564C23v53Ev,
  (VTBL_ENTRY)&_ZN7S1564C23v54Ev,
  (VTBL_ENTRY)&_ZN7S1564C23v55Ev,
  (VTBL_ENTRY)&_ZN7S1564C23v56Ev,
  (VTBL_ENTRY)&_ZN7S1564C23v57Ev,
  (VTBL_ENTRY)&_ZN7S1564C23v58Ev,
  (VTBL_ENTRY)&_ZN7S1564C23v59Ev,
  (VTBL_ENTRY)&_ZN7S1564C23v60Ev,
  (VTBL_ENTRY)&_ZN7S1564C23v61Ev,
  (VTBL_ENTRY)&_ZN7S1564C23v62Ev,
  (VTBL_ENTRY)&_ZN7S1564C23v63Ev,
  (VTBL_ENTRY)&_ZN7S1564C23v64Ev,
  (VTBL_ENTRY)&_ZN7S1564C23v65Ev,
  (VTBL_ENTRY)&_ZN7S1564C23v66Ev,
  (VTBL_ENTRY)&_ZN7S1564C23v67Ev,
  (VTBL_ENTRY)&_ZN7S1564C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1564C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1564C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1564C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1564C12v5Ev,
  (VTBL_ENTRY)&_ZN7S1564C12v6Ev,
  (VTBL_ENTRY)&_ZN7S1564C12v7Ev,
  ABISELECT(-280,-212),
  (VTBL_ENTRY)&(_ZTI7S1564C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn280_N7S1564C1D1Ev,_ZThn212_N7S1564C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn280_N7S1564C1D0Ev,_ZThn212_N7S1564C1D0Ev),
  (VTBL_ENTRY)&_ZN11S1564C13_nt3v38Ev,
  (VTBL_ENTRY)&_ZN11S1564C13_nt3v39Ev,
  (VTBL_ENTRY)&_ZN11S1564C13_nt3v40Ev,
  (VTBL_ENTRY)&_ZN11S1564C13_nt3v41Ev,
  (VTBL_ENTRY)&_ZN11S1564C13_nt3v42Ev,
  (VTBL_ENTRY)&_ZN11S1564C13_nt3v43Ev,
};
extern VTBL_ENTRY _ZTI7S1564C1[];
extern  VTBL_ENTRY _ZTV7S1564C1[];
Class_Descriptor cd_S1564C1 = {  "S1564C1", // class name
  bases_S1564C1, 4,
  &(vtc_S1564C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(688,568), // object size
  NSPAIRA(_ZTI7S1564C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1564C1),75, //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  S87C7  {
  int s87c7f0;
  __tsi64 s87c7f1;
  void *s87c7f2[4];
  int s87c7f3[2];
  void *s87c7f4;
  ::S3352C4_nt s87c7f5;
  void *s87c7f6[2];
  virtual  ~S87C7(); // _ZN5S87C7D1Ev
  virtual void  v4(); // _ZN5S87C72v4Ev
  virtual void  v5(); // _ZN5S87C72v5Ev
  virtual void  v6(); // _ZN5S87C72v6Ev
  virtual void  v7(); // _ZN5S87C72v7Ev
  virtual void  v8(); // _ZN5S87C72v8Ev
  virtual void  v9(); // _ZN5S87C72v9Ev
  virtual void  v10(); // _ZN5S87C73v10Ev
  virtual void  v11(); // _ZN5S87C73v11Ev
  virtual void  v12(); // _ZN5S87C73v12Ev
  virtual void  v13(); // _ZN5S87C73v13Ev
  virtual void  v14(); // _ZN5S87C73v14Ev
  virtual void  v15(); // _ZN5S87C73v15Ev
  virtual void  v16(); // _ZN5S87C73v16Ev
  virtual void  v17(); // _ZN5S87C73v17Ev
  virtual void  v18(); // _ZN5S87C73v18Ev
  virtual void  v19(); // _ZN5S87C73v19Ev
  virtual void  v20(); // _ZN5S87C73v20Ev
  virtual void  v21(); // _ZN5S87C73v21Ev
  virtual void  v22(); // _ZN5S87C73v22Ev
  virtual void  v23(); // _ZN5S87C73v23Ev
  virtual void  v24(); // _ZN5S87C73v24Ev
  virtual void  v25(); // _ZN5S87C73v25Ev
  virtual void  v26(); // _ZN5S87C73v26Ev
  virtual void  v27(); // _ZN5S87C73v27Ev
  virtual void  v28(); // _ZN5S87C73v28Ev
  virtual void  v29(); // _ZN5S87C73v29Ev
  virtual void  v30(); // _ZN5S87C73v30Ev
  virtual void  v31(); // _ZN5S87C73v31Ev
  virtual void  v32(); // _ZN5S87C73v32Ev
  virtual void  v33(); // _ZN5S87C73v33Ev
  virtual void  v34(); // _ZN5S87C73v34Ev
  virtual void  v35(); // _ZN5S87C73v35Ev
  virtual void  v36(); // _ZN5S87C73v36Ev
  virtual void  v37(); // _ZN5S87C73v37Ev
  virtual void  v38(); // _ZN5S87C73v38Ev
  virtual void  v39(); // _ZN5S87C73v39Ev
  virtual void  v40(); // _ZN5S87C73v40Ev
  virtual void  v41(); // _ZN5S87C73v41Ev
  virtual void  v42(); // _ZN5S87C73v42Ev
  virtual void  v43(); // _ZN5S87C73v43Ev
  virtual void  v44(); // _ZN5S87C73v44Ev
  virtual void  v45(); // _ZN5S87C73v45Ev
  virtual void  v46(); // _ZN5S87C73v46Ev
  virtual void  v47(); // _ZN5S87C73v47Ev
  virtual void  v48(); // _ZN5S87C73v48Ev
  virtual void  v49(); // _ZN5S87C73v49Ev
  virtual void  v50(); // _ZN5S87C73v50Ev
  virtual void  v51(); // _ZN5S87C73v51Ev
  virtual void  v52(); // _ZN5S87C73v52Ev
  virtual void  v53(); // _ZN5S87C73v53Ev
  virtual void  v54(); // _ZN5S87C73v54Ev
  virtual void  v55(); // _ZN5S87C73v55Ev
  virtual void  v56(); // _ZN5S87C73v56Ev
  virtual void  v57(); // _ZN5S87C73v57Ev
  virtual void  v58(); // _ZN5S87C73v58Ev
  virtual void  v59(); // _ZN5S87C73v59Ev
  virtual void  v60(); // _ZN5S87C73v60Ev
  virtual void  v61(); // _ZN5S87C73v61Ev
  virtual void  v62(); // _ZN5S87C73v62Ev
  virtual void  v63(); // _ZN5S87C73v63Ev
  virtual void  v64(); // _ZN5S87C73v64Ev
  virtual void  v65(); // _ZN5S87C73v65Ev
  virtual void  v66(); // _ZN5S87C73v66Ev
  virtual void  v67(); // _ZN5S87C73v67Ev
  S87C7(); // tgen
};
//SIG(-1 S87C7) 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]}


 S87C7 ::~S87C7(){ note_dtor("S87C7", this);}
void  S87C7 ::v4(){vfunc_called(this, "_ZN5S87C72v4Ev");}
void  S87C7 ::v5(){vfunc_called(this, "_ZN5S87C72v5Ev");}
void  S87C7 ::v6(){vfunc_called(this, "_ZN5S87C72v6Ev");}
void  S87C7 ::v7(){vfunc_called(this, "_ZN5S87C72v7Ev");}
void  S87C7 ::v8(){vfunc_called(this, "_ZN5S87C72v8Ev");}
void  S87C7 ::v9(){vfunc_called(this, "_ZN5S87C72v9Ev");}
void  S87C7 ::v10(){vfunc_called(this, "_ZN5S87C73v10Ev");}
void  S87C7 ::v11(){vfunc_called(this, "_ZN5S87C73v11Ev");}
void  S87C7 ::v12(){vfunc_called(this, "_ZN5S87C73v12Ev");}
void  S87C7 ::v13(){vfunc_called(this, "_ZN5S87C73v13Ev");}
void  S87C7 ::v14(){vfunc_called(this, "_ZN5S87C73v14Ev");}
void  S87C7 ::v15(){vfunc_called(this, "_ZN5S87C73v15Ev");}
void  S87C7 ::v16(){vfunc_called(this, "_ZN5S87C73v16Ev");}
void  S87C7 ::v17(){vfunc_called(this, "_ZN5S87C73v17Ev");}
void  S87C7 ::v18(){vfunc_called(this, "_ZN5S87C73v18Ev");}
void  S87C7 ::v19(){vfunc_called(this, "_ZN5S87C73v19Ev");}
void  S87C7 ::v20(){vfunc_called(this, "_ZN5S87C73v20Ev");}
void  S87C7 ::v21(){vfunc_called(this, "_ZN5S87C73v21Ev");}
void  S87C7 ::v22(){vfunc_called(this, "_ZN5S87C73v22Ev");}
void  S87C7 ::v23(){vfunc_called(this, "_ZN5S87C73v23Ev");}
void  S87C7 ::v24(){vfunc_called(this, "_ZN5S87C73v24Ev");}
void  S87C7 ::v25(){vfunc_called(this, "_ZN5S87C73v25Ev");}
void  S87C7 ::v26(){vfunc_called(this, "_ZN5S87C73v26Ev");}
void  S87C7 ::v27(){vfunc_called(this, "_ZN5S87C73v27Ev");}
void  S87C7 ::v28(){vfunc_called(this, "_ZN5S87C73v28Ev");}
void  S87C7 ::v29(){vfunc_called(this, "_ZN5S87C73v29Ev");}
void  S87C7 ::v30(){vfunc_called(this, "_ZN5S87C73v30Ev");}
void  S87C7 ::v31(){vfunc_called(this, "_ZN5S87C73v31Ev");}
void  S87C7 ::v32(){vfunc_called(this, "_ZN5S87C73v32Ev");}
void  S87C7 ::v33(){vfunc_called(this, "_ZN5S87C73v33Ev");}
void  S87C7 ::v34(){vfunc_called(this, "_ZN5S87C73v34Ev");}
void  S87C7 ::v35(){vfunc_called(this, "_ZN5S87C73v35Ev");}
void  S87C7 ::v36(){vfunc_called(this, "_ZN5S87C73v36Ev");}
void  S87C7 ::v37(){vfunc_called(this, "_ZN5S87C73v37Ev");}
void  S87C7 ::v38(){vfunc_called(this, "_ZN5S87C73v38Ev");}
void  S87C7 ::v39(){vfunc_called(this, "_ZN5S87C73v39Ev");}
void  S87C7 ::v40(){vfunc_called(this, "_ZN5S87C73v40Ev");}
void  S87C7 ::v41(){vfunc_called(this, "_ZN5S87C73v41Ev");}
void  S87C7 ::v42(){vfunc_called(this, "_ZN5S87C73v42Ev");}
void  S87C7 ::v43(){vfunc_called(this, "_ZN5S87C73v43Ev");}
void  S87C7 ::v44(){vfunc_called(this, "_ZN5S87C73v44Ev");}
void  S87C7 ::v45(){vfunc_called(this, "_ZN5S87C73v45Ev");}
void  S87C7 ::v46(){vfunc_called(this, "_ZN5S87C73v46Ev");}
void  S87C7 ::v47(){vfunc_called(this, "_ZN5S87C73v47Ev");}
void  S87C7 ::v48(){vfunc_called(this, "_ZN5S87C73v48Ev");}
void  S87C7 ::v49(){vfunc_called(this, "_ZN5S87C73v49Ev");}
void  S87C7 ::v50(){vfunc_called(this, "_ZN5S87C73v50Ev");}
void  S87C7 ::v51(){vfunc_called(this, "_ZN5S87C73v51Ev");}
void  S87C7 ::v52(){vfunc_called(this, "_ZN5S87C73v52Ev");}
void  S87C7 ::v53(){vfunc_called(this, "_ZN5S87C73v53Ev");}
void  S87C7 ::v54(){vfunc_called(this, "_ZN5S87C73v54Ev");}
void  S87C7 ::v55(){vfunc_called(this, "_ZN5S87C73v55Ev");}
void  S87C7 ::v56(){vfunc_called(this, "_ZN5S87C73v56Ev");}
void  S87C7 ::v57(){vfunc_called(this, "_ZN5S87C73v57Ev");}
void  S87C7 ::v58(){vfunc_called(this, "_ZN5S87C73v58Ev");}
void  S87C7 ::v59(){vfunc_called(this, "_ZN5S87C73v59Ev");}
void  S87C7 ::v60(){vfunc_called(this, "_ZN5S87C73v60Ev");}
void  S87C7 ::v61(){vfunc_called(this, "_ZN5S87C73v61Ev");}
void  S87C7 ::v62(){vfunc_called(this, "_ZN5S87C73v62Ev");}
void  S87C7 ::v63(){vfunc_called(this, "_ZN5S87C73v63Ev");}
void  S87C7 ::v64(){vfunc_called(this, "_ZN5S87C73v64Ev");}
void  S87C7 ::v65(){vfunc_called(this, "_ZN5S87C73v65Ev");}
void  S87C7 ::v66(){vfunc_called(this, "_ZN5S87C73v66Ev");}
void  S87C7 ::v67(){vfunc_called(this, "_ZN5S87C73v67Ev");}
S87C7 ::S87C7(){ note_ctor("S87C7", this);} // tgen

static void Test_S87C7()
{
  extern Class_Descriptor cd_S87C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S87C7, buf);
    S87C7 *dp, &lv = *(dp=new (buf) S87C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S87C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S87C7)");
    check_field_offset(lv, s87c7f0, ABISELECT(8,4), "S87C7.s87c7f0");
    check_field_offset(lv, s87c7f1, ABISELECT(16,8), "S87C7.s87c7f1");
    check_field_offset(lv, s87c7f2, ABISELECT(24,16), "S87C7.s87c7f2");
    check_field_offset(lv, s87c7f3, ABISELECT(56,32), "S87C7.s87c7f3");
    check_field_offset(lv, s87c7f4, ABISELECT(64,40), "S87C7.s87c7f4");
    check_field_offset(lv, s87c7f5, ABISELECT(72,44), "S87C7.s87c7f5");
    check_field_offset(lv, s87c7f6, ABISELECT(80,52), "S87C7.s87c7f6");
    test_class_info(&lv, &cd_S87C7);
    dp->~S87C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS87C7(Test_S87C7, "S87C7", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN5S87C7C1Ev();
extern void _ZN5S87C7D1Ev();
Name_Map name_map_S87C7[] = {
  NSPAIR(_ZN5S87C7C1Ev),
  NSPAIR(_ZN5S87C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI5S87C7[];
extern void _ZN5S87C7D1Ev();
extern void _ZN5S87C7D0Ev();
extern void _ZN5S87C72v4Ev();
extern void _ZN5S87C72v5Ev();
extern void _ZN5S87C72v6Ev();
extern void _ZN5S87C72v7Ev();
extern void _ZN5S87C72v8Ev();
extern void _ZN5S87C72v9Ev();
extern void _ZN5S87C73v10Ev();
extern void _ZN5S87C73v11Ev();
extern void _ZN5S87C73v12Ev();
extern void _ZN5S87C73v13Ev();
extern void _ZN5S87C73v14Ev();
extern void _ZN5S87C73v15Ev();
extern void _ZN5S87C73v16Ev();
extern void _ZN5S87C73v17Ev();
extern void _ZN5S87C73v18Ev();
extern void _ZN5S87C73v19Ev();
extern void _ZN5S87C73v20Ev();
extern void _ZN5S87C73v21Ev();
extern void _ZN5S87C73v22Ev();
extern void _ZN5S87C73v23Ev();
extern void _ZN5S87C73v24Ev();
extern void _ZN5S87C73v25Ev();
extern void _ZN5S87C73v26Ev();
extern void _ZN5S87C73v27Ev();
extern void _ZN5S87C73v28Ev();
extern void _ZN5S87C73v29Ev();
extern void _ZN5S87C73v30Ev();
extern void _ZN5S87C73v31Ev();
extern void _ZN5S87C73v32Ev();
extern void _ZN5S87C73v33Ev();
extern void _ZN5S87C73v34Ev();
extern void _ZN5S87C73v35Ev();
extern void _ZN5S87C73v36Ev();
extern void _ZN5S87C73v37Ev();
extern void _ZN5S87C73v38Ev();
extern void _ZN5S87C73v39Ev();
extern void _ZN5S87C73v40Ev();
extern void _ZN5S87C73v41Ev();
extern void _ZN5S87C73v42Ev();
extern void _ZN5S87C73v43Ev();
extern void _ZN5S87C73v44Ev();
extern void _ZN5S87C73v45Ev();
extern void _ZN5S87C73v46Ev();
extern void _ZN5S87C73v47Ev();
extern void _ZN5S87C73v48Ev();
extern void _ZN5S87C73v49Ev();
extern void _ZN5S87C73v50Ev();
extern void _ZN5S87C73v51Ev();
extern void _ZN5S87C73v52Ev();
extern void _ZN5S87C73v53Ev();
extern void _ZN5S87C73v54Ev();
extern void _ZN5S87C73v55Ev();
extern void _ZN5S87C73v56Ev();
extern void _ZN5S87C73v57Ev();
extern void _ZN5S87C73v58Ev();
extern void _ZN5S87C73v59Ev();
extern void _ZN5S87C73v60Ev();
extern void _ZN5S87C73v61Ev();
extern void _ZN5S87C73v62Ev();
extern void _ZN5S87C73v63Ev();
extern void _ZN5S87C73v64Ev();
extern void _ZN5S87C73v65Ev();
extern void _ZN5S87C73v66Ev();
extern void _ZN5S87C73v67Ev();
static  VTBL_ENTRY vtc_S87C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S87C7[0]),
  (VTBL_ENTRY)&_ZN5S87C7D1Ev,
  (VTBL_ENTRY)&_ZN5S87C7D0Ev,
  (VTBL_ENTRY)&_ZN5S87C72v4Ev,
  (VTBL_ENTRY)&_ZN5S87C72v5Ev,
  (VTBL_ENTRY)&_ZN5S87C72v6Ev,
  (VTBL_ENTRY)&_ZN5S87C72v7Ev,
  (VTBL_ENTRY)&_ZN5S87C72v8Ev,
  (VTBL_ENTRY)&_ZN5S87C72v9Ev,
  (VTBL_ENTRY)&_ZN5S87C73v10Ev,
  (VTBL_ENTRY)&_ZN5S87C73v11Ev,
  (VTBL_ENTRY)&_ZN5S87C73v12Ev,
  (VTBL_ENTRY)&_ZN5S87C73v13Ev,
  (VTBL_ENTRY)&_ZN5S87C73v14Ev,
  (VTBL_ENTRY)&_ZN5S87C73v15Ev,
  (VTBL_ENTRY)&_ZN5S87C73v16Ev,
  (VTBL_ENTRY)&_ZN5S87C73v17Ev,
  (VTBL_ENTRY)&_ZN5S87C73v18Ev,
  (VTBL_ENTRY)&_ZN5S87C73v19Ev,
  (VTBL_ENTRY)&_ZN5S87C73v20Ev,
  (VTBL_ENTRY)&_ZN5S87C73v21Ev,
  (VTBL_ENTRY)&_ZN5S87C73v22Ev,
  (VTBL_ENTRY)&_ZN5S87C73v23Ev,
  (VTBL_ENTRY)&_ZN5S87C73v24Ev,
  (VTBL_ENTRY)&_ZN5S87C73v25Ev,
  (VTBL_ENTRY)&_ZN5S87C73v26Ev,
  (VTBL_ENTRY)&_ZN5S87C73v27Ev,
  (VTBL_ENTRY)&_ZN5S87C73v28Ev,
  (VTBL_ENTRY)&_ZN5S87C73v29Ev,
  (VTBL_ENTRY)&_ZN5S87C73v30Ev,
  (VTBL_ENTRY)&_ZN5S87C73v31Ev,
  (VTBL_ENTRY)&_ZN5S87C73v32Ev,
  (VTBL_ENTRY)&_ZN5S87C73v33Ev,
  (VTBL_ENTRY)&_ZN5S87C73v34Ev,
  (VTBL_ENTRY)&_ZN5S87C73v35Ev,
  (VTBL_ENTRY)&_ZN5S87C73v36Ev,
  (VTBL_ENTRY)&_ZN5S87C73v37Ev,
  (VTBL_ENTRY)&_ZN5S87C73v38Ev,
  (VTBL_ENTRY)&_ZN5S87C73v39Ev,
  (VTBL_ENTRY)&_ZN5S87C73v40Ev,
  (VTBL_ENTRY)&_ZN5S87C73v41Ev,
  (VTBL_ENTRY)&_ZN5S87C73v42Ev,
  (VTBL_ENTRY)&_ZN5S87C73v43Ev,
  (VTBL_ENTRY)&_ZN5S87C73v44Ev,
  (VTBL_ENTRY)&_ZN5S87C73v45Ev,
  (VTBL_ENTRY)&_ZN5S87C73v46Ev,
  (VTBL_ENTRY)&_ZN5S87C73v47Ev,
  (VTBL_ENTRY)&_ZN5S87C73v48Ev,
  (VTBL_ENTRY)&_ZN5S87C73v49Ev,
  (VTBL_ENTRY)&_ZN5S87C73v50Ev,
  (VTBL_ENTRY)&_ZN5S87C73v51Ev,
  (VTBL_ENTRY)&_ZN5S87C73v52Ev,
  (VTBL_ENTRY)&_ZN5S87C73v53Ev,
  (VTBL_ENTRY)&_ZN5S87C73v54Ev,
  (VTBL_ENTRY)&_ZN5S87C73v55Ev,
  (VTBL_ENTRY)&_ZN5S87C73v56Ev,
  (VTBL_ENTRY)&_ZN5S87C73v57Ev,
  (VTBL_ENTRY)&_ZN5S87C73v58Ev,
  (VTBL_ENTRY)&_ZN5S87C73v59Ev,
  (VTBL_ENTRY)&_ZN5S87C73v60Ev,
  (VTBL_ENTRY)&_ZN5S87C73v61Ev,
  (VTBL_ENTRY)&_ZN5S87C73v62Ev,
  (VTBL_ENTRY)&_ZN5S87C73v63Ev,
  (VTBL_ENTRY)&_ZN5S87C73v64Ev,
  (VTBL_ENTRY)&_ZN5S87C73v65Ev,
  (VTBL_ENTRY)&_ZN5S87C73v66Ev,
  (VTBL_ENTRY)&_ZN5S87C73v67Ev,
};
extern VTBL_ENTRY _ZTI5S87C7[];
extern  VTBL_ENTRY _ZTV5S87C7[];
Class_Descriptor cd_S87C7 = {  "S87C7", // class name
  0,0,//no base classes
  &(vtc_S87C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI5S87C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV5S87C7),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  S87C6_nt  : S87C7 {
  virtual  ~S87C6_nt(); // _ZN8S87C6_ntD1Ev
  virtual void  v68(); // _ZN8S87C6_nt3v68Ev
  virtual void  v69(); // _ZN8S87C6_nt3v69Ev
  S87C6_nt(); // tgen
};
//SIG(-1 S87C6_nt) C1{ BC2{ vd v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2}


 S87C6_nt ::~S87C6_nt(){ note_dtor("S87C6_nt", this);}
void  S87C6_nt ::v68(){vfunc_called(this, "_ZN8S87C6_nt3v68Ev");}
void  S87C6_nt ::v69(){vfunc_called(this, "_ZN8S87C6_nt3v69Ev");}
S87C6_nt ::S87C6_nt(){ note_ctor("S87C6_nt", this);} // tgen

//skip512 S87C6_nt

#else // __cplusplus

extern void _ZN8S87C6_ntC1Ev();
extern void _ZN8S87C6_ntD1Ev();
Name_Map name_map_S87C6_nt[] = {
  NSPAIR(_ZN8S87C6_ntC1Ev),
  NSPAIR(_ZN8S87C6_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S87C7;
extern VTBL_ENTRY _ZTI5S87C7[];
extern  VTBL_ENTRY _ZTV5S87C7[];
static Base_Class bases_S87C6_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S87C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S87C6_nt[];
extern void _ZN8S87C6_ntD1Ev();
extern void _ZN8S87C6_ntD0Ev();
extern void _ZN5S87C72v4Ev();
extern void _ZN5S87C72v5Ev();
extern void _ZN5S87C72v6Ev();
extern void _ZN5S87C72v7Ev();
extern void _ZN5S87C72v8Ev();
extern void _ZN5S87C72v9Ev();
extern void _ZN5S87C73v10Ev();
extern void _ZN5S87C73v11Ev();
extern void _ZN5S87C73v12Ev();
extern void _ZN5S87C73v13Ev();
extern void _ZN5S87C73v14Ev();
extern void _ZN5S87C73v15Ev();
extern void _ZN5S87C73v16Ev();
extern void _ZN5S87C73v17Ev();
extern void _ZN5S87C73v18Ev();
extern void _ZN5S87C73v19Ev();
extern void _ZN5S87C73v20Ev();
extern void _ZN5S87C73v21Ev();
extern void _ZN5S87C73v22Ev();
extern void _ZN5S87C73v23Ev();
extern void _ZN5S87C73v24Ev();
extern void _ZN5S87C73v25Ev();
extern void _ZN5S87C73v26Ev();
extern void _ZN5S87C73v27Ev();
extern void _ZN5S87C73v28Ev();
extern void _ZN5S87C73v29Ev();
extern void _ZN5S87C73v30Ev();
extern void _ZN5S87C73v31Ev();
extern void _ZN5S87C73v32Ev();
extern void _ZN5S87C73v33Ev();
extern void _ZN5S87C73v34Ev();
extern void _ZN5S87C73v35Ev();
extern void _ZN5S87C73v36Ev();
extern void _ZN5S87C73v37Ev();
extern void _ZN5S87C73v38Ev();
extern void _ZN5S87C73v39Ev();
extern void _ZN5S87C73v40Ev();
extern void _ZN5S87C73v41Ev();
extern void _ZN5S87C73v42Ev();
extern void _ZN5S87C73v43Ev();
extern void _ZN5S87C73v44Ev();
extern void _ZN5S87C73v45Ev();
extern void _ZN5S87C73v46Ev();
extern void _ZN5S87C73v47Ev();
extern void _ZN5S87C73v48Ev();
extern void _ZN5S87C73v49Ev();
extern void _ZN5S87C73v50Ev();
extern void _ZN5S87C73v51Ev();
extern void _ZN5S87C73v52Ev();
extern void _ZN5S87C73v53Ev();
extern void _ZN5S87C73v54Ev();
extern void _ZN5S87C73v55Ev();
extern void _ZN5S87C73v56Ev();
extern void _ZN5S87C73v57Ev();
extern void _ZN5S87C73v58Ev();
extern void _ZN5S87C73v59Ev();
extern void _ZN5S87C73v60Ev();
extern void _ZN5S87C73v61Ev();
extern void _ZN5S87C73v62Ev();
extern void _ZN5S87C73v63Ev();
extern void _ZN5S87C73v64Ev();
extern void _ZN5S87C73v65Ev();
extern void _ZN5S87C73v66Ev();
extern void _ZN5S87C73v67Ev();
extern void _ZN8S87C6_nt3v68Ev();
extern void _ZN8S87C6_nt3v69Ev();
static  VTBL_ENTRY vtc_S87C6_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S87C6_nt[0]),
  (VTBL_ENTRY)&_ZN8S87C6_ntD1Ev,
  (VTBL_ENTRY)&_ZN8S87C6_ntD0Ev,
  (VTBL_ENTRY)&_ZN5S87C72v4Ev,
  (VTBL_ENTRY)&_ZN5S87C72v5Ev,
  (VTBL_ENTRY)&_ZN5S87C72v6Ev,
  (VTBL_ENTRY)&_ZN5S87C72v7Ev,
  (VTBL_ENTRY)&_ZN5S87C72v8Ev,
  (VTBL_ENTRY)&_ZN5S87C72v9Ev,
  (VTBL_ENTRY)&_ZN5S87C73v10Ev,
  (VTBL_ENTRY)&_ZN5S87C73v11Ev,
  (VTBL_ENTRY)&_ZN5S87C73v12Ev,
  (VTBL_ENTRY)&_ZN5S87C73v13Ev,
  (VTBL_ENTRY)&_ZN5S87C73v14Ev,
  (VTBL_ENTRY)&_ZN5S87C73v15Ev,
  (VTBL_ENTRY)&_ZN5S87C73v16Ev,
  (VTBL_ENTRY)&_ZN5S87C73v17Ev,
  (VTBL_ENTRY)&_ZN5S87C73v18Ev,
  (VTBL_ENTRY)&_ZN5S87C73v19Ev,
  (VTBL_ENTRY)&_ZN5S87C73v20Ev,
  (VTBL_ENTRY)&_ZN5S87C73v21Ev,
  (VTBL_ENTRY)&_ZN5S87C73v22Ev,
  (VTBL_ENTRY)&_ZN5S87C73v23Ev,
  (VTBL_ENTRY)&_ZN5S87C73v24Ev,
  (VTBL_ENTRY)&_ZN5S87C73v25Ev,
  (VTBL_ENTRY)&_ZN5S87C73v26Ev,
  (VTBL_ENTRY)&_ZN5S87C73v27Ev,
  (VTBL_ENTRY)&_ZN5S87C73v28Ev,
  (VTBL_ENTRY)&_ZN5S87C73v29Ev,
  (VTBL_ENTRY)&_ZN5S87C73v30Ev,
  (VTBL_ENTRY)&_ZN5S87C73v31Ev,
  (VTBL_ENTRY)&_ZN5S87C73v32Ev,
  (VTBL_ENTRY)&_ZN5S87C73v33Ev,
  (VTBL_ENTRY)&_ZN5S87C73v34Ev,
  (VTBL_ENTRY)&_ZN5S87C73v35Ev,
  (VTBL_ENTRY)&_ZN5S87C73v36Ev,
  (VTBL_ENTRY)&_ZN5S87C73v37Ev,
  (VTBL_ENTRY)&_ZN5S87C73v38Ev,
  (VTBL_ENTRY)&_ZN5S87C73v39Ev,
  (VTBL_ENTRY)&_ZN5S87C73v40Ev,
  (VTBL_ENTRY)&_ZN5S87C73v41Ev,
  (VTBL_ENTRY)&_ZN5S87C73v42Ev,
  (VTBL_ENTRY)&_ZN5S87C73v43Ev,
  (VTBL_ENTRY)&_ZN5S87C73v44Ev,
  (VTBL_ENTRY)&_ZN5S87C73v45Ev,
  (VTBL_ENTRY)&_ZN5S87C73v46Ev,
  (VTBL_ENTRY)&_ZN5S87C73v47Ev,
  (VTBL_ENTRY)&_ZN5S87C73v48Ev,
  (VTBL_ENTRY)&_ZN5S87C73v49Ev,
  (VTBL_ENTRY)&_ZN5S87C73v50Ev,
  (VTBL_ENTRY)&_ZN5S87C73v51Ev,
  (VTBL_ENTRY)&_ZN5S87C73v52Ev,
  (VTBL_ENTRY)&_ZN5S87C73v53Ev,
  (VTBL_ENTRY)&_ZN5S87C73v54Ev,
  (VTBL_ENTRY)&_ZN5S87C73v55Ev,
  (VTBL_ENTRY)&_ZN5S87C73v56Ev,
  (VTBL_ENTRY)&_ZN5S87C73v57Ev,
  (VTBL_ENTRY)&_ZN5S87C73v58Ev,
  (VTBL_ENTRY)&_ZN5S87C73v59Ev,
  (VTBL_ENTRY)&_ZN5S87C73v60Ev,
  (VTBL_ENTRY)&_ZN5S87C73v61Ev,
  (VTBL_ENTRY)&_ZN5S87C73v62Ev,
  (VTBL_ENTRY)&_ZN5S87C73v63Ev,
  (VTBL_ENTRY)&_ZN5S87C73v64Ev,
  (VTBL_ENTRY)&_ZN5S87C73v65Ev,
  (VTBL_ENTRY)&_ZN5S87C73v66Ev,
  (VTBL_ENTRY)&_ZN5S87C73v67Ev,
  (VTBL_ENTRY)&_ZN8S87C6_nt3v68Ev,
  (VTBL_ENTRY)&_ZN8S87C6_nt3v69Ev,
};
extern VTBL_ENTRY _ZTI8S87C6_nt[];
VTBL_ENTRY *P__ZTI8S87C6_nt = _ZTI8S87C6_nt; 
extern  VTBL_ENTRY _ZTV8S87C6_nt[];
Class_Descriptor cd_S87C6_nt = {  "S87C6_nt", // class name
  bases_S87C6_nt, 1,
  &(vtc_S87C6_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI8S87C6_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S87C6_nt),70, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S87C12_nt  {
  void *s87c12f0;
  ::S3352C4_nt s87c12f1;
  void  mf87c12(); // _ZN9S87C12_nt7mf87c12Ev
};
//SIG(-1 S87C12_nt) C1{ m Fp FC2{ m Fi[2]}}


void  S87C12_nt ::mf87c12(){}

//skip512 S87C12_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S87C5_nt  : S87C6_nt {
  char s87c5f0;
  ::S3352C17 s87c5f1;
  ::S87C12_nt s87c5f2;
  virtual  ~S87C5_nt(); // _ZN8S87C5_ntD1Ev
  virtual void  v70(); // _ZN8S87C5_nt3v70Ev
  virtual void  v71(); // _ZN8S87C5_nt3v71Ev
  virtual void  v72(); // _ZN8S87C5_nt3v72Ev
  virtual void  v73(); // _ZN8S87C5_nt3v73Ev
  virtual void  v74(); // _ZN8S87C5_nt3v74Ev
  virtual void  v75(); // _ZN8S87C5_nt3v75Ev
  virtual void  v76(); // _ZN8S87C5_nt3v76Ev
  virtual void  v77(); // _ZN8S87C5_nt3v77Ev
  virtual void  v78(); // _ZN8S87C5_nt3v78Ev
  virtual void  v79(); // _ZN8S87C5_nt3v79Ev
  virtual void  v80(); // _ZN8S87C5_nt3v80Ev
  virtual void  v81(); // _ZN8S87C5_nt3v81Ev
  S87C5_nt(); // tgen
};
//SIG(-1 S87C5_nt) C1{ BC2{ BC3{ vd v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v77 v78} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 Fc FC5{ BC6{ BC7{ m Fp Fi[2]}}} FC8{ m Fp FC4}}


 S87C5_nt ::~S87C5_nt(){ note_dtor("S87C5_nt", this);}
void  S87C5_nt ::v70(){vfunc_called(this, "_ZN8S87C5_nt3v70Ev");}
void  S87C5_nt ::v71(){vfunc_called(this, "_ZN8S87C5_nt3v71Ev");}
void  S87C5_nt ::v72(){vfunc_called(this, "_ZN8S87C5_nt3v72Ev");}
void  S87C5_nt ::v73(){vfunc_called(this, "_ZN8S87C5_nt3v73Ev");}
void  S87C5_nt ::v74(){vfunc_called(this, "_ZN8S87C5_nt3v74Ev");}
void  S87C5_nt ::v75(){vfunc_called(this, "_ZN8S87C5_nt3v75Ev");}
void  S87C5_nt ::v76(){vfunc_called(this, "_ZN8S87C5_nt3v76Ev");}
void  S87C5_nt ::v77(){vfunc_called(this, "_ZN8S87C5_nt3v77Ev");}
void  S87C5_nt ::v78(){vfunc_called(this, "_ZN8S87C5_nt3v78Ev");}
void  S87C5_nt ::v79(){vfunc_called(this, "_ZN8S87C5_nt3v79Ev");}
void  S87C5_nt ::v80(){vfunc_called(this, "_ZN8S87C5_nt3v80Ev");}
void  S87C5_nt ::v81(){vfunc_called(this, "_ZN8S87C5_nt3v81Ev");}
S87C5_nt ::S87C5_nt(){ note_ctor("S87C5_nt", this);} // tgen

//skip512 S87C5_nt

#else // __cplusplus

extern void _ZN8S87C5_ntC1Ev();
extern void _ZN8S87C5_ntD1Ev();
Name_Map name_map_S87C5_nt[] = {
  NSPAIR(_ZN8S87C5_ntC1Ev),
  NSPAIR(_ZN8S87C5_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S87C7;
extern VTBL_ENTRY _ZTI5S87C7[];
extern  VTBL_ENTRY _ZTV5S87C7[];
extern Class_Descriptor cd_S87C6_nt;
extern VTBL_ENTRY _ZTI8S87C6_nt[];
extern  VTBL_ENTRY _ZTV8S87C6_nt[];
static Base_Class bases_S87C5_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S87C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S87C6_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI8S87C5_nt[];
extern void _ZN8S87C5_ntD1Ev();
extern void _ZN8S87C5_ntD0Ev();
extern void _ZN5S87C72v4Ev();
extern void _ZN5S87C72v5Ev();
extern void _ZN5S87C72v6Ev();
extern void _ZN5S87C72v7Ev();
extern void _ZN5S87C72v8Ev();
extern void _ZN5S87C72v9Ev();
extern void _ZN5S87C73v10Ev();
extern void _ZN5S87C73v11Ev();
extern void _ZN5S87C73v12Ev();
extern void _ZN5S87C73v13Ev();
extern void _ZN5S87C73v14Ev();
extern void _ZN5S87C73v15Ev();
extern void _ZN5S87C73v16Ev();
extern void _ZN5S87C73v17Ev();
extern void _ZN5S87C73v18Ev();
extern void _ZN5S87C73v19Ev();
extern void _ZN5S87C73v20Ev();
extern void _ZN5S87C73v21Ev();
extern void _ZN5S87C73v22Ev();
extern void _ZN5S87C73v23Ev();
extern void _ZN5S87C73v24Ev();
extern void _ZN5S87C73v25Ev();
extern void _ZN5S87C73v26Ev();
extern void _ZN5S87C73v27Ev();
extern void _ZN5S87C73v28Ev();
extern void _ZN5S87C73v29Ev();
extern void _ZN5S87C73v30Ev();
extern void _ZN5S87C73v31Ev();
extern void _ZN5S87C73v32Ev();
extern void _ZN5S87C73v33Ev();
extern void _ZN5S87C73v34Ev();
extern void _ZN5S87C73v35Ev();
extern void _ZN5S87C73v36Ev();
extern void _ZN5S87C73v37Ev();
extern void _ZN5S87C73v38Ev();
extern void _ZN5S87C73v39Ev();
extern void _ZN5S87C73v40Ev();
extern void _ZN5S87C73v41Ev();
extern void _ZN5S87C73v42Ev();
extern void _ZN5S87C73v43Ev();
extern void _ZN5S87C73v44Ev();
extern void _ZN5S87C73v45Ev();
extern void _ZN5S87C73v46Ev();
extern void _ZN5S87C73v47Ev();
extern void _ZN5S87C73v48Ev();
extern void _ZN5S87C73v49Ev();
extern void _ZN5S87C73v50Ev();
extern void _ZN5S87C73v51Ev();
extern void _ZN5S87C73v52Ev();
extern void _ZN5S87C73v53Ev();
extern void _ZN5S87C73v54Ev();
extern void _ZN5S87C73v55Ev();
extern void _ZN5S87C73v56Ev();
extern void _ZN5S87C73v57Ev();
extern void _ZN5S87C73v58Ev();
extern void _ZN5S87C73v59Ev();
extern void _ZN5S87C73v60Ev();
extern void _ZN5S87C73v61Ev();
extern void _ZN5S87C73v62Ev();
extern void _ZN5S87C73v63Ev();
extern void _ZN5S87C73v64Ev();
extern void _ZN5S87C73v65Ev();
extern void _ZN5S87C73v66Ev();
extern void _ZN5S87C73v67Ev();
extern void _ZN8S87C6_nt3v68Ev();
extern void _ZN8S87C6_nt3v69Ev();
extern void _ZN8S87C5_nt3v70Ev();
extern void _ZN8S87C5_nt3v71Ev();
extern void _ZN8S87C5_nt3v72Ev();
extern void _ZN8S87C5_nt3v73Ev();
extern void _ZN8S87C5_nt3v74Ev();
extern void _ZN8S87C5_nt3v75Ev();
extern void _ZN8S87C5_nt3v76Ev();
extern void _ZN8S87C5_nt3v77Ev();
extern void _ZN8S87C5_nt3v78Ev();
extern void _ZN8S87C5_nt3v79Ev();
extern void _ZN8S87C5_nt3v80Ev();
extern void _ZN8S87C5_nt3v81Ev();
static  VTBL_ENTRY vtc_S87C5_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S87C5_nt[0]),
  (VTBL_ENTRY)&_ZN8S87C5_ntD1Ev,
  (VTBL_ENTRY)&_ZN8S87C5_ntD0Ev,
  (VTBL_ENTRY)&_ZN5S87C72v4Ev,
  (VTBL_ENTRY)&_ZN5S87C72v5Ev,
  (VTBL_ENTRY)&_ZN5S87C72v6Ev,
  (VTBL_ENTRY)&_ZN5S87C72v7Ev,
  (VTBL_ENTRY)&_ZN5S87C72v8Ev,
  (VTBL_ENTRY)&_ZN5S87C72v9Ev,
  (VTBL_ENTRY)&_ZN5S87C73v10Ev,
  (VTBL_ENTRY)&_ZN5S87C73v11Ev,
  (VTBL_ENTRY)&_ZN5S87C73v12Ev,
  (VTBL_ENTRY)&_ZN5S87C73v13Ev,
  (VTBL_ENTRY)&_ZN5S87C73v14Ev,
  (VTBL_ENTRY)&_ZN5S87C73v15Ev,
  (VTBL_ENTRY)&_ZN5S87C73v16Ev,
  (VTBL_ENTRY)&_ZN5S87C73v17Ev,
  (VTBL_ENTRY)&_ZN5S87C73v18Ev,
  (VTBL_ENTRY)&_ZN5S87C73v19Ev,
  (VTBL_ENTRY)&_ZN5S87C73v20Ev,
  (VTBL_ENTRY)&_ZN5S87C73v21Ev,
  (VTBL_ENTRY)&_ZN5S87C73v22Ev,
  (VTBL_ENTRY)&_ZN5S87C73v23Ev,
  (VTBL_ENTRY)&_ZN5S87C73v24Ev,
  (VTBL_ENTRY)&_ZN5S87C73v25Ev,
  (VTBL_ENTRY)&_ZN5S87C73v26Ev,
  (VTBL_ENTRY)&_ZN5S87C73v27Ev,
  (VTBL_ENTRY)&_ZN5S87C73v28Ev,
  (VTBL_ENTRY)&_ZN5S87C73v29Ev,
  (VTBL_ENTRY)&_ZN5S87C73v30Ev,
  (VTBL_ENTRY)&_ZN5S87C73v31Ev,
  (VTBL_ENTRY)&_ZN5S87C73v32Ev,
  (VTBL_ENTRY)&_ZN5S87C73v33Ev,
  (VTBL_ENTRY)&_ZN5S87C73v34Ev,
  (VTBL_ENTRY)&_ZN5S87C73v35Ev,
  (VTBL_ENTRY)&_ZN5S87C73v36Ev,
  (VTBL_ENTRY)&_ZN5S87C73v37Ev,
  (VTBL_ENTRY)&_ZN5S87C73v38Ev,
  (VTBL_ENTRY)&_ZN5S87C73v39Ev,
  (VTBL_ENTRY)&_ZN5S87C73v40Ev,
  (VTBL_ENTRY)&_ZN5S87C73v41Ev,
  (VTBL_ENTRY)&_ZN5S87C73v42Ev,
  (VTBL_ENTRY)&_ZN5S87C73v43Ev,
  (VTBL_ENTRY)&_ZN5S87C73v44Ev,
  (VTBL_ENTRY)&_ZN5S87C73v45Ev,
  (VTBL_ENTRY)&_ZN5S87C73v46Ev,
  (VTBL_ENTRY)&_ZN5S87C73v47Ev,
  (VTBL_ENTRY)&_ZN5S87C73v48Ev,
  (VTBL_ENTRY)&_ZN5S87C73v49Ev,
  (VTBL_ENTRY)&_ZN5S87C73v50Ev,
  (VTBL_ENTRY)&_ZN5S87C73v51Ev,
  (VTBL_ENTRY)&_ZN5S87C73v52Ev,
  (VTBL_ENTRY)&_ZN5S87C73v53Ev,
  (VTBL_ENTRY)&_ZN5S87C73v54Ev,
  (VTBL_ENTRY)&_ZN5S87C73v55Ev,
  (VTBL_ENTRY)&_ZN5S87C73v56Ev,
  (VTBL_ENTRY)&_ZN5S87C73v57Ev,
  (VTBL_ENTRY)&_ZN5S87C73v58Ev,
  (VTBL_ENTRY)&_ZN5S87C73v59Ev,
  (VTBL_ENTRY)&_ZN5S87C73v60Ev,
  (VTBL_ENTRY)&_ZN5S87C73v61Ev,
  (VTBL_ENTRY)&_ZN5S87C73v62Ev,
  (VTBL_ENTRY)&_ZN5S87C73v63Ev,
  (VTBL_ENTRY)&_ZN5S87C73v64Ev,
  (VTBL_ENTRY)&_ZN5S87C73v65Ev,
  (VTBL_ENTRY)&_ZN5S87C73v66Ev,
  (VTBL_ENTRY)&_ZN5S87C73v67Ev,
  (VTBL_ENTRY)&_ZN8S87C6_nt3v68Ev,
  (VTBL_ENTRY)&_ZN8S87C6_nt3v69Ev,
  (VTBL_ENTRY)&_ZN8S87C5_nt3v70Ev,
  (VTBL_ENTRY)&_ZN8S87C5_nt3v71Ev,
  (VTBL_ENTRY)&_ZN8S87C5_nt3v72Ev,
  (VTBL_ENTRY)&_ZN8S87C5_nt3v73Ev,
  (VTBL_ENTRY)&_ZN8S87C5_nt3v74Ev,
  (VTBL_ENTRY)&_ZN8S87C5_nt3v75Ev,
  (VTBL_ENTRY)&_ZN8S87C5_nt3v76Ev,
  (VTBL_ENTRY)&_ZN8S87C5_nt3v77Ev,
  (VTBL_ENTRY)&_ZN8S87C5_nt3v78Ev,
  (VTBL_ENTRY)&_ZN8S87C5_nt3v79Ev,
  (VTBL_ENTRY)&_ZN8S87C5_nt3v80Ev,
  (VTBL_ENTRY)&_ZN8S87C5_nt3v81Ev,
};
extern VTBL_ENTRY _ZTI8S87C5_nt[];
VTBL_ENTRY *P__ZTI8S87C5_nt = _ZTI8S87C5_nt; 
extern  VTBL_ENTRY _ZTV8S87C5_nt[];
Class_Descriptor cd_S87C5_nt = {  "S87C5_nt", // class name
  bases_S87C5_nt, 2,
  &(vtc_S87C5_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(136,88), // object size
  NSPAIRA(_ZTI8S87C5_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S87C5_nt),82, //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  S87C13_nt  {
  virtual  ~S87C13_nt(); // _ZN9S87C13_ntD1Ev
  virtual void  v82(); // _ZN9S87C13_nt3v82Ev
  virtual void  v83(); // _ZN9S87C13_nt3v83Ev
  virtual void  v84(); // _ZN9S87C13_nt3v84Ev
  virtual void  v85(); // _ZN9S87C13_nt3v85Ev
  S87C13_nt(); // tgen
};
//SIG(-1 S87C13_nt) C1{ vd v1 v2 v3 v4}


 S87C13_nt ::~S87C13_nt(){ note_dtor("S87C13_nt", this);}
void  S87C13_nt ::v82(){vfunc_called(this, "_ZN9S87C13_nt3v82Ev");}
void  S87C13_nt ::v83(){vfunc_called(this, "_ZN9S87C13_nt3v83Ev");}
void  S87C13_nt ::v84(){vfunc_called(this, "_ZN9S87C13_nt3v84Ev");}
void  S87C13_nt ::v85(){vfunc_called(this, "_ZN9S87C13_nt3v85Ev");}
S87C13_nt ::S87C13_nt(){ note_ctor("S87C13_nt", this);} // tgen

//skip512 S87C13_nt

#else // __cplusplus

extern void _ZN9S87C13_ntC1Ev();
extern void _ZN9S87C13_ntD1Ev();
Name_Map name_map_S87C13_nt[] = {
  NSPAIR(_ZN9S87C13_ntC1Ev),
  NSPAIR(_ZN9S87C13_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S87C13_nt[];
extern void _ZN9S87C13_ntD1Ev();
extern void _ZN9S87C13_ntD0Ev();
extern void _ZN9S87C13_nt3v82Ev();
extern void _ZN9S87C13_nt3v83Ev();
extern void _ZN9S87C13_nt3v84Ev();
extern void _ZN9S87C13_nt3v85Ev();
static  VTBL_ENTRY vtc_S87C13_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S87C13_nt[0]),
  (VTBL_ENTRY)&_ZN9S87C13_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S87C13_ntD0Ev,
  (VTBL_ENTRY)&_ZN9S87C13_nt3v82Ev,
  (VTBL_ENTRY)&_ZN9S87C13_nt3v83Ev,
  (VTBL_ENTRY)&_ZN9S87C13_nt3v84Ev,
  (VTBL_ENTRY)&_ZN9S87C13_nt3v85Ev,
};
extern VTBL_ENTRY _ZTI9S87C13_nt[];
VTBL_ENTRY *P__ZTI9S87C13_nt = _ZTI9S87C13_nt; 
extern  VTBL_ENTRY _ZTV9S87C13_nt[];
Class_Descriptor cd_S87C13_nt = {  "S87C13_nt", // class name
  0,0,//no base classes
  &(vtc_S87C13_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI9S87C13_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S87C13_nt),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S87C4  : S87C5_nt , S87C13_nt {
  virtual  ~S87C4(); // _ZN5S87C4D1Ev
  virtual void  v86(); // _ZN5S87C43v86Ev
  virtual void  v87(); // _ZN5S87C43v87Ev
  virtual void  v88(); // _ZN5S87C43v88Ev
  virtual void  v89(); // _ZN5S87C43v89Ev
  virtual void  v90(); // _ZN5S87C43v90Ev
  virtual void  v91(); // _ZN5S87C43v91Ev
  virtual void  v92(); // _ZN5S87C43v92Ev
  virtual void  v93(); // _ZN5S87C43v93Ev
  virtual void  v94(); // _ZN5S87C43v94Ev
  virtual void  v95(); // _ZN5S87C43v95Ev
  S87C4(); // tgen
};
//SIG(-1 S87C4) C1{ BC2{ BC3{ BC4{ vd 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 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v75 v76} vd v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 Fc FC6{ BC7{ BC8{ m Fp Fi[2]}}} FC9{ m Fp FC5}} BC10{ vd v89 v90 v91 v92} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10}


 S87C4 ::~S87C4(){ note_dtor("S87C4", this);}
void  S87C4 ::v86(){vfunc_called(this, "_ZN5S87C43v86Ev");}
void  S87C4 ::v87(){vfunc_called(this, "_ZN5S87C43v87Ev");}
void  S87C4 ::v88(){vfunc_called(this, "_ZN5S87C43v88Ev");}
void  S87C4 ::v89(){vfunc_called(this, "_ZN5S87C43v89Ev");}
void  S87C4 ::v90(){vfunc_called(this, "_ZN5S87C43v90Ev");}
void  S87C4 ::v91(){vfunc_called(this, "_ZN5S87C43v91Ev");}
void  S87C4 ::v92(){vfunc_called(this, "_ZN5S87C43v92Ev");}
void  S87C4 ::v93(){vfunc_called(this, "_ZN5S87C43v93Ev");}
void  S87C4 ::v94(){vfunc_called(this, "_ZN5S87C43v94Ev");}
void  S87C4 ::v95(){vfunc_called(this, "_ZN5S87C43v95Ev");}
S87C4 ::S87C4(){ note_ctor("S87C4", this);} // tgen

static void Test_S87C4()
{
  extern Class_Descriptor cd_S87C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(19,24)];
    init_test(&cd_S87C4, buf);
    S87C4 *dp, &lv = *(dp=new (buf) S87C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,92), "sizeof(S87C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S87C4)");
    check_base_class_offset(lv, (S87C7*)(S87C6_nt*)(S87C5_nt*), 0, "S87C4");
    check_base_class_offset(lv, (S87C6_nt*)(S87C5_nt*), 0, "S87C4");
    check_base_class_offset(lv, (S87C5_nt*), 0, "S87C4");
    check_base_class_offset(lv, (S87C13_nt*), ABISELECT(136,88), "S87C4");
    test_class_info(&lv, &cd_S87C4);
    dp->~S87C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS87C4(Test_S87C4, "S87C4", ABISELECT(144,92));

#else // __cplusplus

extern void _ZN5S87C4C1Ev();
extern void _ZN5S87C4D1Ev();
Name_Map name_map_S87C4[] = {
  NSPAIR(_ZN5S87C4C1Ev),
  NSPAIR(_ZN5S87C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S87C7;
extern VTBL_ENTRY _ZTI5S87C7[];
extern  VTBL_ENTRY _ZTV5S87C7[];
extern Class_Descriptor cd_S87C6_nt;
extern VTBL_ENTRY _ZTI8S87C6_nt[];
extern  VTBL_ENTRY _ZTV8S87C6_nt[];
extern Class_Descriptor cd_S87C5_nt;
extern VTBL_ENTRY _ZTI8S87C5_nt[];
extern  VTBL_ENTRY _ZTV8S87C5_nt[];
extern Class_Descriptor cd_S87C13_nt;
extern VTBL_ENTRY _ZTI9S87C13_nt[];
extern  VTBL_ENTRY _ZTV9S87C13_nt[];
static Base_Class bases_S87C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S87C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S87C6_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S87C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S87C13_nt,    ABISELECT(136,88), //bcp->offset
    92, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI5S87C4[];
extern void _ZN5S87C4D1Ev();
extern void _ZN5S87C4D0Ev();
extern void _ZN5S87C72v4Ev();
extern void _ZN5S87C72v5Ev();
extern void _ZN5S87C72v6Ev();
extern void _ZN5S87C72v7Ev();
extern void _ZN5S87C72v8Ev();
extern void _ZN5S87C72v9Ev();
extern void _ZN5S87C73v10Ev();
extern void _ZN5S87C73v11Ev();
extern void _ZN5S87C73v12Ev();
extern void _ZN5S87C73v13Ev();
extern void _ZN5S87C73v14Ev();
extern void _ZN5S87C73v15Ev();
extern void _ZN5S87C73v16Ev();
extern void _ZN5S87C73v17Ev();
extern void _ZN5S87C73v18Ev();
extern void _ZN5S87C73v19Ev();
extern void _ZN5S87C73v20Ev();
extern void _ZN5S87C73v21Ev();
extern void _ZN5S87C73v22Ev();
extern void _ZN5S87C73v23Ev();
extern void _ZN5S87C73v24Ev();
extern void _ZN5S87C73v25Ev();
extern void _ZN5S87C73v26Ev();
extern void _ZN5S87C73v27Ev();
extern void _ZN5S87C73v28Ev();
extern void _ZN5S87C73v29Ev();
extern void _ZN5S87C73v30Ev();
extern void _ZN5S87C73v31Ev();
extern void _ZN5S87C73v32Ev();
extern void _ZN5S87C73v33Ev();
extern void _ZN5S87C73v34Ev();
extern void _ZN5S87C73v35Ev();
extern void _ZN5S87C73v36Ev();
extern void _ZN5S87C73v37Ev();
extern void _ZN5S87C73v38Ev();
extern void _ZN5S87C73v39Ev();
extern void _ZN5S87C73v40Ev();
extern void _ZN5S87C73v41Ev();
extern void _ZN5S87C73v42Ev();
extern void _ZN5S87C73v43Ev();
extern void _ZN5S87C73v44Ev();
extern void _ZN5S87C73v45Ev();
extern void _ZN5S87C73v46Ev();
extern void _ZN5S87C73v47Ev();
extern void _ZN5S87C73v48Ev();
extern void _ZN5S87C73v49Ev();
extern void _ZN5S87C73v50Ev();
extern void _ZN5S87C73v51Ev();
extern void _ZN5S87C73v52Ev();
extern void _ZN5S87C73v53Ev();
extern void _ZN5S87C73v54Ev();
extern void _ZN5S87C73v55Ev();
extern void _ZN5S87C73v56Ev();
extern void _ZN5S87C73v57Ev();
extern void _ZN5S87C73v58Ev();
extern void _ZN5S87C73v59Ev();
extern void _ZN5S87C73v60Ev();
extern void _ZN5S87C73v61Ev();
extern void _ZN5S87C73v62Ev();
extern void _ZN5S87C73v63Ev();
extern void _ZN5S87C73v64Ev();
extern void _ZN5S87C73v65Ev();
extern void _ZN5S87C73v66Ev();
extern void _ZN5S87C73v67Ev();
extern void _ZN8S87C6_nt3v68Ev();
extern void _ZN8S87C6_nt3v69Ev();
extern void _ZN8S87C5_nt3v70Ev();
extern void _ZN8S87C5_nt3v71Ev();
extern void _ZN8S87C5_nt3v72Ev();
extern void _ZN8S87C5_nt3v73Ev();
extern void _ZN8S87C5_nt3v74Ev();
extern void _ZN8S87C5_nt3v75Ev();
extern void _ZN8S87C5_nt3v76Ev();
extern void _ZN8S87C5_nt3v77Ev();
extern void _ZN8S87C5_nt3v78Ev();
extern void _ZN8S87C5_nt3v79Ev();
extern void _ZN8S87C5_nt3v80Ev();
extern void _ZN8S87C5_nt3v81Ev();
extern void _ZN5S87C43v86Ev();
extern void _ZN5S87C43v87Ev();
extern void _ZN5S87C43v88Ev();
extern void _ZN5S87C43v89Ev();
extern void _ZN5S87C43v90Ev();
extern void _ZN5S87C43v91Ev();
extern void _ZN5S87C43v92Ev();
extern void _ZN5S87C43v93Ev();
extern void _ZN5S87C43v94Ev();
extern void _ZN5S87C43v95Ev();
extern void ABISELECT(_ZThn136_N5S87C4D1Ev,_ZThn88_N5S87C4D1Ev)();
extern void ABISELECT(_ZThn136_N5S87C4D0Ev,_ZThn88_N5S87C4D0Ev)();
extern void _ZN9S87C13_nt3v82Ev();
extern void _ZN9S87C13_nt3v83Ev();
extern void _ZN9S87C13_nt3v84Ev();
extern void _ZN9S87C13_nt3v85Ev();
static  VTBL_ENTRY vtc_S87C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S87C4[0]),
  (VTBL_ENTRY)&_ZN5S87C4D1Ev,
  (VTBL_ENTRY)&_ZN5S87C4D0Ev,
  (VTBL_ENTRY)&_ZN5S87C72v4Ev,
  (VTBL_ENTRY)&_ZN5S87C72v5Ev,
  (VTBL_ENTRY)&_ZN5S87C72v6Ev,
  (VTBL_ENTRY)&_ZN5S87C72v7Ev,
  (VTBL_ENTRY)&_ZN5S87C72v8Ev,
  (VTBL_ENTRY)&_ZN5S87C72v9Ev,
  (VTBL_ENTRY)&_ZN5S87C73v10Ev,
  (VTBL_ENTRY)&_ZN5S87C73v11Ev,
  (VTBL_ENTRY)&_ZN5S87C73v12Ev,
  (VTBL_ENTRY)&_ZN5S87C73v13Ev,
  (VTBL_ENTRY)&_ZN5S87C73v14Ev,
  (VTBL_ENTRY)&_ZN5S87C73v15Ev,
  (VTBL_ENTRY)&_ZN5S87C73v16Ev,
  (VTBL_ENTRY)&_ZN5S87C73v17Ev,
  (VTBL_ENTRY)&_ZN5S87C73v18Ev,
  (VTBL_ENTRY)&_ZN5S87C73v19Ev,
  (VTBL_ENTRY)&_ZN5S87C73v20Ev,
  (VTBL_ENTRY)&_ZN5S87C73v21Ev,
  (VTBL_ENTRY)&_ZN5S87C73v22Ev,
  (VTBL_ENTRY)&_ZN5S87C73v23Ev,
  (VTBL_ENTRY)&_ZN5S87C73v24Ev,
  (VTBL_ENTRY)&_ZN5S87C73v25Ev,
  (VTBL_ENTRY)&_ZN5S87C73v26Ev,
  (VTBL_ENTRY)&_ZN5S87C73v27Ev,
  (VTBL_ENTRY)&_ZN5S87C73v28Ev,
  (VTBL_ENTRY)&_ZN5S87C73v29Ev,
  (VTBL_ENTRY)&_ZN5S87C73v30Ev,
  (VTBL_ENTRY)&_ZN5S87C73v31Ev,
  (VTBL_ENTRY)&_ZN5S87C73v32Ev,
  (VTBL_ENTRY)&_ZN5S87C73v33Ev,
  (VTBL_ENTRY)&_ZN5S87C73v34Ev,
  (VTBL_ENTRY)&_ZN5S87C73v35Ev,
  (VTBL_ENTRY)&_ZN5S87C73v36Ev,
  (VTBL_ENTRY)&_ZN5S87C73v37Ev,
  (VTBL_ENTRY)&_ZN5S87C73v38Ev,
  (VTBL_ENTRY)&_ZN5S87C73v39Ev,
  (VTBL_ENTRY)&_ZN5S87C73v40Ev,
  (VTBL_ENTRY)&_ZN5S87C73v41Ev,
  (VTBL_ENTRY)&_ZN5S87C73v42Ev,
  (VTBL_ENTRY)&_ZN5S87C73v43Ev,
  (VTBL_ENTRY)&_ZN5S87C73v44Ev,
  (VTBL_ENTRY)&_ZN5S87C73v45Ev,
  (VTBL_ENTRY)&_ZN5S87C73v46Ev,
  (VTBL_ENTRY)&_ZN5S87C73v47Ev,
  (VTBL_ENTRY)&_ZN5S87C73v48Ev,
  (VTBL_ENTRY)&_ZN5S87C73v49Ev,
  (VTBL_ENTRY)&_ZN5S87C73v50Ev,
  (VTBL_ENTRY)&_ZN5S87C73v51Ev,
  (VTBL_ENTRY)&_ZN5S87C73v52Ev,
  (VTBL_ENTRY)&_ZN5S87C73v53Ev,
  (VTBL_ENTRY)&_ZN5S87C73v54Ev,
  (VTBL_ENTRY)&_ZN5S87C73v55Ev,
  (VTBL_ENTRY)&_ZN5S87C73v56Ev,
  (VTBL_ENTRY)&_ZN5S87C73v57Ev,
  (VTBL_ENTRY)&_ZN5S87C73v58Ev,
  (VTBL_ENTRY)&_ZN5S87C73v59Ev,
  (VTBL_ENTRY)&_ZN5S87C73v60Ev,
  (VTBL_ENTRY)&_ZN5S87C73v61Ev,
  (VTBL_ENTRY)&_ZN5S87C73v62Ev,
  (VTBL_ENTRY)&_ZN5S87C73v63Ev,
  (VTBL_ENTRY)&_ZN5S87C73v64Ev,
  (VTBL_ENTRY)&_ZN5S87C73v65Ev,
  (VTBL_ENTRY)&_ZN5S87C73v66Ev,
  (VTBL_ENTRY)&_ZN5S87C73v67Ev,
  (VTBL_ENTRY)&_ZN8S87C6_nt3v68Ev,
  (VTBL_ENTRY)&_ZN8S87C6_nt3v69Ev,
  (VTBL_ENTRY)&_ZN8S87C5_nt3v70Ev,
  (VTBL_ENTRY)&_ZN8S87C5_nt3v71Ev,
  (VTBL_ENTRY)&_ZN8S87C5_nt3v72Ev,
  (VTBL_ENTRY)&_ZN8S87C5_nt3v73Ev,
  (VTBL_ENTRY)&_ZN8S87C5_nt3v74Ev,
  (VTBL_ENTRY)&_ZN8S87C5_nt3v75Ev,
  (VTBL_ENTRY)&_ZN8S87C5_nt3v76Ev,
  (VTBL_ENTRY)&_ZN8S87C5_nt3v77Ev,
  (VTBL_ENTRY)&_ZN8S87C5_nt3v78Ev,
  (VTBL_ENTRY)&_ZN8S87C5_nt3v79Ev,
  (VTBL_ENTRY)&_ZN8S87C5_nt3v80Ev,
  (VTBL_ENTRY)&_ZN8S87C5_nt3v81Ev,
  (VTBL_ENTRY)&_ZN5S87C43v86Ev,
  (VTBL_ENTRY)&_ZN5S87C43v87Ev,
  (VTBL_ENTRY)&_ZN5S87C43v88Ev,
  (VTBL_ENTRY)&_ZN5S87C43v89Ev,
  (VTBL_ENTRY)&_ZN5S87C43v90Ev,
  (VTBL_ENTRY)&_ZN5S87C43v91Ev,
  (VTBL_ENTRY)&_ZN5S87C43v92Ev,
  (VTBL_ENTRY)&_ZN5S87C43v93Ev,
  (VTBL_ENTRY)&_ZN5S87C43v94Ev,
  (VTBL_ENTRY)&_ZN5S87C43v95Ev,
  ABISELECT(-136,-88),
  (VTBL_ENTRY)&(_ZTI5S87C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn136_N5S87C4D1Ev,_ZThn88_N5S87C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn136_N5S87C4D0Ev,_ZThn88_N5S87C4D0Ev),
  (VTBL_ENTRY)&_ZN9S87C13_nt3v82Ev,
  (VTBL_ENTRY)&_ZN9S87C13_nt3v83Ev,
  (VTBL_ENTRY)&_ZN9S87C13_nt3v84Ev,
  (VTBL_ENTRY)&_ZN9S87C13_nt3v85Ev,
};
extern VTBL_ENTRY _ZTI5S87C4[];
extern  VTBL_ENTRY _ZTV5S87C4[];
Class_Descriptor cd_S87C4 = {  "S87C4", // class name
  bases_S87C4, 4,
  &(vtc_S87C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(144,92), // object size
  NSPAIRA(_ZTI5S87C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV5S87C4),100, //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  S87C3  : S87C4 {
  void *s87c3f0;
  virtual  ~S87C3(); // _ZN5S87C3D1Ev
  virtual void  v96(); // _ZN5S87C33v96Ev
  virtual void  v97(); // _ZN5S87C33v97Ev
  virtual void  v98(); // _ZN5S87C33v98Ev
  virtual void  v99(); // _ZN5S87C33v99Ev
  virtual void  v100(); // _ZN5S87C34v100Ev
  virtual void  v101(); // _ZN5S87C34v101Ev
  S87C3(); // tgen
};
//SIG(-1 S87C3) C1{ BC2{ BC3{ BC4{ BC5{ vd v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 Fi FL Fp[4] Fi[2] Fp FC6{ m Fi[2]} Fp[2]} vd v71 v72} vd v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 Fc FC7{ BC8{ BC9{ m Fp Fi[2]}}} FC10{ m Fp FC6}} BC11{ vd v85 v86 v87 v88} vd v89 v90 v91 v92 v93 v94 v95 v96 v97 v98} vd v1 v2 v3 v4 v5 v6 Fp}


 S87C3 ::~S87C3(){ note_dtor("S87C3", this);}
void  S87C3 ::v96(){vfunc_called(this, "_ZN5S87C33v96Ev");}
void  S87C3 ::v97(){vfunc_called(this, "_ZN5S87C33v97Ev");}
void  S87C3 ::v98(){vfunc_called(this, "_ZN5S87C33v98Ev");}
void  S87C3 ::v99(){vfunc_called(this, "_ZN5S87C33v99Ev");}
void  S87C3 ::v100(){vfunc_called(this, "_ZN5S87C34v100Ev");}
void  S87C3 ::v101(){vfunc_called(this, "_ZN5S87C34v101Ev");}
S87C3 ::S87C3(){ note_ctor("S87C3", this);} // tgen

static void Test_S87C3()
{
  extern Class_Descriptor cd_S87C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,25)];
    init_test(&cd_S87C3, buf);
    S87C3 *dp, &lv = *(dp=new (buf) S87C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,96), "sizeof(S87C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S87C3)");
    check_base_class_offset(lv, (S87C7*)(S87C6_nt*)(S87C5_nt*)(S87C4*), 0, "S87C3");
    check_base_class_offset(lv, (S87C6_nt*)(S87C5_nt*)(S87C4*), 0, "S87C3");
    check_base_class_offset(lv, (S87C5_nt*)(S87C4*), 0, "S87C3");
    check_base_class_offset(lv, (S87C13_nt*)(S87C4*), ABISELECT(136,88), "S87C3");
    check_base_class_offset(lv, (S87C4*), 0, "S87C3");
    check_field_offset(lv, s87c3f0, ABISELECT(144,92), "S87C3.s87c3f0");
    test_class_info(&lv, &cd_S87C3);
    dp->~S87C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS87C3(Test_S87C3, "S87C3", ABISELECT(152,96));

#else // __cplusplus

extern void _ZN5S87C3C1Ev();
extern void _ZN5S87C3D1Ev();
Name_Map name_map_S87C3[] = {
  NSPAIR(_ZN5S87C3C1Ev),
  NSPAIR(_ZN5S87C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S87C7;
extern VTBL_ENTRY _ZTI5S87C7[];
extern  VTBL_ENTRY _ZTV5S87C7[];
extern Class_Descriptor cd_S87C6_nt;
extern VTBL_ENTRY _ZTI8S87C6_nt[];
extern  VTBL_ENTRY _ZTV8S87C6_nt[];
extern Class_Descriptor cd_S87C5_nt;
extern VTBL_ENTRY _ZTI8S87C5_nt[];
extern  VTBL_ENTRY _ZTV8S87C5_nt[];
extern Class_Descriptor cd_S87C13_nt;
extern VTBL_ENTRY _ZTI9S87C13_nt[];
extern  VTBL_ENTRY _ZTV9S87C13_nt[];
extern Class_Descriptor cd_S87C4;
extern VTBL_ENTRY _ZTI5S87C4[];
extern  VTBL_ENTRY _ZTV5S87C4[];
static Base_Class bases_S87C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S87C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S87C6_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S87C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S87C13_nt,    ABISELECT(136,88), //bcp->offset
    98, //bcp->virtual_function_table_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_S87C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI5S87C3[];
extern void _ZN5S87C3D1Ev();
extern void _ZN5S87C3D0Ev();
extern void _ZN5S87C72v4Ev();
extern void _ZN5S87C72v5Ev();
extern void _ZN5S87C72v6Ev();
extern void _ZN5S87C72v7Ev();
extern void _ZN5S87C72v8Ev();
extern void _ZN5S87C72v9Ev();
extern void _ZN5S87C73v10Ev();
extern void _ZN5S87C73v11Ev();
extern void _ZN5S87C73v12Ev();
extern void _ZN5S87C73v13Ev();
extern void _ZN5S87C73v14Ev();
extern void _ZN5S87C73v15Ev();
extern void _ZN5S87C73v16Ev();
extern void _ZN5S87C73v17Ev();
extern void _ZN5S87C73v18Ev();
extern void _ZN5S87C73v19Ev();
extern void _ZN5S87C73v20Ev();
extern void _ZN5S87C73v21Ev();
extern void _ZN5S87C73v22Ev();
extern void _ZN5S87C73v23Ev();
extern void _ZN5S87C73v24Ev();
extern void _ZN5S87C73v25Ev();
extern void _ZN5S87C73v26Ev();
extern void _ZN5S87C73v27Ev();
extern void _ZN5S87C73v28Ev();
extern void _ZN5S87C73v29Ev();
extern void _ZN5S87C73v30Ev();
extern void _ZN5S87C73v31Ev();
extern void _ZN5S87C73v32Ev();
extern void _ZN5S87C73v33Ev();
extern void _ZN5S87C73v34Ev();
extern void _ZN5S87C73v35Ev();
extern void _ZN5S87C73v36Ev();
extern void _ZN5S87C73v37Ev();
extern void _ZN5S87C73v38Ev();
extern void _ZN5S87C73v39Ev();
extern void _ZN5S87C73v40Ev();
extern void _ZN5S87C73v41Ev();
extern void _ZN5S87C73v42Ev();
extern void _ZN5S87C73v43Ev();
extern void _ZN5S87C73v44Ev();
extern void _ZN5S87C73v45Ev();
extern void _ZN5S87C73v46Ev();
extern void _ZN5S87C73v47Ev();
extern void _ZN5S87C73v48Ev();
extern void _ZN5S87C73v49Ev();
extern void _ZN5S87C73v50Ev();
extern void _ZN5S87C73v51Ev();
extern void _ZN5S87C73v52Ev();
extern void _ZN5S87C73v53Ev();
extern void _ZN5S87C73v54Ev();
extern void _ZN5S87C73v55Ev();
extern void _ZN5S87C73v56Ev();
extern void _ZN5S87C73v57Ev();
extern void _ZN5S87C73v58Ev();
extern void _ZN5S87C73v59Ev();
extern void _ZN5S87C73v60Ev();
extern void _ZN5S87C73v61Ev();
extern void _ZN5S87C73v62Ev();
extern void _ZN5S87C73v63Ev();
extern void _ZN5S87C73v64Ev();
extern void _ZN5S87C73v65Ev();
extern void _ZN5S87C73v66Ev();
extern void _ZN5S87C73v67Ev();
extern void _ZN8S87C6_nt3v68Ev();
extern void _ZN8S87C6_nt3v69Ev();
extern void _ZN8S87C5_nt3v70Ev();
extern void _ZN8S87C5_nt3v71Ev();
extern void _ZN8S87C5_nt3v72Ev();
extern void _ZN8S87C5_nt3v73Ev();
extern void _ZN8S87C5_nt3v74Ev();
extern void _ZN8S87C5_nt3v75Ev();
extern void _ZN8S87C5_nt3v76Ev();
extern void _ZN8S87C5_nt3v77Ev();
extern void _ZN8S87C5_nt3v78Ev();
extern void _ZN8S87C5_nt3v79Ev();
extern void _ZN8S87C5_nt3v80Ev();
extern void _ZN8S87C5_nt3v81Ev();
extern void _ZN5S87C43v86Ev();
extern void _ZN5S87C43v87Ev();
extern void _ZN5S87C43v88Ev();
extern void _ZN5S87C43v89Ev();
extern void _ZN5S87C43v90Ev();
extern void _ZN5S87C43v91Ev();
extern void _ZN5S87C43v92Ev();
extern void _ZN5S87C43v93Ev();
extern void _ZN5S87C43v94Ev();
extern void _ZN5S87C43v95Ev();
extern void _ZN5S87C33v96Ev();
extern void _ZN5S87C33v97Ev();
extern void _ZN5S87C33v98Ev();
extern void _ZN5S87C33v99Ev();
extern void _ZN5S87C34v100Ev();
extern void _ZN5S87C34v101Ev();
extern void ABISELECT(_ZThn136_N5S87C3D1Ev,_ZThn88_N5S87C3D1Ev)();
extern void ABISELECT(_ZThn136_N5S87C3D0Ev,_ZThn88_N5S87C3D0Ev)();
extern void _ZN9S87C13_nt3v82Ev();
extern void _ZN9S87C13_nt3v83Ev();
extern void _ZN9S87C13_nt3v84Ev();
extern void _ZN9S87C13_nt3v85Ev();
static  VTBL_ENTRY vtc_S87C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S87C3[0]),
  (VTBL_ENTRY)&_ZN5S87C3D1Ev,
  (VTBL_ENTRY)&_ZN5S87C3D0Ev,
  (VTBL_ENTRY)&_ZN5S87C72v4Ev,
  (VTBL_ENTRY)&_ZN5S87C72v5Ev,
  (VTBL_ENTRY)&_ZN5S87C72v6Ev,
  (VTBL_ENTRY)&_ZN5S87C72v7Ev,
  (VTBL_ENTRY)&_ZN5S87C72v8Ev,
  (VTBL_ENTRY)&_ZN5S87C72v9Ev,
  (VTBL_ENTRY)&_ZN5S87C73v10Ev,
  (VTBL_ENTRY)&_ZN5S87C73v11Ev,
  (VTBL_ENTRY)&_ZN5S87C73v12Ev,
  (VTBL_ENTRY)&_ZN5S87C73v13Ev,
  (VTBL_ENTRY)&_ZN5S87C73v14Ev,
  (VTBL_ENTRY)&_ZN5S87C73v15Ev,
  (VTBL_ENTRY)&_ZN5S87C73v16Ev,
  (VTBL_ENTRY)&_ZN5S87C73v17Ev,
  (VTBL_ENTRY)&_ZN5S87C73v18Ev,
  (VTBL_ENTRY)&_ZN5S87C73v19Ev,
  (VTBL_ENTRY)&_ZN5S87C73v20Ev,
  (VTBL_ENTRY)&_ZN5S87C73v21Ev,
  (VTBL_ENTRY)&_ZN5S87C73v22Ev,
  (VTBL_ENTRY)&_ZN5S87C73v23Ev,
  (VTBL_ENTRY)&_ZN5S87C73v24Ev,
  (VTBL_ENTRY)&_ZN5S87C73v25Ev,
  (VTBL_ENTRY)&_ZN5S87C73v26Ev,
  (VTBL_ENTRY)&_ZN5S87C73v27Ev,
  (VTBL_ENTRY)&_ZN5S87C73v28Ev,
  (VTBL_ENTRY)&_ZN5S87C73v29Ev,
  (VTBL_ENTRY)&_ZN5S87C73v30Ev,
  (VTBL_ENTRY)&_ZN5S87C73v31Ev,
  (VTBL_ENTRY)&_ZN5S87C73v32Ev,
  (VTBL_ENTRY)&_ZN5S87C73v33Ev,
  (VTBL_ENTRY)&_ZN5S87C73v34Ev,
  (VTBL_ENTRY)&_ZN5S87C73v35Ev,
  (VTBL_ENTRY)&_ZN5S87C73v36Ev,
  (VTBL_ENTRY)&_ZN5S87C73v37Ev,
  (VTBL_ENTRY)&_ZN5S87C73v38Ev,
  (VTBL_ENTRY)&_ZN5S87C73v39Ev,
  (VTBL_ENTRY)&_ZN5S87C73v40Ev,
  (VTBL_ENTRY)&_ZN5S87C73v41Ev,
  (VTBL_ENTRY)&_ZN5S87C73v42Ev,
  (VTBL_ENTRY)&_ZN5S87C73v43Ev,
  (VTBL_ENTRY)&_ZN5S87C73v44Ev,
  (VTBL_ENTRY)&_ZN5S87C73v45Ev,
  (VTBL_ENTRY)&_ZN5S87C73v46Ev,
  (VTBL_ENTRY)&_ZN5S87C73v47Ev,
  (VTBL_ENTRY)&_ZN5S87C73v48Ev,
  (VTBL_ENTRY)&_ZN5S87C73v49Ev,
  (VTBL_ENTRY)&_ZN5S87C73v50Ev,
  (VTBL_ENTRY)&_ZN5S87C73v51Ev,
  (VTBL_ENTRY)&_ZN5S87C73v52Ev,
  (VTBL_ENTRY)&_ZN5S87C73v53Ev,
  (VTBL_ENTRY)&_ZN5S87C73v54Ev,
  (VTBL_ENTRY)&_ZN5S87C73v55Ev,
  (VTBL_ENTRY)&_ZN5S87C73v56Ev,
  (VTBL_ENTRY)&_ZN5S87C73v57Ev,
  (VTBL_ENTRY)&_ZN5S87C73v58Ev,
  (VTBL_ENTRY)&_ZN5S87C73v59Ev,
  (VTBL_ENTRY)&_ZN5S87C73v60Ev,
  (VTBL_ENTRY)&_ZN5S87C73v61Ev,
  (VTBL_ENTRY)&_ZN5S87C73v62Ev,
  (VTBL_ENTRY)&_ZN5S87C73v63Ev,
  (VTBL_ENTRY)&_ZN5S87C73v64Ev,
  (VTBL_ENTRY)&_ZN5S87C73v65Ev,
  (VTBL_ENTRY)&_ZN5S87C73v66Ev,
  (VTBL_ENTRY)&_ZN5S87C73v67Ev,
  (VTBL_ENTRY)&_ZN8S87C6_nt3v68Ev,
  (VTBL_ENTRY)&_ZN8S87C6_nt3v69Ev,
  (VTBL_ENTRY)&_ZN8S87C5_nt3v70Ev,
  (VTBL_ENTRY)&_ZN8S87C5_nt3v71Ev,
  (VTBL_ENTRY)&_ZN8S87C5_nt3v72Ev,
  (VTBL_ENTRY)&_ZN8S87C5_nt3v73Ev,
  (VTBL_ENTRY)&_ZN8S87C5_nt3v74Ev,
  (VTBL_ENTRY)&_ZN8S87C5_nt3v75Ev,
  (VTBL_ENTRY)&_ZN8S87C5_nt3v76Ev,
  (VTBL_ENTRY)&_ZN8S87C5_nt3v77Ev,
  (VTBL_ENTRY)&_ZN8S87C5_nt3v78Ev,
  (VTBL_ENTRY)&_ZN8S87C5_nt3v79Ev,
  (VTBL_ENTRY)&_ZN8S87C5_nt3v80Ev,
  (VTBL_ENTRY)&_ZN8S87C5_nt3v81Ev,
  (VTBL_ENTRY)&_ZN5S87C43v86Ev,
  (VTBL_ENTRY)&_ZN5S87C43v87Ev,
  (VTBL_ENTRY)&_ZN5S87C43v88Ev,
  (VTBL_ENTRY)&_ZN5S87C43v89Ev,
  (VTBL_ENTRY)&_ZN5S87C43v90Ev,
  (VTBL_ENTRY)&_ZN5S87C43v91Ev,
  (VTBL_ENTRY)&_ZN5S87C43v92Ev,
  (VTBL_ENTRY)&_ZN5S87C43v93Ev,
  (VTBL_ENTRY)&_ZN5S87C43v94Ev,
  (VTBL_ENTRY)&_ZN5S87C43v95Ev,
  (VTBL_ENTRY)&_ZN5S87C33v96Ev,
  (VTBL_ENTRY)&_ZN5S87C33v97Ev,
  (VTBL_ENTRY)&_ZN5S87C33v98Ev,
  (VTBL_ENTRY)&_ZN5S87C33v99Ev,
  (VTBL_ENTRY)&_ZN5S87C34v100Ev,
  (VTBL_ENTRY)&_ZN5S87C34v101Ev,
  ABISELECT(-136,-88),
  (VTBL_ENTRY)&(_ZTI5S87C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn136_N5S87C3D1Ev,_ZThn88_N5S87C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn136_N5S87C3D0Ev,_ZThn88_N5S87C3D0Ev),
  (VTBL_ENTRY)&_ZN9S87C13_nt3v82Ev,
  (VTBL_ENTRY)&_ZN9S87C13_nt3v83Ev,
  (VTBL_ENTRY)&_ZN9S87C13_nt3v84Ev,
  (VTBL_ENTRY)&_ZN9S87C13_nt3v85Ev,
};
extern VTBL_ENTRY _ZTI5S87C3[];
extern  VTBL_ENTRY _ZTV5S87C3[];
Class_Descriptor cd_S87C3 = {  "S87C3", // class name
  bases_S87C3, 5,
  &(vtc_S87C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(152,96), // object size
  NSPAIRA(_ZTI5S87C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S87C3),106, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  5, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S87C2  : S87C3 {
  ::S3352C11 s87c2f0;
  virtual  ~S87C2(); // _ZN5S87C2D1Ev
  virtual void  v102(); // _ZN5S87C24v102Ev
  virtual void  v103(); // _ZN5S87C24v103Ev
  virtual void  v104(); // _ZN5S87C24v104Ev
  virtual void  v105(); // _ZN5S87C24v105Ev
  virtual void  v106(); // _ZN5S87C24v106Ev
  S87C2(); // tgen
};
//SIG(-1 S87C2) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ vd v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 Fi FL Fp[4] Fi[2] Fp FC7{ m Fi[2]} Fp[2]} vd v70 v71} vd v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 Fc FC8{ BC9{ BC10{ m Fp Fi[2]}}} FC11{ m Fp FC7}} BC12{ vd v84 v85 v86 v87} vd v88 v89 v90 v91 v92 v93 v94 v95 v96 v97} vd v98 v99 v100 v101 v102 v103 Fp} vd v1 v2 v3 v4 v5 FC13{ BC14{ BC10}}}


 S87C2 ::~S87C2(){ note_dtor("S87C2", this);}
void  S87C2 ::v102(){vfunc_called(this, "_ZN5S87C24v102Ev");}
void  S87C2 ::v103(){vfunc_called(this, "_ZN5S87C24v103Ev");}
void  S87C2 ::v104(){vfunc_called(this, "_ZN5S87C24v104Ev");}
void  S87C2 ::v105(){vfunc_called(this, "_ZN5S87C24v105Ev");}
void  S87C2 ::v106(){vfunc_called(this, "_ZN5S87C24v106Ev");}
S87C2 ::S87C2(){ note_ctor("S87C2", this);} // tgen

static void Test_S87C2()
{
  extern Class_Descriptor cd_S87C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(22,28)];
    init_test(&cd_S87C2, buf);
    S87C2 *dp, &lv = *(dp=new (buf) S87C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(168,108), "sizeof(S87C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S87C2)");
    check_base_class_offset(lv, (S87C7*)(S87C6_nt*)(S87C5_nt*)(S87C4*)(S87C3*), 0, "S87C2");
    check_base_class_offset(lv, (S87C6_nt*)(S87C5_nt*)(S87C4*)(S87C3*), 0, "S87C2");
    check_base_class_offset(lv, (S87C5_nt*)(S87C4*)(S87C3*), 0, "S87C2");
    check_base_class_offset(lv, (S87C13_nt*)(S87C4*)(S87C3*), ABISELECT(136,88), "S87C2");
    check_base_class_offset(lv, (S87C4*)(S87C3*), 0, "S87C2");
    check_base_class_offset(lv, (S87C3*), 0, "S87C2");
    check_field_offset(lv, s87c2f0, ABISELECT(152,96), "S87C2.s87c2f0");
    test_class_info(&lv, &cd_S87C2);
    dp->~S87C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS87C2(Test_S87C2, "S87C2", ABISELECT(168,108));

#else // __cplusplus

extern void _ZN5S87C2C1Ev();
extern void _ZN5S87C2D1Ev();
Name_Map name_map_S87C2[] = {
  NSPAIR(_ZN5S87C2C1Ev),
  NSPAIR(_ZN5S87C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S87C7;
extern VTBL_ENTRY _ZTI5S87C7[];
extern  VTBL_ENTRY _ZTV5S87C7[];
extern Class_Descriptor cd_S87C6_nt;
extern VTBL_ENTRY _ZTI8S87C6_nt[];
extern  VTBL_ENTRY _ZTV8S87C6_nt[];
extern Class_Descriptor cd_S87C5_nt;
extern VTBL_ENTRY _ZTI8S87C5_nt[];
extern  VTBL_ENTRY _ZTV8S87C5_nt[];
extern Class_Descriptor cd_S87C13_nt;
extern VTBL_ENTRY _ZTI9S87C13_nt[];
extern  VTBL_ENTRY _ZTV9S87C13_nt[];
extern Class_Descriptor cd_S87C4;
extern VTBL_ENTRY _ZTI5S87C4[];
extern  VTBL_ENTRY _ZTV5S87C4[];
extern Class_Descriptor cd_S87C3;
extern VTBL_ENTRY _ZTI5S87C3[];
extern  VTBL_ENTRY _ZTV5S87C3[];
static Base_Class bases_S87C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S87C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S87C6_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S87C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S87C13_nt,    ABISELECT(136,88), //bcp->offset
    103, //bcp->virtual_function_table_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_S87C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S87C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI5S87C2[];
extern void _ZN5S87C2D1Ev();
extern void _ZN5S87C2D0Ev();
extern void _ZN5S87C72v4Ev();
extern void _ZN5S87C72v5Ev();
extern void _ZN5S87C72v6Ev();
extern void _ZN5S87C72v7Ev();
extern void _ZN5S87C72v8Ev();
extern void _ZN5S87C72v9Ev();
extern void _ZN5S87C73v10Ev();
extern void _ZN5S87C73v11Ev();
extern void _ZN5S87C73v12Ev();
extern void _ZN5S87C73v13Ev();
extern void _ZN5S87C73v14Ev();
extern void _ZN5S87C73v15Ev();
extern void _ZN5S87C73v16Ev();
extern void _ZN5S87C73v17Ev();
extern void _ZN5S87C73v18Ev();
extern void _ZN5S87C73v19Ev();
extern void _ZN5S87C73v20Ev();
extern void _ZN5S87C73v21Ev();
extern void _ZN5S87C73v22Ev();
extern void _ZN5S87C73v23Ev();
extern void _ZN5S87C73v24Ev();
extern void _ZN5S87C73v25Ev();
extern void _ZN5S87C73v26Ev();
extern void _ZN5S87C73v27Ev();
extern void _ZN5S87C73v28Ev();
extern void _ZN5S87C73v29Ev();
extern void _ZN5S87C73v30Ev();
extern void _ZN5S87C73v31Ev();
extern void _ZN5S87C73v32Ev();
extern void _ZN5S87C73v33Ev();
extern void _ZN5S87C73v34Ev();
extern void _ZN5S87C73v35Ev();
extern void _ZN5S87C73v36Ev();
extern void _ZN5S87C73v37Ev();
extern void _ZN5S87C73v38Ev();
extern void _ZN5S87C73v39Ev();
extern void _ZN5S87C73v40Ev();
extern void _ZN5S87C73v41Ev();
extern void _ZN5S87C73v42Ev();
extern void _ZN5S87C73v43Ev();
extern void _ZN5S87C73v44Ev();
extern void _ZN5S87C73v45Ev();
extern void _ZN5S87C73v46Ev();
extern void _ZN5S87C73v47Ev();
extern void _ZN5S87C73v48Ev();
extern void _ZN5S87C73v49Ev();
extern void _ZN5S87C73v50Ev();
extern void _ZN5S87C73v51Ev();
extern void _ZN5S87C73v52Ev();
extern void _ZN5S87C73v53Ev();
extern void _ZN5S87C73v54Ev();
extern void _ZN5S87C73v55Ev();
extern void _ZN5S87C73v56Ev();
extern void _ZN5S87C73v57Ev();
extern void _ZN5S87C73v58Ev();
extern void _ZN5S87C73v59Ev();
extern void _ZN5S87C73v60Ev();
extern void _ZN5S87C73v61Ev();
extern void _ZN5S87C73v62Ev();
extern void _ZN5S87C73v63Ev();
extern void _ZN5S87C73v64Ev();
extern void _ZN5S87C73v65Ev();
extern void _ZN5S87C73v66Ev();
extern void _ZN5S87C73v67Ev();
extern void _ZN8S87C6_nt3v68Ev();
extern void _ZN8S87C6_nt3v69Ev();
extern void _ZN8S87C5_nt3v70Ev();
extern void _ZN8S87C5_nt3v71Ev();
extern void _ZN8S87C5_nt3v72Ev();
extern void _ZN8S87C5_nt3v73Ev();
extern void _ZN8S87C5_nt3v74Ev();
extern void _ZN8S87C5_nt3v75Ev();
extern void _ZN8S87C5_nt3v76Ev();
extern void _ZN8S87C5_nt3v77Ev();
extern void _ZN8S87C5_nt3v78Ev();
extern void _ZN8S87C5_nt3v79Ev();
extern void _ZN8S87C5_nt3v80Ev();
extern void _ZN8S87C5_nt3v81Ev();
extern void _ZN5S87C43v86Ev();
extern void _ZN5S87C43v87Ev();
extern void _ZN5S87C43v88Ev();
extern void _ZN5S87C43v89Ev();
extern void _ZN5S87C43v90Ev();
extern void _ZN5S87C43v91Ev();
extern void _ZN5S87C43v92Ev();
extern void _ZN5S87C43v93Ev();
extern void _ZN5S87C43v94Ev();
extern void _ZN5S87C43v95Ev();
extern void _ZN5S87C33v96Ev();
extern void _ZN5S87C33v97Ev();
extern void _ZN5S87C33v98Ev();
extern void _ZN5S87C33v99Ev();
extern void _ZN5S87C34v100Ev();
extern void _ZN5S87C34v101Ev();
extern void _ZN5S87C24v102Ev();
extern void _ZN5S87C24v103Ev();
extern void _ZN5S87C24v104Ev();
extern void _ZN5S87C24v105Ev();
extern void _ZN5S87C24v106Ev();
extern void ABISELECT(_ZThn136_N5S87C2D1Ev,_ZThn88_N5S87C2D1Ev)();
extern void ABISELECT(_ZThn136_N5S87C2D0Ev,_ZThn88_N5S87C2D0Ev)();
extern void _ZN9S87C13_nt3v82Ev();
extern void _ZN9S87C13_nt3v83Ev();
extern void _ZN9S87C13_nt3v84Ev();
extern void _ZN9S87C13_nt3v85Ev();
static  VTBL_ENTRY vtc_S87C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S87C2[0]),
  (VTBL_ENTRY)&_ZN5S87C2D1Ev,
  (VTBL_ENTRY)&_ZN5S87C2D0Ev,
  (VTBL_ENTRY)&_ZN5S87C72v4Ev,
  (VTBL_ENTRY)&_ZN5S87C72v5Ev,
  (VTBL_ENTRY)&_ZN5S87C72v6Ev,
  (VTBL_ENTRY)&_ZN5S87C72v7Ev,
  (VTBL_ENTRY)&_ZN5S87C72v8Ev,
  (VTBL_ENTRY)&_ZN5S87C72v9Ev,
  (VTBL_ENTRY)&_ZN5S87C73v10Ev,
  (VTBL_ENTRY)&_ZN5S87C73v11Ev,
  (VTBL_ENTRY)&_ZN5S87C73v12Ev,
  (VTBL_ENTRY)&_ZN5S87C73v13Ev,
  (VTBL_ENTRY)&_ZN5S87C73v14Ev,
  (VTBL_ENTRY)&_ZN5S87C73v15Ev,
  (VTBL_ENTRY)&_ZN5S87C73v16Ev,
  (VTBL_ENTRY)&_ZN5S87C73v17Ev,
  (VTBL_ENTRY)&_ZN5S87C73v18Ev,
  (VTBL_ENTRY)&_ZN5S87C73v19Ev,
  (VTBL_ENTRY)&_ZN5S87C73v20Ev,
  (VTBL_ENTRY)&_ZN5S87C73v21Ev,
  (VTBL_ENTRY)&_ZN5S87C73v22Ev,
  (VTBL_ENTRY)&_ZN5S87C73v23Ev,
  (VTBL_ENTRY)&_ZN5S87C73v24Ev,
  (VTBL_ENTRY)&_ZN5S87C73v25Ev,
  (VTBL_ENTRY)&_ZN5S87C73v26Ev,
  (VTBL_ENTRY)&_ZN5S87C73v27Ev,
  (VTBL_ENTRY)&_ZN5S87C73v28Ev,
  (VTBL_ENTRY)&_ZN5S87C73v29Ev,
  (VTBL_ENTRY)&_ZN5S87C73v30Ev,
  (VTBL_ENTRY)&_ZN5S87C73v31Ev,
  (VTBL_ENTRY)&_ZN5S87C73v32Ev,
  (VTBL_ENTRY)&_ZN5S87C73v33Ev,
  (VTBL_ENTRY)&_ZN5S87C73v34Ev,
  (VTBL_ENTRY)&_ZN5S87C73v35Ev,
  (VTBL_ENTRY)&_ZN5S87C73v36Ev,
  (VTBL_ENTRY)&_ZN5S87C73v37Ev,
  (VTBL_ENTRY)&_ZN5S87C73v38Ev,
  (VTBL_ENTRY)&_ZN5S87C73v39Ev,
  (VTBL_ENTRY)&_ZN5S87C73v40Ev,
  (VTBL_ENTRY)&_ZN5S87C73v41Ev,
  (VTBL_ENTRY)&_ZN5S87C73v42Ev,
  (VTBL_ENTRY)&_ZN5S87C73v43Ev,
  (VTBL_ENTRY)&_ZN5S87C73v44Ev,
  (VTBL_ENTRY)&_ZN5S87C73v45Ev,
  (VTBL_ENTRY)&_ZN5S87C73v46Ev,
  (VTBL_ENTRY)&_ZN5S87C73v47Ev,
  (VTBL_ENTRY)&_ZN5S87C73v48Ev,
  (VTBL_ENTRY)&_ZN5S87C73v49Ev,
  (VTBL_ENTRY)&_ZN5S87C73v50Ev,
  (VTBL_ENTRY)&_ZN5S87C73v51Ev,
  (VTBL_ENTRY)&_ZN5S87C73v52Ev,
  (VTBL_ENTRY)&_ZN5S87C73v53Ev,
  (VTBL_ENTRY)&_ZN5S87C73v54Ev,
  (VTBL_ENTRY)&_ZN5S87C73v55Ev,
  (VTBL_ENTRY)&_ZN5S87C73v56Ev,
  (VTBL_ENTRY)&_ZN5S87C73v57Ev,
  (VTBL_ENTRY)&_ZN5S87C73v58Ev,
  (VTBL_ENTRY)&_ZN5S87C73v59Ev,
  (VTBL_ENTRY)&_ZN5S87C73v60Ev,
  (VTBL_ENTRY)&_ZN5S87C73v61Ev,
  (VTBL_ENTRY)&_ZN5S87C73v62Ev,
  (VTBL_ENTRY)&_ZN5S87C73v63Ev,
  (VTBL_ENTRY)&_ZN5S87C73v64Ev,
  (VTBL_ENTRY)&_ZN5S87C73v65Ev,
  (VTBL_ENTRY)&_ZN5S87C73v66Ev,
  (VTBL_ENTRY)&_ZN5S87C73v67Ev,
  (VTBL_ENTRY)&_ZN8S87C6_nt3v68Ev,
  (VTBL_ENTRY)&_ZN8S87C6_nt3v69Ev,
  (VTBL_ENTRY)&_ZN8S87C5_nt3v70Ev,
  (VTBL_ENTRY)&_ZN8S87C5_nt3v71Ev,
  (VTBL_ENTRY)&_ZN8S87C5_nt3v72Ev,
  (VTBL_ENTRY)&_ZN8S87C5_nt3v73Ev,
  (VTBL_ENTRY)&_ZN8S87C5_nt3v74Ev,
  (VTBL_ENTRY)&_ZN8S87C5_nt3v75Ev,
  (VTBL_ENTRY)&_ZN8S87C5_nt3v76Ev,
  (VTBL_ENTRY)&_ZN8S87C5_nt3v77Ev,
  (VTBL_ENTRY)&_ZN8S87C5_nt3v78Ev,
  (VTBL_ENTRY)&_ZN8S87C5_nt3v79Ev,
  (VTBL_ENTRY)&_ZN8S87C5_nt3v80Ev,
  (VTBL_ENTRY)&_ZN8S87C5_nt3v81Ev,
  (VTBL_ENTRY)&_ZN5S87C43v86Ev,
  (VTBL_ENTRY)&_ZN5S87C43v87Ev,
  (VTBL_ENTRY)&_ZN5S87C43v88Ev,
  (VTBL_ENTRY)&_ZN5S87C43v89Ev,
  (VTBL_ENTRY)&_ZN5S87C43v90Ev,
  (VTBL_ENTRY)&_ZN5S87C43v91Ev,
  (VTBL_ENTRY)&_ZN5S87C43v92Ev,
  (VTBL_ENTRY)&_ZN5S87C43v93Ev,
  (VTBL_ENTRY)&_ZN5S87C43v94Ev,
  (VTBL_ENTRY)&_ZN5S87C43v95Ev,
  (VTBL_ENTRY)&_ZN5S87C33v96Ev,
  (VTBL_ENTRY)&_ZN5S87C33v97Ev,
  (VTBL_ENTRY)&_ZN5S87C33v98Ev,
  (VTBL_ENTRY)&_ZN5S87C33v99Ev,
  (VTBL_ENTRY)&_ZN5S87C34v100Ev,
  (VTBL_ENTRY)&_ZN5S87C34v101Ev,
  (VTBL_ENTRY)&_ZN5S87C24v102Ev,
  (VTBL_ENTRY)&_ZN5S87C24v103Ev,
  (VTBL_ENTRY)&_ZN5S87C24v104Ev,
  (VTBL_ENTRY)&_ZN5S87C24v105Ev,
  (VTBL_ENTRY)&_ZN5S87C24v106Ev,
  ABISELECT(-136,-88),
  (VTBL_ENTRY)&(_ZTI5S87C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn136_N5S87C2D1Ev,_ZThn88_N5S87C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn136_N5S87C2D0Ev,_ZThn88_N5S87C2D0Ev),
  (VTBL_ENTRY)&_ZN9S87C13_nt3v82Ev,
  (VTBL_ENTRY)&_ZN9S87C13_nt3v83Ev,
  (VTBL_ENTRY)&_ZN9S87C13_nt3v84Ev,
  (VTBL_ENTRY)&_ZN9S87C13_nt3v85Ev,
};
extern VTBL_ENTRY _ZTI5S87C2[];
extern  VTBL_ENTRY _ZTV5S87C2[];
Class_Descriptor cd_S87C2 = {  "S87C2", // class name
  bases_S87C2, 6,
  &(vtc_S87C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(168,108), // object size
  NSPAIRA(_ZTI5S87C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S87C2),111, //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  S87C1  : S87C2 {
  virtual  ~S87C1(); // _ZN5S87C1D1Ev
  virtual void  v1(); // _ZN5S87C12v1Ev
  virtual void  v2(); // _ZN5S87C12v2Ev
  virtual void  v3(); // _ZN5S87C12v3Ev
  S87C1(); // tgen
};
//SIG(1 S87C1) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ BC7{ vd v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 Fi FL Fp[4] Fi[2] Fp FC8{ m Fi[2]} Fp[2]} vd v68 v69} vd v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 Fc FC9{ BC10{ BC11{ m Fp Fi[2]}}} FC12{ m Fp FC8}} BC13{ vd v82 v83 v84 v85} vd v86 v87 v88 v89 v90 v91 v92 v93 v94 v95} vd v96 v97 v98 v99 v100 v101 Fp} vd v102 v103 v104 v105 v106 FC14{ BC15{ BC11}}} vd v1 v2 v3}


 S87C1 ::~S87C1(){ note_dtor("S87C1", this);}
void  S87C1 ::v1(){vfunc_called(this, "_ZN5S87C12v1Ev");}
void  S87C1 ::v2(){vfunc_called(this, "_ZN5S87C12v2Ev");}
void  S87C1 ::v3(){vfunc_called(this, "_ZN5S87C12v3Ev");}
S87C1 ::S87C1(){ note_ctor("S87C1", this);} // tgen

static void Test_S87C1()
{
  extern Class_Descriptor cd_S87C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(22,28)];
    init_test(&cd_S87C1, buf);
    S87C1 *dp, &lv = *(dp=new (buf) S87C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(168,108), "sizeof(S87C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S87C1)");
    check_base_class_offset(lv, (S87C7*)(S87C6_nt*)(S87C5_nt*)(S87C4*)(S87C3*)(S87C2*), 0, "S87C1");
    check_base_class_offset(lv, (S87C6_nt*)(S87C5_nt*)(S87C4*)(S87C3*)(S87C2*), 0, "S87C1");
    check_base_class_offset(lv, (S87C5_nt*)(S87C4*)(S87C3*)(S87C2*), 0, "S87C1");
    check_base_class_offset(lv, (S87C13_nt*)(S87C4*)(S87C3*)(S87C2*), ABISELECT(136,88), "S87C1");
    check_base_class_offset(lv, (S87C4*)(S87C3*)(S87C2*), 0, "S87C1");
    check_base_class_offset(lv, (S87C3*)(S87C2*), 0, "S87C1");
    check_base_class_offset(lv, (S87C2*), 0, "S87C1");
    test_class_info(&lv, &cd_S87C1);
    dp->~S87C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS87C1(Test_S87C1, "S87C1", ABISELECT(168,108));

#else // __cplusplus

extern void _ZN5S87C1C1Ev();
extern void _ZN5S87C1D1Ev();
Name_Map name_map_S87C1[] = {
  NSPAIR(_ZN5S87C1C1Ev),
  NSPAIR(_ZN5S87C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S87C7;
extern VTBL_ENTRY _ZTI5S87C7[];
extern  VTBL_ENTRY _ZTV5S87C7[];
extern Class_Descriptor cd_S87C6_nt;
extern VTBL_ENTRY _ZTI8S87C6_nt[];
extern  VTBL_ENTRY _ZTV8S87C6_nt[];
extern Class_Descriptor cd_S87C5_nt;
extern VTBL_ENTRY _ZTI8S87C5_nt[];
extern  VTBL_ENTRY _ZTV8S87C5_nt[];
extern Class_Descriptor cd_S87C13_nt;
extern VTBL_ENTRY _ZTI9S87C13_nt[];
extern  VTBL_ENTRY _ZTV9S87C13_nt[];
extern Class_Descriptor cd_S87C4;
extern VTBL_ENTRY _ZTI5S87C4[];
extern  VTBL_ENTRY _ZTV5S87C4[];
extern Class_Descriptor cd_S87C3;
extern VTBL_ENTRY _ZTI5S87C3[];
extern  VTBL_ENTRY _ZTV5S87C3[];
extern Class_Descriptor cd_S87C2;
extern VTBL_ENTRY _ZTI5S87C2[];
extern  VTBL_ENTRY _ZTV5S87C2[];
static Base_Class bases_S87C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S87C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S87C6_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S87C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S87C13_nt,    ABISELECT(136,88), //bcp->offset
    106, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S87C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S87C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S87C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI5S87C1[];
extern void _ZN5S87C1D1Ev();
extern void _ZN5S87C1D0Ev();
extern void _ZN5S87C72v4Ev();
extern void _ZN5S87C72v5Ev();
extern void _ZN5S87C72v6Ev();
extern void _ZN5S87C72v7Ev();
extern void _ZN5S87C72v8Ev();
extern void _ZN5S87C72v9Ev();
extern void _ZN5S87C73v10Ev();
extern void _ZN5S87C73v11Ev();
extern void _ZN5S87C73v12Ev();
extern void _ZN5S87C73v13Ev();
extern void _ZN5S87C73v14Ev();
extern void _ZN5S87C73v15Ev();
extern void _ZN5S87C73v16Ev();
extern void _ZN5S87C73v17Ev();
extern void _ZN5S87C73v18Ev();
extern void _ZN5S87C73v19Ev();
extern void _ZN5S87C73v20Ev();
extern void _ZN5S87C73v21Ev();
extern void _ZN5S87C73v22Ev();
extern void _ZN5S87C73v23Ev();
extern void _ZN5S87C73v24Ev();
extern void _ZN5S87C73v25Ev();
extern void _ZN5S87C73v26Ev();
extern void _ZN5S87C73v27Ev();
extern void _ZN5S87C73v28Ev();
extern void _ZN5S87C73v29Ev();
extern void _ZN5S87C73v30Ev();
extern void _ZN5S87C73v31Ev();
extern void _ZN5S87C73v32Ev();
extern void _ZN5S87C73v33Ev();
extern void _ZN5S87C73v34Ev();
extern void _ZN5S87C73v35Ev();
extern void _ZN5S87C73v36Ev();
extern void _ZN5S87C73v37Ev();
extern void _ZN5S87C73v38Ev();
extern void _ZN5S87C73v39Ev();
extern void _ZN5S87C73v40Ev();
extern void _ZN5S87C73v41Ev();
extern void _ZN5S87C73v42Ev();
extern void _ZN5S87C73v43Ev();
extern void _ZN5S87C73v44Ev();
extern void _ZN5S87C73v45Ev();
extern void _ZN5S87C73v46Ev();
extern void _ZN5S87C73v47Ev();
extern void _ZN5S87C73v48Ev();
extern void _ZN5S87C73v49Ev();
extern void _ZN5S87C73v50Ev();
extern void _ZN5S87C73v51Ev();
extern void _ZN5S87C73v52Ev();
extern void _ZN5S87C73v53Ev();
extern void _ZN5S87C73v54Ev();
extern void _ZN5S87C73v55Ev();
extern void _ZN5S87C73v56Ev();
extern void _ZN5S87C73v57Ev();
extern void _ZN5S87C73v58Ev();
extern void _ZN5S87C73v59Ev();
extern void _ZN5S87C73v60Ev();
extern void _ZN5S87C73v61Ev();
extern void _ZN5S87C73v62Ev();
extern void _ZN5S87C73v63Ev();
extern void _ZN5S87C73v64Ev();
extern void _ZN5S87C73v65Ev();
extern void _ZN5S87C73v66Ev();
extern void _ZN5S87C73v67Ev();
extern void _ZN8S87C6_nt3v68Ev();
extern void _ZN8S87C6_nt3v69Ev();
extern void _ZN8S87C5_nt3v70Ev();
extern void _ZN8S87C5_nt3v71Ev();
extern void _ZN8S87C5_nt3v72Ev();
extern void _ZN8S87C5_nt3v73Ev();
extern void _ZN8S87C5_nt3v74Ev();
extern void _ZN8S87C5_nt3v75Ev();
extern void _ZN8S87C5_nt3v76Ev();
extern void _ZN8S87C5_nt3v77Ev();
extern void _ZN8S87C5_nt3v78Ev();
extern void _ZN8S87C5_nt3v79Ev();
extern void _ZN8S87C5_nt3v80Ev();
extern void _ZN8S87C5_nt3v81Ev();
extern void _ZN5S87C43v86Ev();
extern void _ZN5S87C43v87Ev();
extern void _ZN5S87C43v88Ev();
extern void _ZN5S87C43v89Ev();
extern void _ZN5S87C43v90Ev();
extern void _ZN5S87C43v91Ev();
extern void _ZN5S87C43v92Ev();
extern void _ZN5S87C43v93Ev();
extern void _ZN5S87C43v94Ev();
extern void _ZN5S87C43v95Ev();
extern void _ZN5S87C33v96Ev();
extern void _ZN5S87C33v97Ev();
extern void _ZN5S87C33v98Ev();
extern void _ZN5S87C33v99Ev();
extern void _ZN5S87C34v100Ev();
extern void _ZN5S87C34v101Ev();
extern void _ZN5S87C24v102Ev();
extern void _ZN5S87C24v103Ev();
extern void _ZN5S87C24v104Ev();
extern void _ZN5S87C24v105Ev();
extern void _ZN5S87C24v106Ev();
extern void _ZN5S87C12v1Ev();
extern void _ZN5S87C12v2Ev();
extern void _ZN5S87C12v3Ev();
extern void ABISELECT(_ZThn136_N5S87C1D1Ev,_ZThn88_N5S87C1D1Ev)();
extern void ABISELECT(_ZThn136_N5S87C1D0Ev,_ZThn88_N5S87C1D0Ev)();
extern void _ZN9S87C13_nt3v82Ev();
extern void _ZN9S87C13_nt3v83Ev();
extern void _ZN9S87C13_nt3v84Ev();
extern void _ZN9S87C13_nt3v85Ev();
static  VTBL_ENTRY vtc_S87C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI5S87C1[0]),
  (VTBL_ENTRY)&_ZN5S87C1D1Ev,
  (VTBL_ENTRY)&_ZN5S87C1D0Ev,
  (VTBL_ENTRY)&_ZN5S87C72v4Ev,
  (VTBL_ENTRY)&_ZN5S87C72v5Ev,
  (VTBL_ENTRY)&_ZN5S87C72v6Ev,
  (VTBL_ENTRY)&_ZN5S87C72v7Ev,
  (VTBL_ENTRY)&_ZN5S87C72v8Ev,
  (VTBL_ENTRY)&_ZN5S87C72v9Ev,
  (VTBL_ENTRY)&_ZN5S87C73v10Ev,
  (VTBL_ENTRY)&_ZN5S87C73v11Ev,
  (VTBL_ENTRY)&_ZN5S87C73v12Ev,
  (VTBL_ENTRY)&_ZN5S87C73v13Ev,
  (VTBL_ENTRY)&_ZN5S87C73v14Ev,
  (VTBL_ENTRY)&_ZN5S87C73v15Ev,
  (VTBL_ENTRY)&_ZN5S87C73v16Ev,
  (VTBL_ENTRY)&_ZN5S87C73v17Ev,
  (VTBL_ENTRY)&_ZN5S87C73v18Ev,
  (VTBL_ENTRY)&_ZN5S87C73v19Ev,
  (VTBL_ENTRY)&_ZN5S87C73v20Ev,
  (VTBL_ENTRY)&_ZN5S87C73v21Ev,
  (VTBL_ENTRY)&_ZN5S87C73v22Ev,
  (VTBL_ENTRY)&_ZN5S87C73v23Ev,
  (VTBL_ENTRY)&_ZN5S87C73v24Ev,
  (VTBL_ENTRY)&_ZN5S87C73v25Ev,
  (VTBL_ENTRY)&_ZN5S87C73v26Ev,
  (VTBL_ENTRY)&_ZN5S87C73v27Ev,
  (VTBL_ENTRY)&_ZN5S87C73v28Ev,
  (VTBL_ENTRY)&_ZN5S87C73v29Ev,
  (VTBL_ENTRY)&_ZN5S87C73v30Ev,
  (VTBL_ENTRY)&_ZN5S87C73v31Ev,
  (VTBL_ENTRY)&_ZN5S87C73v32Ev,
  (VTBL_ENTRY)&_ZN5S87C73v33Ev,
  (VTBL_ENTRY)&_ZN5S87C73v34Ev,
  (VTBL_ENTRY)&_ZN5S87C73v35Ev,
  (VTBL_ENTRY)&_ZN5S87C73v36Ev,
  (VTBL_ENTRY)&_ZN5S87C73v37Ev,
  (VTBL_ENTRY)&_ZN5S87C73v38Ev,
  (VTBL_ENTRY)&_ZN5S87C73v39Ev,
  (VTBL_ENTRY)&_ZN5S87C73v40Ev,
  (VTBL_ENTRY)&_ZN5S87C73v41Ev,
  (VTBL_ENTRY)&_ZN5S87C73v42Ev,
  (VTBL_ENTRY)&_ZN5S87C73v43Ev,
  (VTBL_ENTRY)&_ZN5S87C73v44Ev,
  (VTBL_ENTRY)&_ZN5S87C73v45Ev,
  (VTBL_ENTRY)&_ZN5S87C73v46Ev,
  (VTBL_ENTRY)&_ZN5S87C73v47Ev,
  (VTBL_ENTRY)&_ZN5S87C73v48Ev,
  (VTBL_ENTRY)&_ZN5S87C73v49Ev,
  (VTBL_ENTRY)&_ZN5S87C73v50Ev,
  (VTBL_ENTRY)&_ZN5S87C73v51Ev,
  (VTBL_ENTRY)&_ZN5S87C73v52Ev,
  (VTBL_ENTRY)&_ZN5S87C73v53Ev,
  (VTBL_ENTRY)&_ZN5S87C73v54Ev,
  (VTBL_ENTRY)&_ZN5S87C73v55Ev,
  (VTBL_ENTRY)&_ZN5S87C73v56Ev,
  (VTBL_ENTRY)&_ZN5S87C73v57Ev,
  (VTBL_ENTRY)&_ZN5S87C73v58Ev,
  (VTBL_ENTRY)&_ZN5S87C73v59Ev,
  (VTBL_ENTRY)&_ZN5S87C73v60Ev,
  (VTBL_ENTRY)&_ZN5S87C73v61Ev,
  (VTBL_ENTRY)&_ZN5S87C73v62Ev,
  (VTBL_ENTRY)&_ZN5S87C73v63Ev,
  (VTBL_ENTRY)&_ZN5S87C73v64Ev,
  (VTBL_ENTRY)&_ZN5S87C73v65Ev,
  (VTBL_ENTRY)&_ZN5S87C73v66Ev,
  (VTBL_ENTRY)&_ZN5S87C73v67Ev,
  (VTBL_ENTRY)&_ZN8S87C6_nt3v68Ev,
  (VTBL_ENTRY)&_ZN8S87C6_nt3v69Ev,
  (VTBL_ENTRY)&_ZN8S87C5_nt3v70Ev,
  (VTBL_ENTRY)&_ZN8S87C5_nt3v71Ev,
  (VTBL_ENTRY)&_ZN8S87C5_nt3v72Ev,
  (VTBL_ENTRY)&_ZN8S87C5_nt3v73Ev,
  (VTBL_ENTRY)&_ZN8S87C5_nt3v74Ev,
  (VTBL_ENTRY)&_ZN8S87C5_nt3v75Ev,
  (VTBL_ENTRY)&_ZN8S87C5_nt3v76Ev,
  (VTBL_ENTRY)&_ZN8S87C5_nt3v77Ev,
  (VTBL_ENTRY)&_ZN8S87C5_nt3v78Ev,
  (VTBL_ENTRY)&_ZN8S87C5_nt3v79Ev,
  (VTBL_ENTRY)&_ZN8S87C5_nt3v80Ev,
  (VTBL_ENTRY)&_ZN8S87C5_nt3v81Ev,
  (VTBL_ENTRY)&_ZN5S87C43v86Ev,
  (VTBL_ENTRY)&_ZN5S87C43v87Ev,
  (VTBL_ENTRY)&_ZN5S87C43v88Ev,
  (VTBL_ENTRY)&_ZN5S87C43v89Ev,
  (VTBL_ENTRY)&_ZN5S87C43v90Ev,
  (VTBL_ENTRY)&_ZN5S87C43v91Ev,
  (VTBL_ENTRY)&_ZN5S87C43v92Ev,
  (VTBL_ENTRY)&_ZN5S87C43v93Ev,
  (VTBL_ENTRY)&_ZN5S87C43v94Ev,
  (VTBL_ENTRY)&_ZN5S87C43v95Ev,
  (VTBL_ENTRY)&_ZN5S87C33v96Ev,
  (VTBL_ENTRY)&_ZN5S87C33v97Ev,
  (VTBL_ENTRY)&_ZN5S87C33v98Ev,
  (VTBL_ENTRY)&_ZN5S87C33v99Ev,
  (VTBL_ENTRY)&_ZN5S87C34v100Ev,
  (VTBL_ENTRY)&_ZN5S87C34v101Ev,
  (VTBL_ENTRY)&_ZN5S87C24v102Ev,
  (VTBL_ENTRY)&_ZN5S87C24v103Ev,
  (VTBL_ENTRY)&_ZN5S87C24v104Ev,
  (VTBL_ENTRY)&_ZN5S87C24v105Ev,
  (VTBL_ENTRY)&_ZN5S87C24v106Ev,
  (VTBL_ENTRY)&_ZN5S87C12v1Ev,
  (VTBL_ENTRY)&_ZN5S87C12v2Ev,
  (VTBL_ENTRY)&_ZN5S87C12v3Ev,
  ABISELECT(-136,-88),
  (VTBL_ENTRY)&(_ZTI5S87C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn136_N5S87C1D1Ev,_ZThn88_N5S87C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn136_N5S87C1D0Ev,_ZThn88_N5S87C1D0Ev),
  (VTBL_ENTRY)&_ZN9S87C13_nt3v82Ev,
  (VTBL_ENTRY)&_ZN9S87C13_nt3v83Ev,
  (VTBL_ENTRY)&_ZN9S87C13_nt3v84Ev,
  (VTBL_ENTRY)&_ZN9S87C13_nt3v85Ev,
};
extern VTBL_ENTRY _ZTI5S87C1[];
extern  VTBL_ENTRY _ZTV5S87C1[];
Class_Descriptor cd_S87C1 = {  "S87C1", // class name
  bases_S87C1, 7,
  &(vtc_S87C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(168,108), // object size
  NSPAIRA(_ZTI5S87C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV5S87C1),114, //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  S6962C2  {
  int s6962c2f0;
  __tsi64 s6962c2f1;
  void *s6962c2f2[4];
  int s6962c2f3[2];
  void *s6962c2f4;
  ::S3352C4_nt s6962c2f5;
  void *s6962c2f6[2];
  virtual  ~S6962C2(); // _ZN7S6962C2D1Ev
  virtual void  v5(); // _ZN7S6962C22v5Ev
  virtual void  v6(); // _ZN7S6962C22v6Ev
  virtual void  v7(); // _ZN7S6962C22v7Ev
  virtual void  v8(); // _ZN7S6962C22v8Ev
  virtual void  v9(); // _ZN7S6962C22v9Ev
  virtual void  v10(); // _ZN7S6962C23v10Ev
  virtual void  v11(); // _ZN7S6962C23v11Ev
  virtual void  v12(); // _ZN7S6962C23v12Ev
  virtual void  v13(); // _ZN7S6962C23v13Ev
  virtual void  v14(); // _ZN7S6962C23v14Ev
  virtual void  v15(); // _ZN7S6962C23v15Ev
  virtual void  v16(); // _ZN7S6962C23v16Ev
  virtual void  v17(); // _ZN7S6962C23v17Ev
  virtual void  v18(); // _ZN7S6962C23v18Ev
  virtual void  v19(); // _ZN7S6962C23v19Ev
  virtual void  v20(); // _ZN7S6962C23v20Ev
  virtual void  v21(); // _ZN7S6962C23v21Ev
  virtual void  v22(); // _ZN7S6962C23v22Ev
  virtual void  v23(); // _ZN7S6962C23v23Ev
  virtual void  v24(); // _ZN7S6962C23v24Ev
  virtual void  v25(); // _ZN7S6962C23v25Ev
  virtual void  v26(); // _ZN7S6962C23v26Ev
  virtual void  v27(); // _ZN7S6962C23v27Ev
  virtual void  v28(); // _ZN7S6962C23v28Ev
  virtual void  v29(); // _ZN7S6962C23v29Ev
  virtual void  v30(); // _ZN7S6962C23v30Ev
  virtual void  v31(); // _ZN7S6962C23v31Ev
  virtual void  v32(); // _ZN7S6962C23v32Ev
  virtual void  v33(); // _ZN7S6962C23v33Ev
  virtual void  v34(); // _ZN7S6962C23v34Ev
  virtual void  v35(); // _ZN7S6962C23v35Ev
  virtual void  v36(); // _ZN7S6962C23v36Ev
  virtual void  v37(); // _ZN7S6962C23v37Ev
  virtual void  v38(); // _ZN7S6962C23v38Ev
  virtual void  v39(); // _ZN7S6962C23v39Ev
  virtual void  v40(); // _ZN7S6962C23v40Ev
  virtual void  v41(); // _ZN7S6962C23v41Ev
  virtual void  v42(); // _ZN7S6962C23v42Ev
  virtual void  v43(); // _ZN7S6962C23v43Ev
  virtual void  v44(); // _ZN7S6962C23v44Ev
  virtual void  v45(); // _ZN7S6962C23v45Ev
  virtual void  v46(); // _ZN7S6962C23v46Ev
  virtual void  v47(); // _ZN7S6962C23v47Ev
  virtual void  v48(); // _ZN7S6962C23v48Ev
  virtual void  v49(); // _ZN7S6962C23v49Ev
  virtual void  v50(); // _ZN7S6962C23v50Ev
  virtual void  v51(); // _ZN7S6962C23v51Ev
  virtual void  v52(); // _ZN7S6962C23v52Ev
  virtual void  v53(); // _ZN7S6962C23v53Ev
  virtual void  v54(); // _ZN7S6962C23v54Ev
  virtual void  v55(); // _ZN7S6962C23v55Ev
  virtual void  v56(); // _ZN7S6962C23v56Ev
  virtual void  v57(); // _ZN7S6962C23v57Ev
  virtual void  v58(); // _ZN7S6962C23v58Ev
  virtual void  v59(); // _ZN7S6962C23v59Ev
  virtual void  v60(); // _ZN7S6962C23v60Ev
  virtual void  v61(); // _ZN7S6962C23v61Ev
  virtual void  v62(); // _ZN7S6962C23v62Ev
  virtual void  v63(); // _ZN7S6962C23v63Ev
  virtual void  v64(); // _ZN7S6962C23v64Ev
  virtual void  v65(); // _ZN7S6962C23v65Ev
  virtual void  v66(); // _ZN7S6962C23v66Ev
  virtual void  v67(); // _ZN7S6962C23v67Ev
  virtual void  v68(); // _ZN7S6962C23v68Ev
  S6962C2(); // tgen
};
//SIG(-1 S6962C2) 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]}


 S6962C2 ::~S6962C2(){ note_dtor("S6962C2", this);}
void  S6962C2 ::v5(){vfunc_called(this, "_ZN7S6962C22v5Ev");}
void  S6962C2 ::v6(){vfunc_called(this, "_ZN7S6962C22v6Ev");}
void  S6962C2 ::v7(){vfunc_called(this, "_ZN7S6962C22v7Ev");}
void  S6962C2 ::v8(){vfunc_called(this, "_ZN7S6962C22v8Ev");}
void  S6962C2 ::v9(){vfunc_called(this, "_ZN7S6962C22v9Ev");}
void  S6962C2 ::v10(){vfunc_called(this, "_ZN7S6962C23v10Ev");}
void  S6962C2 ::v11(){vfunc_called(this, "_ZN7S6962C23v11Ev");}
void  S6962C2 ::v12(){vfunc_called(this, "_ZN7S6962C23v12Ev");}
void  S6962C2 ::v13(){vfunc_called(this, "_ZN7S6962C23v13Ev");}
void  S6962C2 ::v14(){vfunc_called(this, "_ZN7S6962C23v14Ev");}
void  S6962C2 ::v15(){vfunc_called(this, "_ZN7S6962C23v15Ev");}
void  S6962C2 ::v16(){vfunc_called(this, "_ZN7S6962C23v16Ev");}
void  S6962C2 ::v17(){vfunc_called(this, "_ZN7S6962C23v17Ev");}
void  S6962C2 ::v18(){vfunc_called(this, "_ZN7S6962C23v18Ev");}
void  S6962C2 ::v19(){vfunc_called(this, "_ZN7S6962C23v19Ev");}
void  S6962C2 ::v20(){vfunc_called(this, "_ZN7S6962C23v20Ev");}
void  S6962C2 ::v21(){vfunc_called(this, "_ZN7S6962C23v21Ev");}
void  S6962C2 ::v22(){vfunc_called(this, "_ZN7S6962C23v22Ev");}
void  S6962C2 ::v23(){vfunc_called(this, "_ZN7S6962C23v23Ev");}
void  S6962C2 ::v24(){vfunc_called(this, "_ZN7S6962C23v24Ev");}
void  S6962C2 ::v25(){vfunc_called(this, "_ZN7S6962C23v25Ev");}
void  S6962C2 ::v26(){vfunc_called(this, "_ZN7S6962C23v26Ev");}
void  S6962C2 ::v27(){vfunc_called(this, "_ZN7S6962C23v27Ev");}
void  S6962C2 ::v28(){vfunc_called(this, "_ZN7S6962C23v28Ev");}
void  S6962C2 ::v29(){vfunc_called(this, "_ZN7S6962C23v29Ev");}
void  S6962C2 ::v30(){vfunc_called(this, "_ZN7S6962C23v30Ev");}
void  S6962C2 ::v31(){vfunc_called(this, "_ZN7S6962C23v31Ev");}
void  S6962C2 ::v32(){vfunc_called(this, "_ZN7S6962C23v32Ev");}
void  S6962C2 ::v33(){vfunc_called(this, "_ZN7S6962C23v33Ev");}
void  S6962C2 ::v34(){vfunc_called(this, "_ZN7S6962C23v34Ev");}
void  S6962C2 ::v35(){vfunc_called(this, "_ZN7S6962C23v35Ev");}
void  S6962C2 ::v36(){vfunc_called(this, "_ZN7S6962C23v36Ev");}
void  S6962C2 ::v37(){vfunc_called(this, "_ZN7S6962C23v37Ev");}
void  S6962C2 ::v38(){vfunc_called(this, "_ZN7S6962C23v38Ev");}
void  S6962C2 ::v39(){vfunc_called(this, "_ZN7S6962C23v39Ev");}
void  S6962C2 ::v40(){vfunc_called(this, "_ZN7S6962C23v40Ev");}
void  S6962C2 ::v41(){vfunc_called(this, "_ZN7S6962C23v41Ev");}
void  S6962C2 ::v42(){vfunc_called(this, "_ZN7S6962C23v42Ev");}
void  S6962C2 ::v43(){vfunc_called(this, "_ZN7S6962C23v43Ev");}
void  S6962C2 ::v44(){vfunc_called(this, "_ZN7S6962C23v44Ev");}
void  S6962C2 ::v45(){vfunc_called(this, "_ZN7S6962C23v45Ev");}
void  S6962C2 ::v46(){vfunc_called(this, "_ZN7S6962C23v46Ev");}
void  S6962C2 ::v47(){vfunc_called(this, "_ZN7S6962C23v47Ev");}
void  S6962C2 ::v48(){vfunc_called(this, "_ZN7S6962C23v48Ev");}
void  S6962C2 ::v49(){vfunc_called(this, "_ZN7S6962C23v49Ev");}
void  S6962C2 ::v50(){vfunc_called(this, "_ZN7S6962C23v50Ev");}
void  S6962C2 ::v51(){vfunc_called(this, "_ZN7S6962C23v51Ev");}
void  S6962C2 ::v52(){vfunc_called(this, "_ZN7S6962C23v52Ev");}
void  S6962C2 ::v53(){vfunc_called(this, "_ZN7S6962C23v53Ev");}
void  S6962C2 ::v54(){vfunc_called(this, "_ZN7S6962C23v54Ev");}
void  S6962C2 ::v55(){vfunc_called(this, "_ZN7S6962C23v55Ev");}
void  S6962C2 ::v56(){vfunc_called(this, "_ZN7S6962C23v56Ev");}
void  S6962C2 ::v57(){vfunc_called(this, "_ZN7S6962C23v57Ev");}
void  S6962C2 ::v58(){vfunc_called(this, "_ZN7S6962C23v58Ev");}
void  S6962C2 ::v59(){vfunc_called(this, "_ZN7S6962C23v59Ev");}
void  S6962C2 ::v60(){vfunc_called(this, "_ZN7S6962C23v60Ev");}
void  S6962C2 ::v61(){vfunc_called(this, "_ZN7S6962C23v61Ev");}
void  S6962C2 ::v62(){vfunc_called(this, "_ZN7S6962C23v62Ev");}
void  S6962C2 ::v63(){vfunc_called(this, "_ZN7S6962C23v63Ev");}
void  S6962C2 ::v64(){vfunc_called(this, "_ZN7S6962C23v64Ev");}
void  S6962C2 ::v65(){vfunc_called(this, "_ZN7S6962C23v65Ev");}
void  S6962C2 ::v66(){vfunc_called(this, "_ZN7S6962C23v66Ev");}
void  S6962C2 ::v67(){vfunc_called(this, "_ZN7S6962C23v67Ev");}
void  S6962C2 ::v68(){vfunc_called(this, "_ZN7S6962C23v68Ev");}
S6962C2 ::S6962C2(){ note_ctor("S6962C2", this);} // tgen

static void Test_S6962C2()
{
  extern Class_Descriptor cd_S6962C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S6962C2, buf);
    S6962C2 *dp, &lv = *(dp=new (buf) S6962C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S6962C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6962C2)");
    check_field_offset(lv, s6962c2f0, ABISELECT(8,4), "S6962C2.s6962c2f0");
    check_field_offset(lv, s6962c2f1, ABISELECT(16,8), "S6962C2.s6962c2f1");
    check_field_offset(lv, s6962c2f2, ABISELECT(24,16), "S6962C2.s6962c2f2");
    check_field_offset(lv, s6962c2f3, ABISELECT(56,32), "S6962C2.s6962c2f3");
    check_field_offset(lv, s6962c2f4, ABISELECT(64,40), "S6962C2.s6962c2f4");
    check_field_offset(lv, s6962c2f5, ABISELECT(72,44), "S6962C2.s6962c2f5");
    check_field_offset(lv, s6962c2f6, ABISELECT(80,52), "S6962C2.s6962c2f6");
    test_class_info(&lv, &cd_S6962C2);
    dp->~S6962C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6962C2(Test_S6962C2, "S6962C2", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S6962C2C1Ev();
extern void _ZN7S6962C2D1Ev();
Name_Map name_map_S6962C2[] = {
  NSPAIR(_ZN7S6962C2C1Ev),
  NSPAIR(_ZN7S6962C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6962C2[];
extern void _ZN7S6962C2D1Ev();
extern void _ZN7S6962C2D0Ev();
extern void _ZN7S6962C22v5Ev();
extern void _ZN7S6962C22v6Ev();
extern void _ZN7S6962C22v7Ev();
extern void _ZN7S6962C22v8Ev();
extern void _ZN7S6962C22v9Ev();
extern void _ZN7S6962C23v10Ev();
extern void _ZN7S6962C23v11Ev();
extern void _ZN7S6962C23v12Ev();
extern void _ZN7S6962C23v13Ev();
extern void _ZN7S6962C23v14Ev();
extern void _ZN7S6962C23v15Ev();
extern void _ZN7S6962C23v16Ev();
extern void _ZN7S6962C23v17Ev();
extern void _ZN7S6962C23v18Ev();
extern void _ZN7S6962C23v19Ev();
extern void _ZN7S6962C23v20Ev();
extern void _ZN7S6962C23v21Ev();
extern void _ZN7S6962C23v22Ev();
extern void _ZN7S6962C23v23Ev();
extern void _ZN7S6962C23v24Ev();
extern void _ZN7S6962C23v25Ev();
extern void _ZN7S6962C23v26Ev();
extern void _ZN7S6962C23v27Ev();
extern void _ZN7S6962C23v28Ev();
extern void _ZN7S6962C23v29Ev();
extern void _ZN7S6962C23v30Ev();
extern void _ZN7S6962C23v31Ev();
extern void _ZN7S6962C23v32Ev();
extern void _ZN7S6962C23v33Ev();
extern void _ZN7S6962C23v34Ev();
extern void _ZN7S6962C23v35Ev();
extern void _ZN7S6962C23v36Ev();
extern void _ZN7S6962C23v37Ev();
extern void _ZN7S6962C23v38Ev();
extern void _ZN7S6962C23v39Ev();
extern void _ZN7S6962C23v40Ev();
extern void _ZN7S6962C23v41Ev();
extern void _ZN7S6962C23v42Ev();
extern void _ZN7S6962C23v43Ev();
extern void _ZN7S6962C23v44Ev();
extern void _ZN7S6962C23v45Ev();
extern void _ZN7S6962C23v46Ev();
extern void _ZN7S6962C23v47Ev();
extern void _ZN7S6962C23v48Ev();
extern void _ZN7S6962C23v49Ev();
extern void _ZN7S6962C23v50Ev();
extern void _ZN7S6962C23v51Ev();
extern void _ZN7S6962C23v52Ev();
extern void _ZN7S6962C23v53Ev();
extern void _ZN7S6962C23v54Ev();
extern void _ZN7S6962C23v55Ev();
extern void _ZN7S6962C23v56Ev();
extern void _ZN7S6962C23v57Ev();
extern void _ZN7S6962C23v58Ev();
extern void _ZN7S6962C23v59Ev();
extern void _ZN7S6962C23v60Ev();
extern void _ZN7S6962C23v61Ev();
extern void _ZN7S6962C23v62Ev();
extern void _ZN7S6962C23v63Ev();
extern void _ZN7S6962C23v64Ev();
extern void _ZN7S6962C23v65Ev();
extern void _ZN7S6962C23v66Ev();
extern void _ZN7S6962C23v67Ev();
extern void _ZN7S6962C23v68Ev();
static  VTBL_ENTRY vtc_S6962C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6962C2[0]),
  (VTBL_ENTRY)&_ZN7S6962C2D1Ev,
  (VTBL_ENTRY)&_ZN7S6962C2D0Ev,
  (VTBL_ENTRY)&_ZN7S6962C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6962C22v6Ev,
  (VTBL_ENTRY)&_ZN7S6962C22v7Ev,
  (VTBL_ENTRY)&_ZN7S6962C22v8Ev,
  (VTBL_ENTRY)&_ZN7S6962C22v9Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v10Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v11Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v12Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v13Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v14Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v15Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v16Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v17Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v18Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v19Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v20Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v21Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v22Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v23Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v24Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v25Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v26Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v27Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v28Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v29Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v30Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v31Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v32Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v33Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v34Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v35Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v36Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v37Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v38Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v39Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v40Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v41Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v42Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v43Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v44Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v45Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v46Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v47Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v48Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v49Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v50Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v51Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v52Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v53Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v54Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v55Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v56Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v57Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v58Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v59Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v60Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v61Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v62Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v63Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v64Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v65Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v66Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v67Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v68Ev,
};
extern VTBL_ENTRY _ZTI7S6962C2[];
extern  VTBL_ENTRY _ZTV7S6962C2[];
Class_Descriptor cd_S6962C2 = {  "S6962C2", // class name
  0,0,//no base classes
  &(vtc_S6962C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S6962C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6962C2),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  S6962C10_nt  {
  char s6962c10f0[4];
  ::S3352C11 s6962c10f1;
  int s6962c10f2[2];
  void  mf6962c10(); // _ZN11S6962C10_nt9mf6962c10Ev
};
//SIG(-1 S6962C10_nt) C1{ m Fc[4] FC2{ BC3{ BC4{ m Fp Fi[2]}}} Fi[2]}


void  S6962C10_nt ::mf6962c10(){}

//skip512 S6962C10_nt

#else // __cplusplus

Class_Descriptor cd_S6962C10_nt = {  "S6962C10_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  S6962C9_nt  : S6962C10_nt {
  void *s6962c9f0;
};
//SIG(-1 S6962C9_nt) C1{ BC2{ m Fc[4] FC3{ BC4{ BC5{ m Fp Fi[2]}}} Fi[2]} Fp}



//skip512 S6962C9_nt

#else // __cplusplus

extern Class_Descriptor cd_S6962C10_nt;
static Base_Class bases_S6962C9_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6962C10_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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  S6962C4  {
  ::S3352C4_nt s6962c4f0;
  int s6962c4f1;
  unsigned int s6962c4f2:1;
  unsigned int s6962c4f3:1;
  unsigned int s6962c4f4:1;
  unsigned int s6962c4f5:1;
  ::S3352C13_nt s6962c4f6;
  ::S3352C17 s6962c4f7;
  ::S6962C9_nt s6962c4f8;
  ::S6962C9_nt s6962c4f9;
  ::S6962C9_nt s6962c4f10;
  ::S6962C9_nt s6962c4f11;
  ::S6962C9_nt s6962c4f12;
  ::S6962C9_nt s6962c4f13;
  ::S6962C9_nt s6962c4f14;
  ::S6962C9_nt s6962c4f15;
  ::S6962C9_nt s6962c4f16;
  ::S6962C9_nt s6962c4f17;
  void  mf6962c4(); // _ZN7S6962C48mf6962c4Ev
};
//SIG(-1 S6962C4) C1{ m FC2{ m Fi[2]} Fi Fi:1 Fi:1 Fi:1 Fi:1 FC3{ m Fi[3]} FC4{ BC5{ BC6{ m Fp Fi[2]}}} FC7{ BC8{ m Fc[4] FC9{ BC10{ BC6}} Fi[2]} Fp} FC7 FC7 FC7 FC7 FC7 FC7 FC7 FC7 FC7}


void  S6962C4 ::mf6962c4(){}

static void Test_S6962C4()
{
  {
    init_simple_test("S6962C4");
    static S6962C4 lv;
    check2(sizeof(lv), ABISELECT(448,320), "sizeof(S6962C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6962C4)");
    check_field_offset(lv, s6962c4f0, 0, "S6962C4.s6962c4f0");
    check_field_offset(lv, s6962c4f1, 8, "S6962C4.s6962c4f1");
    set_bf_and_test(lv, s6962c4f2, 12, 0, 1, 1, "S6962C4");
    set_bf_and_test(lv, s6962c4f3, 12, 1, 1, 1, "S6962C4");
    set_bf_and_test(lv, s6962c4f4, 12, 2, 1, 1, "S6962C4");
    set_bf_and_test(lv, s6962c4f5, 12, 3, 1, 1, "S6962C4");
    check_field_offset(lv, s6962c4f6, 16, "S6962C4.s6962c4f6");
    check_field_offset(lv, s6962c4f7, ABISELECT(32,28), "S6962C4.s6962c4f7");
    check_field_offset(lv, s6962c4f8, ABISELECT(48,40), "S6962C4.s6962c4f8");
    check_field_offset(lv, s6962c4f9, ABISELECT(88,68), "S6962C4.s6962c4f9");
    check_field_offset(lv, s6962c4f10, ABISELECT(128,96), "S6962C4.s6962c4f10");
    check_field_offset(lv, s6962c4f11, ABISELECT(168,124), "S6962C4.s6962c4f11");
    check_field_offset(lv, s6962c4f12, ABISELECT(208,152), "S6962C4.s6962c4f12");
    check_field_offset(lv, s6962c4f13, ABISELECT(248,180), "S6962C4.s6962c4f13");
    check_field_offset(lv, s6962c4f14, ABISELECT(288,208), "S6962C4.s6962c4f14");
    check_field_offset(lv, s6962c4f15, ABISELECT(328,236), "S6962C4.s6962c4f15");
    check_field_offset(lv, s6962c4f16, ABISELECT(368,264), "S6962C4.s6962c4f16");
    check_field_offset(lv, s6962c4f17, ABISELECT(408,292), "S6962C4.s6962c4f17");
  }
}
static Arrange_To_Call_Me vS6962C4(Test_S6962C4, "S6962C4", ABISELECT(448,320));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6962C16_nt  {
  ::S3352C13_nt s6962c16f0;
  ::S3352C13_nt s6962c16f1;
  char s6962c16f2;
  void  mf6962c16(); // _ZN11S6962C16_nt9mf6962c16Ev
};
//SIG(-1 S6962C16_nt) C1{ m FC2{ m Fi[3]} FC2 Fc}


void  S6962C16_nt ::mf6962c16(){}

//skip512 S6962C16_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6962C17_nt  {
  int s6962c17f0[3];
  void  mf6962c17(); // _ZN11S6962C17_nt9mf6962c17Ev
};
//SIG(-1 S6962C17_nt) C1{ m Fi[3]}


void  S6962C17_nt ::mf6962c17(){}

//skip512 S6962C17_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6962C1  : S6962C2 {
  ::S6962C4 s6962c1f0;
  void *s6962c1f1;
  char s6962c1f2[2];
  ::S3352C5_nt s6962c1f3;
  int s6962c1f4[4];
  ::S6962C9_nt s6962c1f5;
  unsigned int s6962c1f6:1;
  unsigned int s6962c1f7:1;
  unsigned int s6962c1f8:1;
  ::S6962C16_nt s6962c1f9;
  void *s6962c1f10;
  int s6962c1f11;
  ::S6962C17_nt s6962c1f12;
  int s6962c1f13;
  void *s6962c1f14;
  virtual  ~S6962C1(); // _ZN7S6962C1D1Ev
  virtual void  v1(); // _ZN7S6962C12v1Ev
  virtual void  v2(); // _ZN7S6962C12v2Ev
  virtual void  v3(); // _ZN7S6962C12v3Ev
  virtual void  v4(); // _ZN7S6962C12v4Ev
  S6962C1(); // tgen
};
//SIG(1 S6962C1) C1{ BC2{ vd v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 FC4{ m FC3 Fi Fi:1 Fi:1 Fi:1 Fi:1 FC5{ m Fi[3]} FC6{ BC7{ BC8{ m Fp Fi[2]}}} FC9{ BC10{ m Fc[4] FC11{ BC12{ BC8}} Fi[2]} Fp} FC9 FC9 FC9 FC9 FC9 FC9 FC9 FC9 FC9} Fp Fc[2] FC13{ BC14{ BC8}} Fi[4] FC9 Fi:1 Fi:1 Fi:1 FC15{ m FC5 FC5 Fc} Fp Fi FC16{ m Fi[3]} Fi Fp}


 S6962C1 ::~S6962C1(){ note_dtor("S6962C1", this);}
void  S6962C1 ::v1(){vfunc_called(this, "_ZN7S6962C12v1Ev");}
void  S6962C1 ::v2(){vfunc_called(this, "_ZN7S6962C12v2Ev");}
void  S6962C1 ::v3(){vfunc_called(this, "_ZN7S6962C12v3Ev");}
void  S6962C1 ::v4(){vfunc_called(this, "_ZN7S6962C12v4Ev");}
S6962C1 ::S6962C1(){ note_ctor("S6962C1", this);} // tgen

static void Test_S6962C1()
{
  extern Class_Descriptor cd_S6962C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(89,127)];
    init_test(&cd_S6962C1, buf);
    S6962C1 *dp, &lv = *(dp=new (buf) S6962C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(704,504), "sizeof(S6962C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6962C1)");
    check_base_class_offset(lv, (S6962C2*), 0, "S6962C1");
    check_field_offset(lv, s6962c1f0, ABISELECT(96,60), "S6962C1.s6962c1f0");
    check_field_offset(lv, s6962c1f1, ABISELECT(544,380), "S6962C1.s6962c1f1");
    check_field_offset(lv, s6962c1f2, ABISELECT(552,384), "S6962C1.s6962c1f2");
    check_field_offset(lv, s6962c1f3, ABISELECT(560,388), "S6962C1.s6962c1f3");
    check_field_offset(lv, s6962c1f4, ABISELECT(576,400), "S6962C1.s6962c1f4");
    check_field_offset(lv, s6962c1f5, ABISELECT(592,416), "S6962C1.s6962c1f5");
    set_bf_and_test(lv, s6962c1f6, ABISELECT(632,444), 0, 1, 1, "S6962C1");
    set_bf_and_test(lv, s6962c1f7, ABISELECT(632,444), 1, 1, 1, "S6962C1");
    set_bf_and_test(lv, s6962c1f8, ABISELECT(632,444), 2, 1, 1, "S6962C1");
    check_field_offset(lv, s6962c1f9, ABISELECT(636,448), "S6962C1.s6962c1f9");
    check_field_offset(lv, s6962c1f10, ABISELECT(664,476), "S6962C1.s6962c1f10");
    check_field_offset(lv, s6962c1f11, ABISELECT(672,480), "S6962C1.s6962c1f11");
    check_field_offset(lv, s6962c1f12, ABISELECT(676,484), "S6962C1.s6962c1f12");
    check_field_offset(lv, s6962c1f13, ABISELECT(688,496), "S6962C1.s6962c1f13");
    check_field_offset(lv, s6962c1f14, ABISELECT(696,500), "S6962C1.s6962c1f14");
    test_class_info(&lv, &cd_S6962C1);
    dp->~S6962C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6962C1(Test_S6962C1, "S6962C1", ABISELECT(704,504));

#else // __cplusplus

extern void _ZN7S6962C1C1Ev();
extern void _ZN7S6962C1D1Ev();
Name_Map name_map_S6962C1[] = {
  NSPAIR(_ZN7S6962C1C1Ev),
  NSPAIR(_ZN7S6962C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6962C2;
extern VTBL_ENTRY _ZTI7S6962C2[];
extern  VTBL_ENTRY _ZTV7S6962C2[];
static Base_Class bases_S6962C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6962C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6962C1[];
extern void _ZN7S6962C1D1Ev();
extern void _ZN7S6962C1D0Ev();
extern void _ZN7S6962C22v5Ev();
extern void _ZN7S6962C22v6Ev();
extern void _ZN7S6962C22v7Ev();
extern void _ZN7S6962C22v8Ev();
extern void _ZN7S6962C22v9Ev();
extern void _ZN7S6962C23v10Ev();
extern void _ZN7S6962C23v11Ev();
extern void _ZN7S6962C23v12Ev();
extern void _ZN7S6962C23v13Ev();
extern void _ZN7S6962C23v14Ev();
extern void _ZN7S6962C23v15Ev();
extern void _ZN7S6962C23v16Ev();
extern void _ZN7S6962C23v17Ev();
extern void _ZN7S6962C23v18Ev();
extern void _ZN7S6962C23v19Ev();
extern void _ZN7S6962C23v20Ev();
extern void _ZN7S6962C23v21Ev();
extern void _ZN7S6962C23v22Ev();
extern void _ZN7S6962C23v23Ev();
extern void _ZN7S6962C23v24Ev();
extern void _ZN7S6962C23v25Ev();
extern void _ZN7S6962C23v26Ev();
extern void _ZN7S6962C23v27Ev();
extern void _ZN7S6962C23v28Ev();
extern void _ZN7S6962C23v29Ev();
extern void _ZN7S6962C23v30Ev();
extern void _ZN7S6962C23v31Ev();
extern void _ZN7S6962C23v32Ev();
extern void _ZN7S6962C23v33Ev();
extern void _ZN7S6962C23v34Ev();
extern void _ZN7S6962C23v35Ev();
extern void _ZN7S6962C23v36Ev();
extern void _ZN7S6962C23v37Ev();
extern void _ZN7S6962C23v38Ev();
extern void _ZN7S6962C23v39Ev();
extern void _ZN7S6962C23v40Ev();
extern void _ZN7S6962C23v41Ev();
extern void _ZN7S6962C23v42Ev();
extern void _ZN7S6962C23v43Ev();
extern void _ZN7S6962C23v44Ev();
extern void _ZN7S6962C23v45Ev();
extern void _ZN7S6962C23v46Ev();
extern void _ZN7S6962C23v47Ev();
extern void _ZN7S6962C23v48Ev();
extern void _ZN7S6962C23v49Ev();
extern void _ZN7S6962C23v50Ev();
extern void _ZN7S6962C23v51Ev();
extern void _ZN7S6962C23v52Ev();
extern void _ZN7S6962C23v53Ev();
extern void _ZN7S6962C23v54Ev();
extern void _ZN7S6962C23v55Ev();
extern void _ZN7S6962C23v56Ev();
extern void _ZN7S6962C23v57Ev();
extern void _ZN7S6962C23v58Ev();
extern void _ZN7S6962C23v59Ev();
extern void _ZN7S6962C23v60Ev();
extern void _ZN7S6962C23v61Ev();
extern void _ZN7S6962C23v62Ev();
extern void _ZN7S6962C23v63Ev();
extern void _ZN7S6962C23v64Ev();
extern void _ZN7S6962C23v65Ev();
extern void _ZN7S6962C23v66Ev();
extern void _ZN7S6962C23v67Ev();
extern void _ZN7S6962C23v68Ev();
extern void _ZN7S6962C12v1Ev();
extern void _ZN7S6962C12v2Ev();
extern void _ZN7S6962C12v3Ev();
extern void _ZN7S6962C12v4Ev();
static  VTBL_ENTRY vtc_S6962C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6962C1[0]),
  (VTBL_ENTRY)&_ZN7S6962C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6962C1D0Ev,
  (VTBL_ENTRY)&_ZN7S6962C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6962C22v6Ev,
  (VTBL_ENTRY)&_ZN7S6962C22v7Ev,
  (VTBL_ENTRY)&_ZN7S6962C22v8Ev,
  (VTBL_ENTRY)&_ZN7S6962C22v9Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v10Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v11Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v12Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v13Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v14Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v15Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v16Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v17Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v18Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v19Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v20Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v21Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v22Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v23Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v24Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v25Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v26Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v27Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v28Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v29Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v30Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v31Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v32Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v33Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v34Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v35Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v36Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v37Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v38Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v39Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v40Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v41Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v42Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v43Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v44Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v45Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v46Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v47Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v48Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v49Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v50Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v51Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v52Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v53Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v54Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v55Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v56Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v57Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v58Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v59Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v60Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v61Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v62Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v63Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v64Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v65Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v66Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v67Ev,
  (VTBL_ENTRY)&_ZN7S6962C23v68Ev,
  (VTBL_ENTRY)&_ZN7S6962C12v1Ev,
  (VTBL_ENTRY)&_ZN7S6962C12v2Ev,
  (VTBL_ENTRY)&_ZN7S6962C12v3Ev,
  (VTBL_ENTRY)&_ZN7S6962C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S6962C1[];
extern  VTBL_ENTRY _ZTV7S6962C1[];
Class_Descriptor cd_S6962C1 = {  "S6962C1", // class name
  bases_S6962C1, 1,
  &(vtc_S6962C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(704,504), // object size
  NSPAIRA(_ZTI7S6962C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6962C1),72, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1522C4  {
  int s1522c4f0;
  __tsi64 s1522c4f1;
  void *s1522c4f2[4];
  int s1522c4f3[2];
  void *s1522c4f4;
  ::S3352C4_nt s1522c4f5;
  void *s1522c4f6[2];
  virtual  ~S1522C4(); // _ZN7S1522C4D1Ev
  virtual void  v6(); // _ZN7S1522C42v6Ev
  virtual void  v7(); // _ZN7S1522C42v7Ev
  virtual void  v8(); // _ZN7S1522C42v8Ev
  virtual void  v9(); // _ZN7S1522C42v9Ev
  virtual void  v10(); // _ZN7S1522C43v10Ev
  virtual void  v11(); // _ZN7S1522C43v11Ev
  virtual void  v12(); // _ZN7S1522C43v12Ev
  virtual void  v13(); // _ZN7S1522C43v13Ev
  virtual void  v14(); // _ZN7S1522C43v14Ev
  virtual void  v15(); // _ZN7S1522C43v15Ev
  virtual void  v16(); // _ZN7S1522C43v16Ev
  virtual void  v17(); // _ZN7S1522C43v17Ev
  virtual void  v18(); // _ZN7S1522C43v18Ev
  virtual void  v19(); // _ZN7S1522C43v19Ev
  virtual void  v20(); // _ZN7S1522C43v20Ev
  virtual void  v21(); // _ZN7S1522C43v21Ev
  virtual void  v22(); // _ZN7S1522C43v22Ev
  virtual void  v23(); // _ZN7S1522C43v23Ev
  virtual void  v24(); // _ZN7S1522C43v24Ev
  virtual void  v25(); // _ZN7S1522C43v25Ev
  virtual void  v26(); // _ZN7S1522C43v26Ev
  virtual void  v27(); // _ZN7S1522C43v27Ev
  virtual void  v28(); // _ZN7S1522C43v28Ev
  virtual void  v29(); // _ZN7S1522C43v29Ev
  virtual void  v30(); // _ZN7S1522C43v30Ev
  virtual void  v31(); // _ZN7S1522C43v31Ev
  virtual void  v32(); // _ZN7S1522C43v32Ev
  virtual void  v33(); // _ZN7S1522C43v33Ev
  virtual void  v34(); // _ZN7S1522C43v34Ev
  virtual void  v35(); // _ZN7S1522C43v35Ev
  virtual void  v36(); // _ZN7S1522C43v36Ev
  virtual void  v37(); // _ZN7S1522C43v37Ev
  virtual void  v38(); // _ZN7S1522C43v38Ev
  virtual void  v39(); // _ZN7S1522C43v39Ev
  virtual void  v40(); // _ZN7S1522C43v40Ev
  virtual void  v41(); // _ZN7S1522C43v41Ev
  virtual void  v42(); // _ZN7S1522C43v42Ev
  virtual void  v43(); // _ZN7S1522C43v43Ev
  virtual void  v44(); // _ZN7S1522C43v44Ev
  virtual void  v45(); // _ZN7S1522C43v45Ev
  virtual void  v46(); // _ZN7S1522C43v46Ev
  virtual void  v47(); // _ZN7S1522C43v47Ev
  virtual void  v48(); // _ZN7S1522C43v48Ev
  virtual void  v49(); // _ZN7S1522C43v49Ev
  virtual void  v50(); // _ZN7S1522C43v50Ev
  virtual void  v51(); // _ZN7S1522C43v51Ev
  virtual void  v52(); // _ZN7S1522C43v52Ev
  virtual void  v53(); // _ZN7S1522C43v53Ev
  virtual void  v54(); // _ZN7S1522C43v54Ev
  virtual void  v55(); // _ZN7S1522C43v55Ev
  virtual void  v56(); // _ZN7S1522C43v56Ev
  virtual void  v57(); // _ZN7S1522C43v57Ev
  virtual void  v58(); // _ZN7S1522C43v58Ev
  virtual void  v59(); // _ZN7S1522C43v59Ev
  virtual void  v60(); // _ZN7S1522C43v60Ev
  virtual void  v61(); // _ZN7S1522C43v61Ev
  virtual void  v62(); // _ZN7S1522C43v62Ev
  virtual void  v63(); // _ZN7S1522C43v63Ev
  virtual void  v64(); // _ZN7S1522C43v64Ev
  virtual void  v65(); // _ZN7S1522C43v65Ev
  virtual void  v66(); // _ZN7S1522C43v66Ev
  virtual void  v67(); // _ZN7S1522C43v67Ev
  virtual void  v68(); // _ZN7S1522C43v68Ev
  virtual void  v69(); // _ZN7S1522C43v69Ev
  S1522C4(); // tgen
};
//SIG(-1 S1522C4) 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]}


 S1522C4 ::~S1522C4(){ note_dtor("S1522C4", this);}
void  S1522C4 ::v6(){vfunc_called(this, "_ZN7S1522C42v6Ev");}
void  S1522C4 ::v7(){vfunc_called(this, "_ZN7S1522C42v7Ev");}
void  S1522C4 ::v8(){vfunc_called(this, "_ZN7S1522C42v8Ev");}
void  S1522C4 ::v9(){vfunc_called(this, "_ZN7S1522C42v9Ev");}
void  S1522C4 ::v10(){vfunc_called(this, "_ZN7S1522C43v10Ev");}
void  S1522C4 ::v11(){vfunc_called(this, "_ZN7S1522C43v11Ev");}
void  S1522C4 ::v12(){vfunc_called(this, "_ZN7S1522C43v12Ev");}
void  S1522C4 ::v13(){vfunc_called(this, "_ZN7S1522C43v13Ev");}
void  S1522C4 ::v14(){vfunc_called(this, "_ZN7S1522C43v14Ev");}
void  S1522C4 ::v15(){vfunc_called(this, "_ZN7S1522C43v15Ev");}
void  S1522C4 ::v16(){vfunc_called(this, "_ZN7S1522C43v16Ev");}
void  S1522C4 ::v17(){vfunc_called(this, "_ZN7S1522C43v17Ev");}
void  S1522C4 ::v18(){vfunc_called(this, "_ZN7S1522C43v18Ev");}
void  S1522C4 ::v19(){vfunc_called(this, "_ZN7S1522C43v19Ev");}
void  S1522C4 ::v20(){vfunc_called(this, "_ZN7S1522C43v20Ev");}
void  S1522C4 ::v21(){vfunc_called(this, "_ZN7S1522C43v21Ev");}
void  S1522C4 ::v22(){vfunc_called(this, "_ZN7S1522C43v22Ev");}
void  S1522C4 ::v23(){vfunc_called(this, "_ZN7S1522C43v23Ev");}
void  S1522C4 ::v24(){vfunc_called(this, "_ZN7S1522C43v24Ev");}
void  S1522C4 ::v25(){vfunc_called(this, "_ZN7S1522C43v25Ev");}
void  S1522C4 ::v26(){vfunc_called(this, "_ZN7S1522C43v26Ev");}
void  S1522C4 ::v27(){vfunc_called(this, "_ZN7S1522C43v27Ev");}
void  S1522C4 ::v28(){vfunc_called(this, "_ZN7S1522C43v28Ev");}
void  S1522C4 ::v29(){vfunc_called(this, "_ZN7S1522C43v29Ev");}
void  S1522C4 ::v30(){vfunc_called(this, "_ZN7S1522C43v30Ev");}
void  S1522C4 ::v31(){vfunc_called(this, "_ZN7S1522C43v31Ev");}
void  S1522C4 ::v32(){vfunc_called(this, "_ZN7S1522C43v32Ev");}
void  S1522C4 ::v33(){vfunc_called(this, "_ZN7S1522C43v33Ev");}
void  S1522C4 ::v34(){vfunc_called(this, "_ZN7S1522C43v34Ev");}
void  S1522C4 ::v35(){vfunc_called(this, "_ZN7S1522C43v35Ev");}
void  S1522C4 ::v36(){vfunc_called(this, "_ZN7S1522C43v36Ev");}
void  S1522C4 ::v37(){vfunc_called(this, "_ZN7S1522C43v37Ev");}
void  S1522C4 ::v38(){vfunc_called(this, "_ZN7S1522C43v38Ev");}
void  S1522C4 ::v39(){vfunc_called(this, "_ZN7S1522C43v39Ev");}
void  S1522C4 ::v40(){vfunc_called(this, "_ZN7S1522C43v40Ev");}
void  S1522C4 ::v41(){vfunc_called(this, "_ZN7S1522C43v41Ev");}
void  S1522C4 ::v42(){vfunc_called(this, "_ZN7S1522C43v42Ev");}
void  S1522C4 ::v43(){vfunc_called(this, "_ZN7S1522C43v43Ev");}
void  S1522C4 ::v44(){vfunc_called(this, "_ZN7S1522C43v44Ev");}
void  S1522C4 ::v45(){vfunc_called(this, "_ZN7S1522C43v45Ev");}
void  S1522C4 ::v46(){vfunc_called(this, "_ZN7S1522C43v46Ev");}
void  S1522C4 ::v47(){vfunc_called(this, "_ZN7S1522C43v47Ev");}
void  S1522C4 ::v48(){vfunc_called(this, "_ZN7S1522C43v48Ev");}
void  S1522C4 ::v49(){vfunc_called(this, "_ZN7S1522C43v49Ev");}
void  S1522C4 ::v50(){vfunc_called(this, "_ZN7S1522C43v50Ev");}
void  S1522C4 ::v51(){vfunc_called(this, "_ZN7S1522C43v51Ev");}
void  S1522C4 ::v52(){vfunc_called(this, "_ZN7S1522C43v52Ev");}
void  S1522C4 ::v53(){vfunc_called(this, "_ZN7S1522C43v53Ev");}
void  S1522C4 ::v54(){vfunc_called(this, "_ZN7S1522C43v54Ev");}
void  S1522C4 ::v55(){vfunc_called(this, "_ZN7S1522C43v55Ev");}
void  S1522C4 ::v56(){vfunc_called(this, "_ZN7S1522C43v56Ev");}
void  S1522C4 ::v57(){vfunc_called(this, "_ZN7S1522C43v57Ev");}
void  S1522C4 ::v58(){vfunc_called(this, "_ZN7S1522C43v58Ev");}
void  S1522C4 ::v59(){vfunc_called(this, "_ZN7S1522C43v59Ev");}
void  S1522C4 ::v60(){vfunc_called(this, "_ZN7S1522C43v60Ev");}
void  S1522C4 ::v61(){vfunc_called(this, "_ZN7S1522C43v61Ev");}
void  S1522C4 ::v62(){vfunc_called(this, "_ZN7S1522C43v62Ev");}
void  S1522C4 ::v63(){vfunc_called(this, "_ZN7S1522C43v63Ev");}
void  S1522C4 ::v64(){vfunc_called(this, "_ZN7S1522C43v64Ev");}
void  S1522C4 ::v65(){vfunc_called(this, "_ZN7S1522C43v65Ev");}
void  S1522C4 ::v66(){vfunc_called(this, "_ZN7S1522C43v66Ev");}
void  S1522C4 ::v67(){vfunc_called(this, "_ZN7S1522C43v67Ev");}
void  S1522C4 ::v68(){vfunc_called(this, "_ZN7S1522C43v68Ev");}
void  S1522C4 ::v69(){vfunc_called(this, "_ZN7S1522C43v69Ev");}
S1522C4 ::S1522C4(){ note_ctor("S1522C4", this);} // tgen

static void Test_S1522C4()
{
  extern Class_Descriptor cd_S1522C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S1522C4, buf);
    S1522C4 *dp, &lv = *(dp=new (buf) S1522C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S1522C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1522C4)");
    check_field_offset(lv, s1522c4f0, ABISELECT(8,4), "S1522C4.s1522c4f0");
    check_field_offset(lv, s1522c4f1, ABISELECT(16,8), "S1522C4.s1522c4f1");
    check_field_offset(lv, s1522c4f2, ABISELECT(24,16), "S1522C4.s1522c4f2");
    check_field_offset(lv, s1522c4f3, ABISELECT(56,32), "S1522C4.s1522c4f3");
    check_field_offset(lv, s1522c4f4, ABISELECT(64,40), "S1522C4.s1522c4f4");
    check_field_offset(lv, s1522c4f5, ABISELECT(72,44), "S1522C4.s1522c4f5");
    check_field_offset(lv, s1522c4f6, ABISELECT(80,52), "S1522C4.s1522c4f6");
    test_class_info(&lv, &cd_S1522C4);
    dp->~S1522C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1522C4(Test_S1522C4, "S1522C4", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S1522C4C1Ev();
extern void _ZN7S1522C4D1Ev();
Name_Map name_map_S1522C4[] = {
  NSPAIR(_ZN7S1522C4C1Ev),
  NSPAIR(_ZN7S1522C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1522C4[];
extern void _ZN7S1522C4D1Ev();
extern void _ZN7S1522C4D0Ev();
extern void _ZN7S1522C42v6Ev();
extern void _ZN7S1522C42v7Ev();
extern void _ZN7S1522C42v8Ev();
extern void _ZN7S1522C42v9Ev();
extern void _ZN7S1522C43v10Ev();
extern void _ZN7S1522C43v11Ev();
extern void _ZN7S1522C43v12Ev();
extern void _ZN7S1522C43v13Ev();
extern void _ZN7S1522C43v14Ev();
extern void _ZN7S1522C43v15Ev();
extern void _ZN7S1522C43v16Ev();
extern void _ZN7S1522C43v17Ev();
extern void _ZN7S1522C43v18Ev();
extern void _ZN7S1522C43v19Ev();
extern void _ZN7S1522C43v20Ev();
extern void _ZN7S1522C43v21Ev();
extern void _ZN7S1522C43v22Ev();
extern void _ZN7S1522C43v23Ev();
extern void _ZN7S1522C43v24Ev();
extern void _ZN7S1522C43v25Ev();
extern void _ZN7S1522C43v26Ev();
extern void _ZN7S1522C43v27Ev();
extern void _ZN7S1522C43v28Ev();
extern void _ZN7S1522C43v29Ev();
extern void _ZN7S1522C43v30Ev();
extern void _ZN7S1522C43v31Ev();
extern void _ZN7S1522C43v32Ev();
extern void _ZN7S1522C43v33Ev();
extern void _ZN7S1522C43v34Ev();
extern void _ZN7S1522C43v35Ev();
extern void _ZN7S1522C43v36Ev();
extern void _ZN7S1522C43v37Ev();
extern void _ZN7S1522C43v38Ev();
extern void _ZN7S1522C43v39Ev();
extern void _ZN7S1522C43v40Ev();
extern void _ZN7S1522C43v41Ev();
extern void _ZN7S1522C43v42Ev();
extern void _ZN7S1522C43v43Ev();
extern void _ZN7S1522C43v44Ev();
extern void _ZN7S1522C43v45Ev();
extern void _ZN7S1522C43v46Ev();
extern void _ZN7S1522C43v47Ev();
extern void _ZN7S1522C43v48Ev();
extern void _ZN7S1522C43v49Ev();
extern void _ZN7S1522C43v50Ev();
extern void _ZN7S1522C43v51Ev();
extern void _ZN7S1522C43v52Ev();
extern void _ZN7S1522C43v53Ev();
extern void _ZN7S1522C43v54Ev();
extern void _ZN7S1522C43v55Ev();
extern void _ZN7S1522C43v56Ev();
extern void _ZN7S1522C43v57Ev();
extern void _ZN7S1522C43v58Ev();
extern void _ZN7S1522C43v59Ev();
extern void _ZN7S1522C43v60Ev();
extern void _ZN7S1522C43v61Ev();
extern void _ZN7S1522C43v62Ev();
extern void _ZN7S1522C43v63Ev();
extern void _ZN7S1522C43v64Ev();
extern void _ZN7S1522C43v65Ev();
extern void _ZN7S1522C43v66Ev();
extern void _ZN7S1522C43v67Ev();
extern void _ZN7S1522C43v68Ev();
extern void _ZN7S1522C43v69Ev();
static  VTBL_ENTRY vtc_S1522C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1522C4[0]),
  (VTBL_ENTRY)&_ZN7S1522C4D1Ev,
  (VTBL_ENTRY)&_ZN7S1522C4D0Ev,
  (VTBL_ENTRY)&_ZN7S1522C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1522C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1522C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1522C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v69Ev,
};
extern VTBL_ENTRY _ZTI7S1522C4[];
extern  VTBL_ENTRY _ZTV7S1522C4[];
Class_Descriptor cd_S1522C4 = {  "S1522C4", // class name
  0,0,//no base classes
  &(vtc_S1522C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S1522C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1522C4),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  S1522C3_nt  : S1522C4 {
  unsigned int s1522c3f0:1;
  unsigned int s1522c3f1:1;
  unsigned int s1522c3f2:1;
  unsigned int s1522c3f3:1;
  unsigned int s1522c3f4:1;
  unsigned int s1522c3f5:1;
  unsigned int s1522c3f6:1;
  ::S3352C21_nt s1522c3f7;
  virtual  ~S1522C3_nt(); // _ZN10S1522C3_ntD1Ev
  virtual void  v70(); // _ZN10S1522C3_nt3v70Ev
  virtual void  v71(); // _ZN10S1522C3_nt3v71Ev
  virtual void  v72(); // _ZN10S1522C3_nt3v72Ev
  virtual void  v73(); // _ZN10S1522C3_nt3v73Ev
  virtual void  v74(); // _ZN10S1522C3_nt3v74Ev
  virtual void  v75(); // _ZN10S1522C3_nt3v75Ev
  virtual void  v76(); // _ZN10S1522C3_nt3v76Ev
  virtual void  v77(); // _ZN10S1522C3_nt3v77Ev
  virtual void  v78(); // _ZN10S1522C3_nt3v78Ev
  virtual void  v79(); // _ZN10S1522C3_nt3v79Ev
  virtual void  v80(); // _ZN10S1522C3_nt3v80Ev
  virtual void  v81(); // _ZN10S1522C3_nt3v81Ev
  virtual void  v82(); // _ZN10S1522C3_nt3v82Ev
  virtual void  v83(); // _ZN10S1522C3_nt3v83Ev
  virtual void  v84(); // _ZN10S1522C3_nt3v84Ev
  virtual void  v85(); // _ZN10S1522C3_nt3v85Ev
  virtual void  v86(); // _ZN10S1522C3_nt3v86Ev
  virtual void  v87(); // _ZN10S1522C3_nt3v87Ev
  virtual void  v88(); // _ZN10S1522C3_nt3v88Ev
  virtual void  v89(); // _ZN10S1522C3_nt3v89Ev
  S1522C3_nt(); // tgen
};
//SIG(-1 S1522C3_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}}


 S1522C3_nt ::~S1522C3_nt(){ note_dtor("S1522C3_nt", this);}
void  S1522C3_nt ::v70(){vfunc_called(this, "_ZN10S1522C3_nt3v70Ev");}
void  S1522C3_nt ::v71(){vfunc_called(this, "_ZN10S1522C3_nt3v71Ev");}
void  S1522C3_nt ::v72(){vfunc_called(this, "_ZN10S1522C3_nt3v72Ev");}
void  S1522C3_nt ::v73(){vfunc_called(this, "_ZN10S1522C3_nt3v73Ev");}
void  S1522C3_nt ::v74(){vfunc_called(this, "_ZN10S1522C3_nt3v74Ev");}
void  S1522C3_nt ::v75(){vfunc_called(this, "_ZN10S1522C3_nt3v75Ev");}
void  S1522C3_nt ::v76(){vfunc_called(this, "_ZN10S1522C3_nt3v76Ev");}
void  S1522C3_nt ::v77(){vfunc_called(this, "_ZN10S1522C3_nt3v77Ev");}
void  S1522C3_nt ::v78(){vfunc_called(this, "_ZN10S1522C3_nt3v78Ev");}
void  S1522C3_nt ::v79(){vfunc_called(this, "_ZN10S1522C3_nt3v79Ev");}
void  S1522C3_nt ::v80(){vfunc_called(this, "_ZN10S1522C3_nt3v80Ev");}
void  S1522C3_nt ::v81(){vfunc_called(this, "_ZN10S1522C3_nt3v81Ev");}
void  S1522C3_nt ::v82(){vfunc_called(this, "_ZN10S1522C3_nt3v82Ev");}
void  S1522C3_nt ::v83(){vfunc_called(this, "_ZN10S1522C3_nt3v83Ev");}
void  S1522C3_nt ::v84(){vfunc_called(this, "_ZN10S1522C3_nt3v84Ev");}
void  S1522C3_nt ::v85(){vfunc_called(this, "_ZN10S1522C3_nt3v85Ev");}
void  S1522C3_nt ::v86(){vfunc_called(this, "_ZN10S1522C3_nt3v86Ev");}
void  S1522C3_nt ::v87(){vfunc_called(this, "_ZN10S1522C3_nt3v87Ev");}
void  S1522C3_nt ::v88(){vfunc_called(this, "_ZN10S1522C3_nt3v88Ev");}
void  S1522C3_nt ::v89(){vfunc_called(this, "_ZN10S1522C3_nt3v89Ev");}
S1522C3_nt ::S1522C3_nt(){ note_ctor("S1522C3_nt", this);} // tgen

//skip512 S1522C3_nt

#else // __cplusplus

extern void _ZN10S1522C3_ntC1Ev();
extern void _ZN10S1522C3_ntD1Ev();
Name_Map name_map_S1522C3_nt[] = {
  NSPAIR(_ZN10S1522C3_ntC1Ev),
  NSPAIR(_ZN10S1522C3_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1522C4;
extern VTBL_ENTRY _ZTI7S1522C4[];
extern  VTBL_ENTRY _ZTV7S1522C4[];
static Base_Class bases_S1522C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1522C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S1522C3_nt[];
extern void _ZN10S1522C3_ntD1Ev();
extern void _ZN10S1522C3_ntD0Ev();
extern void _ZN7S1522C42v6Ev();
extern void _ZN7S1522C42v7Ev();
extern void _ZN7S1522C42v8Ev();
extern void _ZN7S1522C42v9Ev();
extern void _ZN7S1522C43v10Ev();
extern void _ZN7S1522C43v11Ev();
extern void _ZN7S1522C43v12Ev();
extern void _ZN7S1522C43v13Ev();
extern void _ZN7S1522C43v14Ev();
extern void _ZN7S1522C43v15Ev();
extern void _ZN7S1522C43v16Ev();
extern void _ZN7S1522C43v17Ev();
extern void _ZN7S1522C43v18Ev();
extern void _ZN7S1522C43v19Ev();
extern void _ZN7S1522C43v20Ev();
extern void _ZN7S1522C43v21Ev();
extern void _ZN7S1522C43v22Ev();
extern void _ZN7S1522C43v23Ev();
extern void _ZN7S1522C43v24Ev();
extern void _ZN7S1522C43v25Ev();
extern void _ZN7S1522C43v26Ev();
extern void _ZN7S1522C43v27Ev();
extern void _ZN7S1522C43v28Ev();
extern void _ZN7S1522C43v29Ev();
extern void _ZN7S1522C43v30Ev();
extern void _ZN7S1522C43v31Ev();
extern void _ZN7S1522C43v32Ev();
extern void _ZN7S1522C43v33Ev();
extern void _ZN7S1522C43v34Ev();
extern void _ZN7S1522C43v35Ev();
extern void _ZN7S1522C43v36Ev();
extern void _ZN7S1522C43v37Ev();
extern void _ZN7S1522C43v38Ev();
extern void _ZN7S1522C43v39Ev();
extern void _ZN7S1522C43v40Ev();
extern void _ZN7S1522C43v41Ev();
extern void _ZN7S1522C43v42Ev();
extern void _ZN7S1522C43v43Ev();
extern void _ZN7S1522C43v44Ev();
extern void _ZN7S1522C43v45Ev();
extern void _ZN7S1522C43v46Ev();
extern void _ZN7S1522C43v47Ev();
extern void _ZN7S1522C43v48Ev();
extern void _ZN7S1522C43v49Ev();
extern void _ZN7S1522C43v50Ev();
extern void _ZN7S1522C43v51Ev();
extern void _ZN7S1522C43v52Ev();
extern void _ZN7S1522C43v53Ev();
extern void _ZN7S1522C43v54Ev();
extern void _ZN7S1522C43v55Ev();
extern void _ZN7S1522C43v56Ev();
extern void _ZN7S1522C43v57Ev();
extern void _ZN7S1522C43v58Ev();
extern void _ZN7S1522C43v59Ev();
extern void _ZN7S1522C43v60Ev();
extern void _ZN7S1522C43v61Ev();
extern void _ZN7S1522C43v62Ev();
extern void _ZN7S1522C43v63Ev();
extern void _ZN7S1522C43v64Ev();
extern void _ZN7S1522C43v65Ev();
extern void _ZN7S1522C43v66Ev();
extern void _ZN7S1522C43v67Ev();
extern void _ZN7S1522C43v68Ev();
extern void _ZN7S1522C43v69Ev();
extern void _ZN10S1522C3_nt3v70Ev();
extern void _ZN10S1522C3_nt3v71Ev();
extern void _ZN10S1522C3_nt3v72Ev();
extern void _ZN10S1522C3_nt3v73Ev();
extern void _ZN10S1522C3_nt3v74Ev();
extern void _ZN10S1522C3_nt3v75Ev();
extern void _ZN10S1522C3_nt3v76Ev();
extern void _ZN10S1522C3_nt3v77Ev();
extern void _ZN10S1522C3_nt3v78Ev();
extern void _ZN10S1522C3_nt3v79Ev();
extern void _ZN10S1522C3_nt3v80Ev();
extern void _ZN10S1522C3_nt3v81Ev();
extern void _ZN10S1522C3_nt3v82Ev();
extern void _ZN10S1522C3_nt3v83Ev();
extern void _ZN10S1522C3_nt3v84Ev();
extern void _ZN10S1522C3_nt3v85Ev();
extern void _ZN10S1522C3_nt3v86Ev();
extern void _ZN10S1522C3_nt3v87Ev();
extern void _ZN10S1522C3_nt3v88Ev();
extern void _ZN10S1522C3_nt3v89Ev();
static  VTBL_ENTRY vtc_S1522C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S1522C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S1522C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S1522C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN7S1522C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1522C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1522C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1522C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v69Ev,
  (VTBL_ENTRY)&_ZN10S1522C3_nt3v70Ev,
  (VTBL_ENTRY)&_ZN10S1522C3_nt3v71Ev,
  (VTBL_ENTRY)&_ZN10S1522C3_nt3v72Ev,
  (VTBL_ENTRY)&_ZN10S1522C3_nt3v73Ev,
  (VTBL_ENTRY)&_ZN10S1522C3_nt3v74Ev,
  (VTBL_ENTRY)&_ZN10S1522C3_nt3v75Ev,
  (VTBL_ENTRY)&_ZN10S1522C3_nt3v76Ev,
  (VTBL_ENTRY)&_ZN10S1522C3_nt3v77Ev,
  (VTBL_ENTRY)&_ZN10S1522C3_nt3v78Ev,
  (VTBL_ENTRY)&_ZN10S1522C3_nt3v79Ev,
  (VTBL_ENTRY)&_ZN10S1522C3_nt3v80Ev,
  (VTBL_ENTRY)&_ZN10S1522C3_nt3v81Ev,
  (VTBL_ENTRY)&_ZN10S1522C3_nt3v82Ev,
  (VTBL_ENTRY)&_ZN10S1522C3_nt3v83Ev,
  (VTBL_ENTRY)&_ZN10S1522C3_nt3v84Ev,
  (VTBL_ENTRY)&_ZN10S1522C3_nt3v85Ev,
  (VTBL_ENTRY)&_ZN10S1522C3_nt3v86Ev,
  (VTBL_ENTRY)&_ZN10S1522C3_nt3v87Ev,
  (VTBL_ENTRY)&_ZN10S1522C3_nt3v88Ev,
  (VTBL_ENTRY)&_ZN10S1522C3_nt3v89Ev,
};
extern VTBL_ENTRY _ZTI10S1522C3_nt[];
VTBL_ENTRY *P__ZTI10S1522C3_nt = _ZTI10S1522C3_nt; 
extern  VTBL_ENTRY _ZTV10S1522C3_nt[];
Class_Descriptor cd_S1522C3_nt = {  "S1522C3_nt", // class name
  bases_S1522C3_nt, 1,
  &(vtc_S1522C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,64), // object size
  NSPAIRA(_ZTI10S1522C3_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S1522C3_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  S1522C2_nt  : S1522C3_nt {
  virtual  ~S1522C2_nt(); // _ZN10S1522C2_ntD1Ev
  virtual void  v90(); // _ZN10S1522C2_nt3v90Ev
  virtual void  v91(); // _ZN10S1522C2_nt3v91Ev
  S1522C2_nt(); // tgen
};
//SIG(-1 S1522C2_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}


 S1522C2_nt ::~S1522C2_nt(){ note_dtor("S1522C2_nt", this);}
void  S1522C2_nt ::v90(){vfunc_called(this, "_ZN10S1522C2_nt3v90Ev");}
void  S1522C2_nt ::v91(){vfunc_called(this, "_ZN10S1522C2_nt3v91Ev");}
S1522C2_nt ::S1522C2_nt(){ note_ctor("S1522C2_nt", this);} // tgen

//skip512 S1522C2_nt

#else // __cplusplus

extern void _ZN10S1522C2_ntC1Ev();
extern void _ZN10S1522C2_ntD1Ev();
Name_Map name_map_S1522C2_nt[] = {
  NSPAIR(_ZN10S1522C2_ntC1Ev),
  NSPAIR(_ZN10S1522C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1522C4;
extern VTBL_ENTRY _ZTI7S1522C4[];
extern  VTBL_ENTRY _ZTV7S1522C4[];
extern Class_Descriptor cd_S1522C3_nt;
extern VTBL_ENTRY _ZTI10S1522C3_nt[];
extern  VTBL_ENTRY _ZTV10S1522C3_nt[];
static Base_Class bases_S1522C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1522C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1522C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI10S1522C2_nt[];
extern void _ZN10S1522C2_ntD1Ev();
extern void _ZN10S1522C2_ntD0Ev();
extern void _ZN7S1522C42v6Ev();
extern void _ZN7S1522C42v7Ev();
extern void _ZN7S1522C42v8Ev();
extern void _ZN7S1522C42v9Ev();
extern void _ZN7S1522C43v10Ev();
extern void _ZN7S1522C43v11Ev();
extern void _ZN7S1522C43v12Ev();
extern void _ZN7S1522C43v13Ev();
extern void _ZN7S1522C43v14Ev();
extern void _ZN7S1522C43v15Ev();
extern void _ZN7S1522C43v16Ev();
extern void _ZN7S1522C43v17Ev();
extern void _ZN7S1522C43v18Ev();
extern void _ZN7S1522C43v19Ev();
extern void _ZN7S1522C43v20Ev();
extern void _ZN7S1522C43v21Ev();
extern void _ZN7S1522C43v22Ev();
extern void _ZN7S1522C43v23Ev();
extern void _ZN7S1522C43v24Ev();
extern void _ZN7S1522C43v25Ev();
extern void _ZN7S1522C43v26Ev();
extern void _ZN7S1522C43v27Ev();
extern void _ZN7S1522C43v28Ev();
extern void _ZN7S1522C43v29Ev();
extern void _ZN7S1522C43v30Ev();
extern void _ZN7S1522C43v31Ev();
extern void _ZN7S1522C43v32Ev();
extern void _ZN7S1522C43v33Ev();
extern void _ZN7S1522C43v34Ev();
extern void _ZN7S1522C43v35Ev();
extern void _ZN7S1522C43v36Ev();
extern void _ZN7S1522C43v37Ev();
extern void _ZN7S1522C43v38Ev();
extern void _ZN7S1522C43v39Ev();
extern void _ZN7S1522C43v40Ev();
extern void _ZN7S1522C43v41Ev();
extern void _ZN7S1522C43v42Ev();
extern void _ZN7S1522C43v43Ev();
extern void _ZN7S1522C43v44Ev();
extern void _ZN7S1522C43v45Ev();
extern void _ZN7S1522C43v46Ev();
extern void _ZN7S1522C43v47Ev();
extern void _ZN7S1522C43v48Ev();
extern void _ZN7S1522C43v49Ev();
extern void _ZN7S1522C43v50Ev();
extern void _ZN7S1522C43v51Ev();
extern void _ZN7S1522C43v52Ev();
extern void _ZN7S1522C43v53Ev();
extern void _ZN7S1522C43v54Ev();
extern void _ZN7S1522C43v55Ev();
extern void _ZN7S1522C43v56Ev();
extern void _ZN7S1522C43v57Ev();
extern void _ZN7S1522C43v58Ev();
extern void _ZN7S1522C43v59Ev();
extern void _ZN7S1522C43v60Ev();
extern void _ZN7S1522C43v61Ev();
extern void _ZN7S1522C43v62Ev();
extern void _ZN7S1522C43v63Ev();
extern void _ZN7S1522C43v64Ev();
extern void _ZN7S1522C43v65Ev();
extern void _ZN7S1522C43v66Ev();
extern void _ZN7S1522C43v67Ev();
extern void _ZN7S1522C43v68Ev();
extern void _ZN7S1522C43v69Ev();
extern void _ZN10S1522C3_nt3v70Ev();
extern void _ZN10S1522C3_nt3v71Ev();
extern void _ZN10S1522C3_nt3v72Ev();
extern void _ZN10S1522C3_nt3v73Ev();
extern void _ZN10S1522C3_nt3v74Ev();
extern void _ZN10S1522C3_nt3v75Ev();
extern void _ZN10S1522C3_nt3v76Ev();
extern void _ZN10S1522C3_nt3v77Ev();
extern void _ZN10S1522C3_nt3v78Ev();
extern void _ZN10S1522C3_nt3v79Ev();
extern void _ZN10S1522C3_nt3v80Ev();
extern void _ZN10S1522C3_nt3v81Ev();
extern void _ZN10S1522C3_nt3v82Ev();
extern void _ZN10S1522C3_nt3v83Ev();
extern void _ZN10S1522C3_nt3v84Ev();
extern void _ZN10S1522C3_nt3v85Ev();
extern void _ZN10S1522C3_nt3v86Ev();
extern void _ZN10S1522C3_nt3v87Ev();
extern void _ZN10S1522C3_nt3v88Ev();
extern void _ZN10S1522C3_nt3v89Ev();
extern void _ZN10S1522C2_nt3v90Ev();
extern void _ZN10S1522C2_nt3v91Ev();
static  VTBL_ENTRY vtc_S1522C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S1522C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S1522C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S1522C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN7S1522C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1522C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1522C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1522C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v69Ev,
  (VTBL_ENTRY)&_ZN10S1522C3_nt3v70Ev,
  (VTBL_ENTRY)&_ZN10S1522C3_nt3v71Ev,
  (VTBL_ENTRY)&_ZN10S1522C3_nt3v72Ev,
  (VTBL_ENTRY)&_ZN10S1522C3_nt3v73Ev,
  (VTBL_ENTRY)&_ZN10S1522C3_nt3v74Ev,
  (VTBL_ENTRY)&_ZN10S1522C3_nt3v75Ev,
  (VTBL_ENTRY)&_ZN10S1522C3_nt3v76Ev,
  (VTBL_ENTRY)&_ZN10S1522C3_nt3v77Ev,
  (VTBL_ENTRY)&_ZN10S1522C3_nt3v78Ev,
  (VTBL_ENTRY)&_ZN10S1522C3_nt3v79Ev,
  (VTBL_ENTRY)&_ZN10S1522C3_nt3v80Ev,
  (VTBL_ENTRY)&_ZN10S1522C3_nt3v81Ev,
  (VTBL_ENTRY)&_ZN10S1522C3_nt3v82Ev,
  (VTBL_ENTRY)&_ZN10S1522C3_nt3v83Ev,
  (VTBL_ENTRY)&_ZN10S1522C3_nt3v84Ev,
  (VTBL_ENTRY)&_ZN10S1522C3_nt3v85Ev,
  (VTBL_ENTRY)&_ZN10S1522C3_nt3v86Ev,
  (VTBL_ENTRY)&_ZN10S1522C3_nt3v87Ev,
  (VTBL_ENTRY)&_ZN10S1522C3_nt3v88Ev,
  (VTBL_ENTRY)&_ZN10S1522C3_nt3v89Ev,
  (VTBL_ENTRY)&_ZN10S1522C2_nt3v90Ev,
  (VTBL_ENTRY)&_ZN10S1522C2_nt3v91Ev,
};
extern VTBL_ENTRY _ZTI10S1522C2_nt[];
VTBL_ENTRY *P__ZTI10S1522C2_nt = _ZTI10S1522C2_nt; 
extern  VTBL_ENTRY _ZTV10S1522C2_nt[];
Class_Descriptor cd_S1522C2_nt = {  "S1522C2_nt", // class name
  bases_S1522C2_nt, 2,
  &(vtc_S1522C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,64), // object size
  NSPAIRA(_ZTI10S1522C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S1522C2_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  S1522C12_nt  : S6962C10_nt {
  void *s1522c12f0;
};
//SIG(-1 S1522C12_nt) C1{ BC2{ m Fc[4] FC3{ BC4{ BC5{ m Fp Fi[2]}}} Fi[2]} Fp}



//skip512 S1522C12_nt

#else // __cplusplus

extern Class_Descriptor cd_S6962C10_nt;
static Base_Class bases_S1522C12_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6962C10_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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  S1522C1  : S1522C2_nt {
  ::S6962C9_nt s1522c1f0;
  ::S1522C12_nt s1522c1f1;
  ::S1522C12_nt s1522c1f2;
  unsigned int s1522c1f3:1;
  unsigned int s1522c1f4:1;
  unsigned int s1522c1f5:1;
  virtual  ~S1522C1(); // _ZN7S1522C1D1Ev
  virtual void  v1(); // _ZN7S1522C12v1Ev
  virtual void  v2(); // _ZN7S1522C12v2Ev
  virtual void  v3(); // _ZN7S1522C12v3Ev
  virtual void  v4(); // _ZN7S1522C12v4Ev
  virtual void  v5(); // _ZN7S1522C12v5Ev
  S1522C1(); // tgen
};
//SIG(1 S1522C1) C1{ BC2{ BC3{ BC4{ vd v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC6{ m}} vd v90 v91} vd v1 v2 v3 v4 v5 FC7{ BC8{ m Fc[4] FC9{ BC10{ BC11{ m Fp Fi[2]}}} Fi[2]} Fp} FC12{ BC8 Fp} FC12 Fi:1 Fi:1 Fi:1}


 S1522C1 ::~S1522C1(){ note_dtor("S1522C1", this);}
void  S1522C1 ::v1(){vfunc_called(this, "_ZN7S1522C12v1Ev");}
void  S1522C1 ::v2(){vfunc_called(this, "_ZN7S1522C12v2Ev");}
void  S1522C1 ::v3(){vfunc_called(this, "_ZN7S1522C12v3Ev");}
void  S1522C1 ::v4(){vfunc_called(this, "_ZN7S1522C12v4Ev");}
void  S1522C1 ::v5(){vfunc_called(this, "_ZN7S1522C12v5Ev");}
S1522C1 ::S1522C1(){ note_ctor("S1522C1", this);} // tgen

static void Test_S1522C1()
{
  extern Class_Descriptor cd_S1522C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(30,39)];
    init_test(&cd_S1522C1, buf);
    S1522C1 *dp, &lv = *(dp=new (buf) S1522C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(232,152), "sizeof(S1522C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1522C1)");
    check_base_class_offset(lv, (S1522C4*)(S1522C3_nt*)(S1522C2_nt*), 0, "S1522C1");
    check_base_class_offset(lv, (S1522C3_nt*)(S1522C2_nt*), 0, "S1522C1");
    check_base_class_offset(lv, (S1522C2_nt*), 0, "S1522C1");
    check_field_offset(lv, s1522c1f0, ABISELECT(104,64), "S1522C1.s1522c1f0");
    check_field_offset(lv, s1522c1f1, ABISELECT(144,92), "S1522C1.s1522c1f1");
    check_field_offset(lv, s1522c1f2, ABISELECT(184,120), "S1522C1.s1522c1f2");
    set_bf_and_test(lv, s1522c1f3, ABISELECT(224,148), 0, 1, 1, "S1522C1");
    set_bf_and_test(lv, s1522c1f4, ABISELECT(224,148), 1, 1, 1, "S1522C1");
    set_bf_and_test(lv, s1522c1f5, ABISELECT(224,148), 2, 1, 1, "S1522C1");
    test_class_info(&lv, &cd_S1522C1);
    dp->~S1522C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1522C1(Test_S1522C1, "S1522C1", ABISELECT(232,152));

#else // __cplusplus

extern void _ZN7S1522C1C1Ev();
extern void _ZN7S1522C1D1Ev();
Name_Map name_map_S1522C1[] = {
  NSPAIR(_ZN7S1522C1C1Ev),
  NSPAIR(_ZN7S1522C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1522C4;
extern VTBL_ENTRY _ZTI7S1522C4[];
extern  VTBL_ENTRY _ZTV7S1522C4[];
extern Class_Descriptor cd_S1522C3_nt;
extern VTBL_ENTRY _ZTI10S1522C3_nt[];
extern  VTBL_ENTRY _ZTV10S1522C3_nt[];
extern Class_Descriptor cd_S1522C2_nt;
extern VTBL_ENTRY _ZTI10S1522C2_nt[];
extern  VTBL_ENTRY _ZTV10S1522C2_nt[];
static Base_Class bases_S1522C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1522C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1522C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S1522C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S1522C1[];
extern void _ZN7S1522C1D1Ev();
extern void _ZN7S1522C1D0Ev();
extern void _ZN7S1522C42v6Ev();
extern void _ZN7S1522C42v7Ev();
extern void _ZN7S1522C42v8Ev();
extern void _ZN7S1522C42v9Ev();
extern void _ZN7S1522C43v10Ev();
extern void _ZN7S1522C43v11Ev();
extern void _ZN7S1522C43v12Ev();
extern void _ZN7S1522C43v13Ev();
extern void _ZN7S1522C43v14Ev();
extern void _ZN7S1522C43v15Ev();
extern void _ZN7S1522C43v16Ev();
extern void _ZN7S1522C43v17Ev();
extern void _ZN7S1522C43v18Ev();
extern void _ZN7S1522C43v19Ev();
extern void _ZN7S1522C43v20Ev();
extern void _ZN7S1522C43v21Ev();
extern void _ZN7S1522C43v22Ev();
extern void _ZN7S1522C43v23Ev();
extern void _ZN7S1522C43v24Ev();
extern void _ZN7S1522C43v25Ev();
extern void _ZN7S1522C43v26Ev();
extern void _ZN7S1522C43v27Ev();
extern void _ZN7S1522C43v28Ev();
extern void _ZN7S1522C43v29Ev();
extern void _ZN7S1522C43v30Ev();
extern void _ZN7S1522C43v31Ev();
extern void _ZN7S1522C43v32Ev();
extern void _ZN7S1522C43v33Ev();
extern void _ZN7S1522C43v34Ev();
extern void _ZN7S1522C43v35Ev();
extern void _ZN7S1522C43v36Ev();
extern void _ZN7S1522C43v37Ev();
extern void _ZN7S1522C43v38Ev();
extern void _ZN7S1522C43v39Ev();
extern void _ZN7S1522C43v40Ev();
extern void _ZN7S1522C43v41Ev();
extern void _ZN7S1522C43v42Ev();
extern void _ZN7S1522C43v43Ev();
extern void _ZN7S1522C43v44Ev();
extern void _ZN7S1522C43v45Ev();
extern void _ZN7S1522C43v46Ev();
extern void _ZN7S1522C43v47Ev();
extern void _ZN7S1522C43v48Ev();
extern void _ZN7S1522C43v49Ev();
extern void _ZN7S1522C43v50Ev();
extern void _ZN7S1522C43v51Ev();
extern void _ZN7S1522C43v52Ev();
extern void _ZN7S1522C43v53Ev();
extern void _ZN7S1522C43v54Ev();
extern void _ZN7S1522C43v55Ev();
extern void _ZN7S1522C43v56Ev();
extern void _ZN7S1522C43v57Ev();
extern void _ZN7S1522C43v58Ev();
extern void _ZN7S1522C43v59Ev();
extern void _ZN7S1522C43v60Ev();
extern void _ZN7S1522C43v61Ev();
extern void _ZN7S1522C43v62Ev();
extern void _ZN7S1522C43v63Ev();
extern void _ZN7S1522C43v64Ev();
extern void _ZN7S1522C43v65Ev();
extern void _ZN7S1522C43v66Ev();
extern void _ZN7S1522C43v67Ev();
extern void _ZN7S1522C43v68Ev();
extern void _ZN7S1522C43v69Ev();
extern void _ZN10S1522C3_nt3v70Ev();
extern void _ZN10S1522C3_nt3v71Ev();
extern void _ZN10S1522C3_nt3v72Ev();
extern void _ZN10S1522C3_nt3v73Ev();
extern void _ZN10S1522C3_nt3v74Ev();
extern void _ZN10S1522C3_nt3v75Ev();
extern void _ZN10S1522C3_nt3v76Ev();
extern void _ZN10S1522C3_nt3v77Ev();
extern void _ZN10S1522C3_nt3v78Ev();
extern void _ZN10S1522C3_nt3v79Ev();
extern void _ZN10S1522C3_nt3v80Ev();
extern void _ZN10S1522C3_nt3v81Ev();
extern void _ZN10S1522C3_nt3v82Ev();
extern void _ZN10S1522C3_nt3v83Ev();
extern void _ZN10S1522C3_nt3v84Ev();
extern void _ZN10S1522C3_nt3v85Ev();
extern void _ZN10S1522C3_nt3v86Ev();
extern void _ZN10S1522C3_nt3v87Ev();
extern void _ZN10S1522C3_nt3v88Ev();
extern void _ZN10S1522C3_nt3v89Ev();
extern void _ZN10S1522C2_nt3v90Ev();
extern void _ZN10S1522C2_nt3v91Ev();
extern void _ZN7S1522C12v1Ev();
extern void _ZN7S1522C12v2Ev();
extern void _ZN7S1522C12v3Ev();
extern void _ZN7S1522C12v4Ev();
extern void _ZN7S1522C12v5Ev();
static  VTBL_ENTRY vtc_S1522C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1522C1[0]),
  (VTBL_ENTRY)&_ZN7S1522C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1522C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1522C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1522C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1522C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1522C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1522C43v69Ev,
  (VTBL_ENTRY)&_ZN10S1522C3_nt3v70Ev,
  (VTBL_ENTRY)&_ZN10S1522C3_nt3v71Ev,
  (VTBL_ENTRY)&_ZN10S1522C3_nt3v72Ev,
  (VTBL_ENTRY)&_ZN10S1522C3_nt3v73Ev,
  (VTBL_ENTRY)&_ZN10S1522C3_nt3v74Ev,
  (VTBL_ENTRY)&_ZN10S1522C3_nt3v75Ev,
  (VTBL_ENTRY)&_ZN10S1522C3_nt3v76Ev,
  (VTBL_ENTRY)&_ZN10S1522C3_nt3v77Ev,
  (VTBL_ENTRY)&_ZN10S1522C3_nt3v78Ev,
  (VTBL_ENTRY)&_ZN10S1522C3_nt3v79Ev,
  (VTBL_ENTRY)&_ZN10S1522C3_nt3v80Ev,
  (VTBL_ENTRY)&_ZN10S1522C3_nt3v81Ev,
  (VTBL_ENTRY)&_ZN10S1522C3_nt3v82Ev,
  (VTBL_ENTRY)&_ZN10S1522C3_nt3v83Ev,
  (VTBL_ENTRY)&_ZN10S1522C3_nt3v84Ev,
  (VTBL_ENTRY)&_ZN10S1522C3_nt3v85Ev,
  (VTBL_ENTRY)&_ZN10S1522C3_nt3v86Ev,
  (VTBL_ENTRY)&_ZN10S1522C3_nt3v87Ev,
  (VTBL_ENTRY)&_ZN10S1522C3_nt3v88Ev,
  (VTBL_ENTRY)&_ZN10S1522C3_nt3v89Ev,
  (VTBL_ENTRY)&_ZN10S1522C2_nt3v90Ev,
  (VTBL_ENTRY)&_ZN10S1522C2_nt3v91Ev,
  (VTBL_ENTRY)&_ZN7S1522C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1522C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1522C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1522C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1522C12v5Ev,
};
extern VTBL_ENTRY _ZTI7S1522C1[];
extern  VTBL_ENTRY _ZTV7S1522C1[];
Class_Descriptor cd_S1522C1 = {  "S1522C1", // class name
  bases_S1522C1, 3,
  &(vtc_S1522C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(232,152), // object size
  NSPAIRA(_ZTI7S1522C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1522C1),95, //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  S3490C4  {
  __tsi64 s3490c4f0;
  int s3490c4f1;
  char s3490c4f2;
  void  mf3490c4(); // _ZN7S3490C48mf3490c4Ev
};
//SIG(-1 S3490C4) C1{ m FL Fi Fc}


void  S3490C4 ::mf3490c4(){}

static void Test_S3490C4()
{
  {
    init_simple_test("S3490C4");
    S3490C4 lv;
    check2(sizeof(lv), 16, "sizeof(S3490C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3490C4)");
    check_field_offset(lv, s3490c4f0, 0, "S3490C4.s3490c4f0");
    check_field_offset(lv, s3490c4f1, 8, "S3490C4.s3490c4f1");
    check_field_offset(lv, s3490c4f2, 12, "S3490C4.s3490c4f2");
  }
}
static Arrange_To_Call_Me vS3490C4(Test_S3490C4, "S3490C4", 16);

#else // __cplusplus

extern VTBL_ENTRY _ZTI7S3490C4[];
VTBL_ENTRY *P__ZTI7S3490C4 = _ZTI7S3490C4; 
Class_Descriptor cd_S3490C4 = {  "S3490C4", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  16, // object size
  NSPAIRA(_ZTI7S3490C4),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  S3490C6  {
  long double s3490c6f0;
  int s3490c6f1:3;
  char s3490c6f2:8;
  long double s3490c6f3[2];
  __tsi64 s3490c6f4;
  virtual void  v2(); // _ZN7S3490C62v2Ev
  ~S3490C6(); // tgen
  S3490C6(); // tgen
};
//SIG(-1 S3490C6) C1{ v1 FD Fi:3 Fc:8 FD[2] FL}


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

static void Test_S3490C6()
{
  extern Class_Descriptor cd_S3490C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7,14)];
    init_test(&cd_S3490C6, buf);
    S3490C6 *dp, &lv = *(dp=new (buf) S3490C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,52), "sizeof(S3490C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3490C6)");
    check_field_offset(lv, s3490c6f0, ABISELECT(16,4), "S3490C6.s3490c6f0");
    set_bf_and_test(lv, s3490c6f1, ABISELECT(32,16), 0, 3, 1, "S3490C6");
    set_bf_and_test(lv, s3490c6f1, ABISELECT(32,16), 0, 3, hide_sll(1LL<<2), "S3490C6");
    set_bf_and_test(lv, s3490c6f2, ABISELECT(33,17), 0, 8, 1, "S3490C6");
    set_bf_and_test(lv, s3490c6f2, ABISELECT(33,17), 0, 8, hide_sll(1LL<<7), "S3490C6");
    check_field_offset(lv, s3490c6f3, ABISELECT(48,20), "S3490C6.s3490c6f3");
    check_field_offset(lv, s3490c6f4, ABISELECT(80,44), "S3490C6.s3490c6f4");
    test_class_info(&lv, &cd_S3490C6);
    dp->~S3490C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3490C6(Test_S3490C6, "S3490C6", ABISELECT(96,52));

#else // __cplusplus

extern void _ZN7S3490C6C1Ev();
extern void _ZN7S3490C6D1Ev();
Name_Map name_map_S3490C6[] = {
  NSPAIR(_ZN7S3490C6C1Ev),
  NSPAIR(_ZN7S3490C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3490C6[];
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY vtc_S3490C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C6[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern VTBL_ENTRY _ZTI7S3490C6[];
extern  VTBL_ENTRY _ZTV7S3490C6[];
Class_Descriptor cd_S3490C6 = {  "S3490C6", // class name
  0,0,//no base classes
  &(vtc_S3490C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,52), // object size
  NSPAIRA(_ZTI7S3490C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3490C6),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  S3490C7  : virtual S3490C6 {
  ::S3490C4 s3490c7f0;
  __tsi64 s3490c7f1;
  ::S3490C4 s3490c7f2[7];
  void *s3490c7f3;
  __tsi64 s3490c7f4;
  ::S3490C4 s3490c7f5;
  void *s3490c7f6;
  char s3490c7f7;
  short s3490c7f8;
  int s3490c7f9;
  ::S3490C6 s3490c7f10;
  virtual void  v3(); // _ZN7S3490C72v3Ev
  ~S3490C7(); // tgen
  S3490C7(); // tgen
};
//SIG(-1 S3490C7) C1{ VBC2{ v2 FD Fi:3 Fc:8 FD[2] FL} v1 FC3{ m FL Fi Fc} FL FC3[7] Fp FL FC3 Fp Fc Fs Fi FC2}


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

static void Test_S3490C7()
{
  extern Class_Descriptor cd_S3490C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(25,72)];
    init_test(&cd_S3490C7, buf);
    S3490C7 *dp, &lv = *(dp=new (buf) S3490C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(384,284), "sizeof(S3490C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3490C7)");
    check_base_class_offset(lv, (S3490C6*), ABISELECT(288,232), "S3490C7");
    check_field_offset(lv, s3490c7f0, ABISELECT(8,4), "S3490C7.s3490c7f0");
    check_field_offset(lv, s3490c7f1, ABISELECT(24,20), "S3490C7.s3490c7f1");
    check_field_offset(lv, s3490c7f2, ABISELECT(32,28), "S3490C7.s3490c7f2");
    check_field_offset(lv, s3490c7f3, ABISELECT(144,140), "S3490C7.s3490c7f3");
    check_field_offset(lv, s3490c7f4, ABISELECT(152,144), "S3490C7.s3490c7f4");
    check_field_offset(lv, s3490c7f5, ABISELECT(160,152), "S3490C7.s3490c7f5");
    check_field_offset(lv, s3490c7f6, ABISELECT(176,168), "S3490C7.s3490c7f6");
    check_field_offset(lv, s3490c7f7, ABISELECT(184,172), "S3490C7.s3490c7f7");
    check_field_offset(lv, s3490c7f8, ABISELECT(186,174), "S3490C7.s3490c7f8");
    check_field_offset(lv, s3490c7f9, ABISELECT(188,176), "S3490C7.s3490c7f9");
    check_field_offset(lv, s3490c7f10, ABISELECT(192,180), "S3490C7.s3490c7f10");
    test_class_info(&lv, &cd_S3490C7);
    dp->~S3490C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3490C7(Test_S3490C7, "S3490C7", ABISELECT(384,284));

#else // __cplusplus

extern void _ZN7S3490C7C1Ev();
extern void _ZN7S3490C7D1Ev();
Name_Map name_map_S3490C7[] = {
  NSPAIR(_ZN7S3490C7C1Ev),
  NSPAIR(_ZN7S3490C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3490C6;
extern VTBL_ENTRY _ZTI7S3490C6[];
extern  VTBL_ENTRY _ZTV7S3490C6[];
static Base_Class bases_S3490C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3490C6,    ABISELECT(288,232), //bcp->offset
    4, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3490C7[];
extern void _ZN7S3490C72v3Ev();
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY vtc_S3490C7[] = {
  ABISELECT(288,232),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C7[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
  0,
  ABISELECT(-288,-232),
  (VTBL_ENTRY)&(_ZTI7S3490C7[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern VTBL_ENTRY _ZTV7S3490C7[];
static  VTT_ENTRY vtt_S3490C7[] = {
  {&(_ZTV7S3490C7[3]),  3,8},
  {&(_ZTV7S3490C7[7]),  7,8},
};
extern VTBL_ENTRY _ZTI7S3490C7[];
extern  VTBL_ENTRY _ZTV7S3490C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C7[];
Class_Descriptor cd_S3490C7 = {  "S3490C7", // class name
  bases_S3490C7, 1,
  &(vtc_S3490C7[0]), // expected_vtbl_contents
  &(vtt_S3490C7[0]), // expected_vtt_contents
  ABISELECT(384,284), // object size
  NSPAIRA(_ZTI7S3490C7),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S3490C7),8, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3490C7),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  S3490C5  : S3490C6 , virtual S3490C4 {
  char s3490c5f0[10];
  int s3490c5f1;
  ::S3490C7 s3490c5f2;
  __tsi64 s3490c5f3;
  ~S3490C5(); // tgen
  S3490C5(); // tgen
};
//SIG(-1 S3490C5) C1{ BC2{ v1 FD Fi:3 Fc:8 FD[2] FL} VBC3{ m FL Fi Fc} Fc[10] Fi FC4{ VBC2 v2 FC3 FL FC3[7] Fp FL FC3 Fp Fc Fs Fi FC2} FL}


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

static void Test_S3490C5()
{
  extern Class_Descriptor cd_S3490C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(34,95)];
    init_test(&cd_S3490C5, buf);
    S3490C5 *dp, &lv = *(dp=new (buf) S3490C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(528,376), "sizeof(S3490C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3490C5)");
    check_base_class_offset(lv, (S3490C6*), 0, "S3490C5");
    check_base_class_offset(lv, (S3490C4*), ABISELECT(504,360), "S3490C5");
    check_field_offset(lv, s3490c5f0, ABISELECT(88,52), "S3490C5.s3490c5f0");
    check_field_offset(lv, s3490c5f1, ABISELECT(100,64), "S3490C5.s3490c5f1");
    check_field_offset(lv, s3490c5f2, ABISELECT(112,68), "S3490C5.s3490c5f2");
    check_field_offset(lv, s3490c5f3, ABISELECT(496,352), "S3490C5.s3490c5f3");
    test_class_info(&lv, &cd_S3490C5);
    dp->~S3490C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3490C5(Test_S3490C5, "S3490C5", ABISELECT(528,376));

#else // __cplusplus

extern void _ZN7S3490C5C1Ev();
extern void _ZN7S3490C5D1Ev();
Name_Map name_map_S3490C5[] = {
  NSPAIR(_ZN7S3490C5C1Ev),
  NSPAIR(_ZN7S3490C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3490C6;
extern VTBL_ENTRY _ZTI7S3490C6[];
extern  VTBL_ENTRY _ZTV7S3490C6[];
extern Class_Descriptor cd_S3490C4;
extern VTBL_ENTRY _ZTI7S3490C4[];
static Base_Class bases_S3490C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3490C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S3490C4,    ABISELECT(504,360), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S3490C5[];
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY vtc_S3490C5[] = {
  ABISELECT(504,360),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C5[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern VTBL_ENTRY _ZTV7S3490C5[];
static  VTT_ENTRY vtt_S3490C5[] = {
  {&(_ZTV7S3490C5[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S3490C5[];
extern  VTBL_ENTRY _ZTV7S3490C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C5[];
Class_Descriptor cd_S3490C5 = {  "S3490C5", // class name
  bases_S3490C5, 2,
  &(vtc_S3490C5[0]), // expected_vtbl_contents
  &(vtt_S3490C5[0]), // expected_vtt_contents
  ABISELECT(528,376), // object size
  NSPAIRA(_ZTI7S3490C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3490C5),4, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3490C5),1, //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  S3490C3  : virtual S3490C4 , virtual S3490C5 , virtual S3490C6 , virtual S3490C7 {
  void *s3490c3f0;
  ~S3490C3(); // tgen
  S3490C3(); // tgen
};
//SIG(-1 S3490C3) C1{ VBC2{ m FL Fi Fc} VBC3{ BC4{ v1 FD Fi:3 Fc:8 FD[2] FL} VBC2 Fc[10] Fi FC5{ VBC4 v2 FC2 FL FC2[7] Fp FL FC2 Fp Fc Fs Fi FC4} FL} VBC4 VBC5 Fp}


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

static void Test_S3490C3()
{
  extern Class_Descriptor cd_S3490C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(59,168)];
    init_test(&cd_S3490C3, buf);
    S3490C3 *dp, &lv = *(dp=new (buf) S3490C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(928,668), "sizeof(S3490C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3490C3)");
    check_base_class_offset(lv, (S3490C4*), ABISELECT(16,8), "S3490C3");
    check_base_class_offset(lv, (S3490C4*)(S3490C5*), ABISELECT(16,8), "S3490C3");
    check_base_class_offset(lv, (S3490C6*)(S3490C5*), ABISELECT(32,24), "S3490C3");
    check_base_class_offset(lv, (S3490C5*), ABISELECT(32,24), "S3490C3");
    /*is_ambiguous_... S3490C3::S3490C6 */ AMB_check_base_class_offset(lv, (S3490C6*), ABISELECT(544,384), "S3490C3");
    check_base_class_offset(lv, (S3490C6*)(S3490C7*), ABISELECT(544,384), "S3490C3");
    check_base_class_offset(lv, (S3490C7*), ABISELECT(640,436), "S3490C3");
    check_field_offset(lv, s3490c3f0, ABISELECT(8,4), "S3490C3.s3490c3f0");
    test_class_info(&lv, &cd_S3490C3);
    dp->~S3490C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3490C3(Test_S3490C3, "S3490C3", ABISELECT(928,668));

#else // __cplusplus

extern void _ZN7S3490C3C1Ev();
extern void _ZN7S3490C3D1Ev();
Name_Map name_map_S3490C3[] = {
  NSPAIR(_ZN7S3490C3C1Ev),
  NSPAIR(_ZN7S3490C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3490C4;
extern VTBL_ENTRY _ZTI7S3490C4[];
extern Class_Descriptor cd_S3490C6;
extern VTBL_ENTRY _ZTI7S3490C6[];
extern  VTBL_ENTRY _ZTV7S3490C6[];
extern Class_Descriptor cd_S3490C5;
extern VTBL_ENTRY _ZTI7S3490C5[];
extern  VTBL_ENTRY _ZTV7S3490C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C5[];
extern Class_Descriptor cd_S3490C6;
extern VTBL_ENTRY _ZTI7S3490C6[];
extern  VTBL_ENTRY _ZTV7S3490C6[];
extern Class_Descriptor cd_S3490C7;
extern VTBL_ENTRY _ZTI7S3490C7[];
extern  VTBL_ENTRY _ZTV7S3490C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C7[];
static Base_Class bases_S3490C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3490C4,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3490C6,    ABISELECT(32,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3490C5,    ABISELECT(32,24), //bcp->offset
    6, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3490C6,    ABISELECT(544,384), //bcp->offset
    11, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3490C7,    ABISELECT(640,436), //bcp->offset
    15, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3490C3[];
extern void _ZN7S3490C62v2Ev();
extern void _ZN7S3490C62v2Ev();
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY vtc_S3490C3[] = {
  ABISELECT(640,436),
  ABISELECT(544,384),
  ABISELECT(32,24),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C3[0]),
  0,
  -16,
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI7S3490C3[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  0,
  ABISELECT(-544,-384),
  (VTBL_ENTRY)&(_ZTI7S3490C3[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  0,
  ABISELECT(-96,-52),
  ABISELECT(-640,-436),
  (VTBL_ENTRY)&(_ZTI7S3490C3[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern VTBL_ENTRY _ZTV7S3490C3[];
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C5__7S3490C3[] = {
  -16,
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C5[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C7__7S3490C3[] = {
  ABISELECT(-96,-52),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C7[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C6__7S3490C7__7S3490C3[] = {
  0,
  ABISELECT(96,52),
  (VTBL_ENTRY)&(_ZTI7S3490C7[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
static  VTT_ENTRY vtt_S3490C3[] = {
  {&(_ZTV7S3490C3[6]),  6,20},
  {&(_ZTV7S3490C3[10]),  10,20},
  {&(_ZTV7S3490C3[14]),  14,20},
  {&(_ZTV7S3490C3[19]),  19,20},
  {&(_tg__ZTV7S3490C5__7S3490C3[3]),  3,4},
  {&(_tg__ZTV7S3490C7__7S3490C3[3]),  3,4},
  {&(_tg__ZTV7S3490C6__7S3490C7__7S3490C3[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S3490C3[];
extern  VTBL_ENTRY _ZTV7S3490C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C3[];
Class_Descriptor cd_S3490C3 = {  "S3490C3", // class name
  bases_S3490C3, 5,
  &(vtc_S3490C3[0]), // expected_vtbl_contents
  &(vtt_S3490C3[0]), // expected_vtt_contents
  ABISELECT(928,668), // object size
  NSPAIRA(_ZTI7S3490C3),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S3490C3),20, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3490C3),7, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3490C9  : S3490C6 , virtual S3490C4 , S3490C5 , S3490C7 , virtual S3490C3 {
  ::S3490C7 s3490c9f0;
  ::S3490C3 s3490c9f1;
  void *s3490c9f2;
  int s3490c9f3;
  ::S3490C6 s3490c9f4;
  ::S3490C7 s3490c9f5;
  virtual  ~S3490C9(); // _ZN7S3490C9D2Ev
  S3490C9(); // tgen
};
//SIG(-1 S3490C9) C1{ BC2{ v1 FD Fi:3 Fc:8 FD[2] FL} VBC3{ m FL Fi Fc} BC4{ BC2 VBC3 Fc[10] Fi FC5{ VBC2 v2 FC3 FL FC3[7] Fp FL FC3 Fp Fc Fs Fi FC2} FL} BC5 VBC6{ VBC3 VBC4 VBC2 VBC5 Fp} vd FC5 FC6 Fp Fi FC2 FC5}


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

static void Test_S3490C9()
{
  extern Class_Descriptor cd_S3490C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(228,653)];
    init_test(&cd_S3490C9, buf);
    S3490C9 *dp, &lv = *(dp=new (buf) S3490C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(3632,2608), "sizeof(S3490C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3490C9)");
    /*is_ambiguous_... S3490C9::S3490C6 */ AMB_check_base_class_offset(lv, (S3490C6*), 0, "S3490C9");
    check_base_class_offset(lv, (S3490C4*), ABISELECT(2704,1940), "S3490C9");
    /*is_ambiguous_... S3490C9::S3490C5 */ AMB_check_base_class_offset(lv, (S3490C4*)(S3490C5*), ABISELECT(2704,1940), "S3490C9");
    check_base_class_offset(lv, (S3490C4*)(S3490C3*), ABISELECT(2704,1940), "S3490C9");
    /*is_ambiguous_... S3490C9::S3490C5 */ AMB_check_base_class_offset(lv, (S3490C4*)(S3490C5*), ABISELECT(2704,1940), "S3490C9");
    /*is_ambiguous_... S3490C9::S3490C5 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C5*), ABISELECT(96,52), "S3490C9");
    /*is_ambiguous_... S3490C9::S3490C5 */ AMB_check_base_class_offset(lv, (S3490C5*), ABISELECT(96,52), "S3490C9");
    /*is_ambiguous_... S3490C9::S3490C7 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C7*), ABISELECT(2720,1956), "S3490C9");
    /*is_ambiguous_... S3490C3::S3490C6 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C3*), ABISELECT(2720,1956), "S3490C9");
    /*is_ambiguous_... S3490C9::S3490C7 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C7*), ABISELECT(2720,1956), "S3490C9");
    /*is_ambiguous_... S3490C9::S3490C7 */ AMB_check_base_class_offset(lv, (S3490C7*), ABISELECT(608,412), "S3490C9");
    /*is_ambiguous_... S3490C9::S3490C5 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C5*), ABISELECT(2832,2016), "S3490C9");
    check_base_class_offset(lv, (S3490C5*)(S3490C3*), ABISELECT(2832,2016), "S3490C9");
    check_base_class_offset(lv, (S3490C7*)(S3490C3*), ABISELECT(3344,2376), "S3490C9");
    check_base_class_offset(lv, (S3490C3*), ABISELECT(2808,2008), "S3490C9");
    check_field_offset(lv, s3490c9f0, ABISELECT(896,644), "S3490C9.s3490c9f0");
    check_field_offset(lv, s3490c9f1, ABISELECT(1280,928), "S3490C9.s3490c9f1");
    check_field_offset(lv, s3490c9f2, ABISELECT(2208,1596), "S3490C9.s3490c9f2");
    check_field_offset(lv, s3490c9f3, ABISELECT(2216,1600), "S3490C9.s3490c9f3");
    check_field_offset(lv, s3490c9f4, ABISELECT(2224,1604), "S3490C9.s3490c9f4");
    check_field_offset(lv, s3490c9f5, ABISELECT(2320,1656), "S3490C9.s3490c9f5");
    test_class_info(&lv, &cd_S3490C9);
    dp->~S3490C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3490C9(Test_S3490C9, "S3490C9", ABISELECT(3632,2608));

#else // __cplusplus

extern void _ZN7S3490C9C1Ev();
extern void _ZN7S3490C9D2Ev();
Name_Map name_map_S3490C9[] = {
  NSPAIR(_ZN7S3490C9C1Ev),
  NSPAIR(_ZN7S3490C9D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3490C6;
extern VTBL_ENTRY _ZTI7S3490C6[];
extern  VTBL_ENTRY _ZTV7S3490C6[];
extern Class_Descriptor cd_S3490C4;
extern VTBL_ENTRY _ZTI7S3490C4[];
extern Class_Descriptor cd_S3490C6;
extern VTBL_ENTRY _ZTI7S3490C6[];
extern  VTBL_ENTRY _ZTV7S3490C6[];
extern Class_Descriptor cd_S3490C5;
extern VTBL_ENTRY _ZTI7S3490C5[];
extern  VTBL_ENTRY _ZTV7S3490C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C5[];
extern Class_Descriptor cd_S3490C6;
extern VTBL_ENTRY _ZTI7S3490C6[];
extern  VTBL_ENTRY _ZTV7S3490C6[];
extern Class_Descriptor cd_S3490C7;
extern VTBL_ENTRY _ZTI7S3490C7[];
extern  VTBL_ENTRY _ZTV7S3490C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C7[];
extern Class_Descriptor cd_S3490C6;
extern VTBL_ENTRY _ZTI7S3490C6[];
extern  VTBL_ENTRY _ZTV7S3490C6[];
extern Class_Descriptor cd_S3490C5;
extern VTBL_ENTRY _ZTI7S3490C5[];
extern  VTBL_ENTRY _ZTV7S3490C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C5[];
extern Class_Descriptor cd_S3490C7;
extern VTBL_ENTRY _ZTI7S3490C7[];
extern  VTBL_ENTRY _ZTV7S3490C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C7[];
extern Class_Descriptor cd_S3490C3;
extern VTBL_ENTRY _ZTI7S3490C3[];
extern  VTBL_ENTRY _ZTV7S3490C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C3[];
static Base_Class bases_S3490C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3490C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S3490C4,    ABISELECT(2704,1940), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3490C6,    ABISELECT(96,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3490C5,    ABISELECT(96,52), //bcp->offset
    10, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3490C6,    ABISELECT(2720,1956), //bcp->offset
    18, //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
    5, //immediately_derived
  0, 1},
  {&cd_S3490C7,    ABISELECT(608,412), //bcp->offset
    14, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3490C6,    ABISELECT(2832,2016), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S3490C5,    ABISELECT(2832,2016), //bcp->offset
    28, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S3490C7,    ABISELECT(3344,2376), //bcp->offset
    33, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S3490C3,    ABISELECT(2808,2008), //bcp->offset
    22, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3490C9[];
extern void _ZN7S3490C62v2Ev();
extern void _ZN7S3490C9D1Ev();
extern void _ZN7S3490C9D0Ev();
extern void _ZN7S3490C62v2Ev();
extern void _ZN7S3490C72v3Ev();
extern void _ZN7S3490C62v2Ev();
extern void _ZN7S3490C62v2Ev();
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY vtc_S3490C9[] = {
  ABISELECT(3344,2376),
  ABISELECT(2832,2016),
  ABISELECT(2808,2008),
  ABISELECT(2720,1956),
  ABISELECT(2704,1940),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3490C9D1Ev,
  (VTBL_ENTRY)&_ZN7S3490C9D0Ev,
  ABISELECT(2608,1888),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  ABISELECT(2112,1544),
  ABISELECT(-608,-412),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
  0,
  ABISELECT(-2720,-1956),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  ABISELECT(536,368),
  ABISELECT(-88,-52),
  ABISELECT(24,8),
  ABISELECT(-104,-68),
  ABISELECT(-2808,-2008),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  0,
  ABISELECT(-128,-76),
  ABISELECT(-2832,-2016),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  0,
  ABISELECT(-624,-420),
  ABISELECT(-3344,-2376),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern VTBL_ENTRY _ZTV7S3490C9[];
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C5__A__7S3490C9[] = {
  ABISELECT(2608,1888),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C5[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C7__A__7S3490C9[] = {
  ABISELECT(2112,1544),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C7[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C6__7S3490C7__A__7S3490C9[] = {
  0,
  ABISELECT(-2112,-1544),
  (VTBL_ENTRY)&(_ZTI7S3490C7[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3490C3__7S3490C9[] = {
  ABISELECT(536,368),
  ABISELECT(-88,-52),
  ABISELECT(24,8),
  ABISELECT(-104,-68),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C3[0]),
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C5__7S3490C3__7S3490C9[] = {
  0,
  ABISELECT(-128,-76),
  ABISELECT(-24,-8),
  (VTBL_ENTRY)&(_ZTI7S3490C3[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C6__A1__7S3490C3__7S3490C9[] = {
  0,
  ABISELECT(88,52),
  (VTBL_ENTRY)&(_ZTI7S3490C3[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C7__7S3490C3__7S3490C9[] = {
  0,
  ABISELECT(-624,-420),
  ABISELECT(-536,-368),
  (VTBL_ENTRY)&(_ZTI7S3490C3[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C5__A1__7S3490C9[] = {
  ABISELECT(-128,-76),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C5[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C7__A1__7S3490C9[] = {
  ABISELECT(-624,-420),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C7[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C6__7S3490C7__A1__7S3490C9[] = {
  0,
  ABISELECT(624,420),
  (VTBL_ENTRY)&(_ZTI7S3490C7[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
static  VTT_ENTRY vtt_S3490C9[] = {
  {&(_ZTV7S3490C9[7]),  7,38},
  {&(_tg__ZTV7S3490C5__A__7S3490C9[3]),  3,4},
  {&(_tg__ZTV7S3490C7__A__7S3490C9[3]),  3,4},
  {&(_tg__ZTV7S3490C6__7S3490C7__A__7S3490C9[3]),  3,4},
  {&(_ZTV7S3490C9[13]),  13,38},
  {&(_ZTV7S3490C9[17]),  17,38},
  {&(_ZTV7S3490C9[21]),  21,38},
  {&(_ZTV7S3490C9[28]),  28,38},
  {&(_ZTV7S3490C9[32]),  32,38},
  {&(_ZTV7S3490C9[37]),  37,38},
  {&(_tg__ZTV7S3490C3__7S3490C9[6]),  6,6},
  {&(_tg__ZTV7S3490C5__7S3490C3__7S3490C9[4]),  4,5},
  {&(_tg__ZTV7S3490C6__A1__7S3490C3__7S3490C9[3]),  3,4},
  {&(_tg__ZTV7S3490C7__7S3490C3__7S3490C9[4]),  4,5},
  {&(_tg__ZTV7S3490C5__A1__7S3490C9[3]),  3,4},
  {&(_tg__ZTV7S3490C7__A1__7S3490C9[3]),  3,4},
  {&(_tg__ZTV7S3490C6__7S3490C7__A1__7S3490C9[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S3490C9[];
extern  VTBL_ENTRY _ZTV7S3490C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C9[];
Class_Descriptor cd_S3490C9 = {  "S3490C9", // class name
  bases_S3490C9, 10,
  &(vtc_S3490C9[0]), // expected_vtbl_contents
  &(vtt_S3490C9[0]), // expected_vtt_contents
  ABISELECT(3632,2608), // object size
  NSPAIRA(_ZTI7S3490C9),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S3490C9),38, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3490C9),17, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3490C8  : S3490C3 , S3490C9 , S3490C5 , S3490C6 {
  ::S3490C5 s3490c8f0[2];
  ::S3490C6 s3490c8f1;
  int s3490c8f2;
  ::S3490C4 s3490c8f3;
  void *s3490c8f4[10];
  int s3490c8f5[2];
  __tsi64 s3490c8f6;
  long double s3490c8f7;
  __tsi64 s3490c8f8;
  int s3490c8f9;
  virtual void  v4(); // _ZN7S3490C82v4Ev
  ~S3490C8(); // tgen
  S3490C8(); // tgen
};
//SIG(-1 S3490C8) C1{ BC2{ VBC3{ m FL Fi Fc} VBC4{ BC5{ v2 FD Fi:3 Fc:8 FD[2] FL} VBC3 Fc[10] Fi FC6{ VBC5 v3 FC3 FL FC3[7] Fp FL FC3 Fp Fc Fs Fi FC5} FL} VBC5 VBC6 Fp} BC7{ BC5 VBC3 BC4 BC6 VBC2 vd FC6 FC2 Fp Fi FC5 FC6} BC4 BC5 v1 FC4[2] FC5 Fi FC3 Fp[10] Fi[2] FL FD FL Fi}


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

static void Test_S3490C8()
{
  extern Class_Descriptor cd_S3490C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(349,984)];
    init_test(&cd_S3490C8, buf);
    S3490C8 *dp, &lv = *(dp=new (buf) S3490C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(5568,3932), "sizeof(S3490C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3490C8)");
    /*is_ambiguous_... S3490C8::S3490C3 */ AMB_check_base_class_offset(lv, (S3490C4*)(S3490C3*), ABISELECT(4640,3264), "S3490C8");
    /*is_ambiguous_... S3490C8::S3490C5 */ AMB_check_base_class_offset(lv, (S3490C4*)(S3490C5*), ABISELECT(4640,3264), "S3490C8");
    check_base_class_offset(lv, (S3490C4*)(S3490C9*), ABISELECT(4640,3264), "S3490C8");
    /*is_ambiguous_... S3490C9::S3490C5 */ AMB_check_base_class_offset(lv, (S3490C4*)(S3490C5*)(S3490C9*), ABISELECT(4640,3264), "S3490C8");
    /*is_ambiguous_... S3490C8::S3490C3 */ AMB_check_base_class_offset(lv, (S3490C4*)(S3490C3*), ABISELECT(4640,3264), "S3490C8");
    /*is_ambiguous_... S3490C8::S3490C5 */ AMB_check_base_class_offset(lv, (S3490C4*)(S3490C5*), ABISELECT(4640,3264), "S3490C8");
    /*is_ambiguous_... S3490C8::S3490C5 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C5*), ABISELECT(4656,3280), "S3490C8");
    /*is_ambiguous_... S3490C8::S3490C3 */ AMB_check_base_class_offset(lv, (S3490C5*)(S3490C3*), ABISELECT(4656,3280), "S3490C8");
    /*is_ambiguous_... S3490C8::S3490C3 */ AMB_check_base_class_offset(lv, (S3490C5*)(S3490C3*), ABISELECT(4656,3280), "S3490C8");
    /*is_ambiguous_... S3490C8::S3490C3 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C3*), ABISELECT(5168,3640), "S3490C8");
    /*is_ambiguous_... S3490C8::S3490C7 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C7*), ABISELECT(5168,3640), "S3490C8");
    /*is_ambiguous_... S3490C9::S3490C7 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C7*)(S3490C9*), ABISELECT(5168,3640), "S3490C8");
    /*is_ambiguous_... S3490C8::S3490C3 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C3*), ABISELECT(5168,3640), "S3490C8");
    /*is_ambiguous_... S3490C8::S3490C3 */ AMB_check_base_class_offset(lv, (S3490C7*)(S3490C3*), ABISELECT(5264,3692), "S3490C8");
    /*is_ambiguous_... S3490C8::S3490C3 */ AMB_check_base_class_offset(lv, (S3490C7*)(S3490C3*), ABISELECT(5264,3692), "S3490C8");
    /*is_ambiguous_... S3490C8::S3490C3 */ AMB_check_base_class_offset(lv, (S3490C3*), 0, "S3490C8");
    /*is_ambiguous_... S3490C9::S3490C6 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C9*), ABISELECT(16,8), "S3490C8");
    /*is_ambiguous_... S3490C9::S3490C5 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C5*)(S3490C9*), ABISELECT(112,60), "S3490C8");
    /*is_ambiguous_... S3490C9::S3490C5 */ AMB_check_base_class_offset(lv, (S3490C5*)(S3490C9*), ABISELECT(112,60), "S3490C8");
    /*is_ambiguous_... S3490C9::S3490C7 */ AMB_check_base_class_offset(lv, (S3490C7*)(S3490C9*), ABISELECT(624,420), "S3490C8");
    check_base_class_offset(lv, (S3490C3*)(S3490C9*), ABISELECT(5552,3924), "S3490C8");
    check_base_class_offset(lv, (S3490C9*), ABISELECT(16,8), "S3490C8");
    /*is_ambiguous_... S3490C8::S3490C5 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C5*), ABISELECT(2720,1948), "S3490C8");
    /*is_ambiguous_... S3490C8::S3490C5 */ AMB_check_base_class_offset(lv, (S3490C5*), ABISELECT(2720,1948), "S3490C8");
    /*is_ambiguous_... S3490C8::S3490C6 */ AMB_check_base_class_offset(lv, (S3490C6*), ABISELECT(3232,2308), "S3490C8");
    check_field_offset(lv, s3490c8f0, ABISELECT(3328,2360), "S3490C8.s3490c8f0");
    check_field_offset(lv, s3490c8f1, ABISELECT(4384,3112), "S3490C8.s3490c8f1");
    check_field_offset(lv, s3490c8f2, ABISELECT(4480,3164), "S3490C8.s3490c8f2");
    check_field_offset(lv, s3490c8f3, ABISELECT(4488,3168), "S3490C8.s3490c8f3");
    check_field_offset(lv, s3490c8f4, ABISELECT(4504,3184), "S3490C8.s3490c8f4");
    check_field_offset(lv, s3490c8f5, ABISELECT(4584,3224), "S3490C8.s3490c8f5");
    check_field_offset(lv, s3490c8f6, ABISELECT(4592,3232), "S3490C8.s3490c8f6");
    check_field_offset(lv, s3490c8f7, ABISELECT(4608,3240), "S3490C8.s3490c8f7");
    check_field_offset(lv, s3490c8f8, ABISELECT(4624,3252), "S3490C8.s3490c8f8");
    check_field_offset(lv, s3490c8f9, ABISELECT(4632,3260), "S3490C8.s3490c8f9");
    test_class_info(&lv, &cd_S3490C8);
    dp->~S3490C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3490C8(Test_S3490C8, "S3490C8", ABISELECT(5568,3932));

#else // __cplusplus

extern void _ZN7S3490C8C1Ev();
extern void _ZN7S3490C8D1Ev();
Name_Map name_map_S3490C8[] = {
  NSPAIR(_ZN7S3490C8C1Ev),
  NSPAIR(_ZN7S3490C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3490C4;
extern VTBL_ENTRY _ZTI7S3490C4[];
extern Class_Descriptor cd_S3490C6;
extern VTBL_ENTRY _ZTI7S3490C6[];
extern  VTBL_ENTRY _ZTV7S3490C6[];
extern Class_Descriptor cd_S3490C5;
extern VTBL_ENTRY _ZTI7S3490C5[];
extern  VTBL_ENTRY _ZTV7S3490C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C5[];
extern Class_Descriptor cd_S3490C6;
extern VTBL_ENTRY _ZTI7S3490C6[];
extern  VTBL_ENTRY _ZTV7S3490C6[];
extern Class_Descriptor cd_S3490C7;
extern VTBL_ENTRY _ZTI7S3490C7[];
extern  VTBL_ENTRY _ZTV7S3490C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C7[];
extern Class_Descriptor cd_S3490C3;
extern VTBL_ENTRY _ZTI7S3490C3[];
extern  VTBL_ENTRY _ZTV7S3490C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C3[];
extern Class_Descriptor cd_S3490C6;
extern VTBL_ENTRY _ZTI7S3490C6[];
extern  VTBL_ENTRY _ZTV7S3490C6[];
extern Class_Descriptor cd_S3490C6;
extern VTBL_ENTRY _ZTI7S3490C6[];
extern  VTBL_ENTRY _ZTV7S3490C6[];
extern Class_Descriptor cd_S3490C5;
extern VTBL_ENTRY _ZTI7S3490C5[];
extern  VTBL_ENTRY _ZTV7S3490C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C5[];
extern Class_Descriptor cd_S3490C7;
extern VTBL_ENTRY _ZTI7S3490C7[];
extern  VTBL_ENTRY _ZTV7S3490C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C7[];
extern Class_Descriptor cd_S3490C3;
extern VTBL_ENTRY _ZTI7S3490C3[];
extern  VTBL_ENTRY _ZTV7S3490C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C3[];
extern Class_Descriptor cd_S3490C9;
extern VTBL_ENTRY _ZTI7S3490C9[];
extern  VTBL_ENTRY _ZTV7S3490C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C9[];
extern Class_Descriptor cd_S3490C6;
extern VTBL_ENTRY _ZTI7S3490C6[];
extern  VTBL_ENTRY _ZTV7S3490C6[];
extern Class_Descriptor cd_S3490C5;
extern VTBL_ENTRY _ZTI7S3490C5[];
extern  VTBL_ENTRY _ZTV7S3490C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C5[];
extern Class_Descriptor cd_S3490C6;
extern VTBL_ENTRY _ZTI7S3490C6[];
extern  VTBL_ENTRY _ZTV7S3490C6[];
static Base_Class bases_S3490C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3490C4,    ABISELECT(4640,3264), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3490C6,    ABISELECT(4656,3280), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3490C5,    ABISELECT(4656,3280), //bcp->offset
    35, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S3490C6,    ABISELECT(5168,3640), //bcp->offset
    40, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S3490C7,    ABISELECT(5264,3692), //bcp->offset
    44, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S3490C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3490C6,    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
    7, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S3490C6,    ABISELECT(112,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S3490C5,    ABISELECT(112,60), //bcp->offset
    20, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S3490C7,    ABISELECT(624,420), //bcp->offset
    24, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S3490C3,    ABISELECT(5552,3924), //bcp->offset
    49, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S3490C9,    ABISELECT(16,8), //bcp->offset
    10, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3490C6,    ABISELECT(2720,1948), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S3490C5,    ABISELECT(2720,1948), //bcp->offset
    28, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3490C6,    ABISELECT(3232,2308), //bcp->offset
    32, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3490C8[];
extern void _ZN7S3490C82v4Ev();
extern void _ZN7S3490C8D1Ev();
extern void _ZN7S3490C8D0Ev();
extern void _ZN7S3490C62v2Ev();
extern void ABISELECT(_ZThn16_N7S3490C8D1Ev,_ZThn8_N7S3490C8D1Ev)();
extern void ABISELECT(_ZThn16_N7S3490C8D0Ev,_ZThn8_N7S3490C8D0Ev)();
extern void _ZN7S3490C62v2Ev();
extern void _ZN7S3490C72v3Ev();
extern void _ZN7S3490C62v2Ev();
extern void _ZN7S3490C62v2Ev();
extern void _ZN7S3490C62v2Ev();
extern void _ZN7S3490C62v2Ev();
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY vtc_S3490C8[] = {
  ABISELECT(5552,3924),
  ABISELECT(5264,3692),
  ABISELECT(5168,3640),
  ABISELECT(4656,3280),
  ABISELECT(4640,3264),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C8[0]),
  (VTBL_ENTRY)&_ZN7S3490C82v4Ev,
  (VTBL_ENTRY)&_ZN7S3490C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3490C8D0Ev,
  ABISELECT(5248,3684),
  ABISELECT(4640,3272),
  ABISELECT(5536,3916),
  ABISELECT(5152,3632),
  ABISELECT(4624,3256),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S3490C8[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S3490C8D1Ev,_ZThn8_N7S3490C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S3490C8D0Ev,_ZThn8_N7S3490C8D0Ev),
  ABISELECT(4528,3204),
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI7S3490C8[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  ABISELECT(4544,3220),
  ABISELECT(-624,-420),
  (VTBL_ENTRY)&(_ZTI7S3490C8[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
  ABISELECT(1920,1316),
  ABISELECT(-2720,-1948),
  (VTBL_ENTRY)&(_ZTI7S3490C8[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  ABISELECT(-3232,-2308),
  (VTBL_ENTRY)&(_ZTI7S3490C8[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  0,
  -16,
  ABISELECT(-4656,-3280),
  (VTBL_ENTRY)&(_ZTI7S3490C8[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  0,
  ABISELECT(-5168,-3640),
  (VTBL_ENTRY)&(_ZTI7S3490C8[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  0,
  ABISELECT(-96,-52),
  ABISELECT(-5264,-3692),
  (VTBL_ENTRY)&(_ZTI7S3490C8[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
  ABISELECT(-288,-232),
  ABISELECT(-384,-284),
  ABISELECT(-896,-644),
  ABISELECT(-912,-660),
  ABISELECT(-5552,-3924),
  (VTBL_ENTRY)&(_ZTI7S3490C8[0]),
};
extern VTBL_ENTRY _ZTV7S3490C8[];
static  VTBL_ENTRY _tg__ZTV7S3490C3__A__7S3490C8[] = {
  ABISELECT(5264,3692),
  ABISELECT(5168,3640),
  ABISELECT(4656,3280),
  ABISELECT(4640,3264),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C3[0]),
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C5__7S3490C3__A__7S3490C8[] = {
  0,
  -16,
  ABISELECT(-4656,-3280),
  (VTBL_ENTRY)&(_ZTI7S3490C3[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C6__A1__7S3490C3__A__7S3490C8[] = {
  0,
  ABISELECT(-5168,-3640),
  (VTBL_ENTRY)&(_ZTI7S3490C3[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C7__7S3490C3__A__7S3490C8[] = {
  0,
  ABISELECT(-96,-52),
  ABISELECT(-5264,-3692),
  (VTBL_ENTRY)&(_ZTI7S3490C3[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C62v2Ev();
extern void _ZN7S3490C9D1Ev();
extern void _ZN7S3490C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C9__7S3490C8[] = {
  ABISELECT(5248,3684),
  ABISELECT(4640,3272),
  ABISELECT(5536,3916),
  ABISELECT(5152,3632),
  ABISELECT(4624,3256),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3490C9D1Ev,
  (VTBL_ENTRY)&_ZN7S3490C9D0Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C57S3490C9__A1__7S3490C8[] = {
  ABISELECT(4528,3204),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C5[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C77S3490C9__A1__7S3490C8[] = {
  ABISELECT(4544,3220),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C7[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C6__7S3490C77S3490C9__A1__7S3490C8[] = {
  0,
  ABISELECT(-4544,-3220),
  (VTBL_ENTRY)&(_ZTI7S3490C7[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C5__A__7S3490C9__7S3490C8[] = {
  ABISELECT(4528,3204),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C7__A__7S3490C9__7S3490C8[] = {
  ABISELECT(4544,3220),
  ABISELECT(-608,-412),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C6__A2__7S3490C9__7S3490C8[] = {
  0,
  ABISELECT(-5152,-3632),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3490C3__7S3490C9__7S3490C8[] = {
  ABISELECT(-288,-232),
  ABISELECT(-384,-284),
  ABISELECT(-896,-644),
  ABISELECT(-912,-660),
  ABISELECT(-5536,-3916),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C5__A1__7S3490C9__7S3490C8[] = {
  0,
  -16,
  ABISELECT(-4640,-3272),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C7__A1__7S3490C9__7S3490C8[] = {
  0,
  ABISELECT(-96,-52),
  ABISELECT(-5248,-3684),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C5__A__7S3490C8[] = {
  ABISELECT(1920,1316),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C5[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C5__7S3490C8[] = {
  -16,
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C5[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C7__7S3490C8[] = {
  ABISELECT(-96,-52),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C7[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C6__7S3490C7__7S3490C8[] = {
  0,
  ABISELECT(96,52),
  (VTBL_ENTRY)&(_ZTI7S3490C7[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3490C3__A1__7S3490C8[] = {
  ABISELECT(-288,-232),
  ABISELECT(-384,-284),
  ABISELECT(-896,-644),
  ABISELECT(-912,-660),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C3[0]),
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C5__7S3490C3__A1__7S3490C8[] = {
  0,
  -16,
  ABISELECT(896,644),
  (VTBL_ENTRY)&(_ZTI7S3490C3[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C6__A1__7S3490C3__A1__7S3490C8[] = {
  0,
  ABISELECT(384,284),
  (VTBL_ENTRY)&(_ZTI7S3490C3[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C7__7S3490C3__A1__7S3490C8[] = {
  0,
  ABISELECT(-96,-52),
  ABISELECT(288,232),
  (VTBL_ENTRY)&(_ZTI7S3490C3[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
static  VTT_ENTRY vtt_S3490C8[] = {
  {&(_ZTV7S3490C8[7]),  7,55},
  {&(_tg__ZTV7S3490C3__A__7S3490C8[6]),  6,6},
  {&(_tg__ZTV7S3490C5__7S3490C3__A__7S3490C8[4]),  4,5},
  {&(_tg__ZTV7S3490C6__A1__7S3490C3__A__7S3490C8[3]),  3,4},
  {&(_tg__ZTV7S3490C7__7S3490C3__A__7S3490C8[4]),  4,5},
  {&(_tg__ZTV7S3490C9__7S3490C8[7]),  7,10},
  {&(_tg__ZTV7S3490C57S3490C9__A1__7S3490C8[3]),  3,4},
  {&(_tg__ZTV7S3490C77S3490C9__A1__7S3490C8[3]),  3,4},
  {&(_tg__ZTV7S3490C6__7S3490C77S3490C9__A1__7S3490C8[3]),  3,4},
  {&(_tg__ZTV7S3490C5__A__7S3490C9__7S3490C8[3]),  3,4},
  {&(_tg__ZTV7S3490C7__A__7S3490C9__7S3490C8[3]),  3,4},
  {&(_tg__ZTV7S3490C6__A2__7S3490C9__7S3490C8[3]),  3,4},
  {&(_tg__ZTV7S3490C3__7S3490C9__7S3490C8[6]),  6,6},
  {&(_tg__ZTV7S3490C5__A1__7S3490C9__7S3490C8[4]),  4,5},
  {&(_tg__ZTV7S3490C7__A1__7S3490C9__7S3490C8[4]),  4,5},
  {&(_tg__ZTV7S3490C5__A__7S3490C8[3]),  3,4},
  {&(_ZTV7S3490C8[39]),  39,55},
  {&(_ZTV7S3490C8[43]),  43,55},
  {&(_ZTV7S3490C8[48]),  48,55},
  {&(_ZTV7S3490C8[17]),  17,55},
  {&(_ZTV7S3490C8[23]),  23,55},
  {&(_ZTV7S3490C8[27]),  27,55},
  {&(_ZTV7S3490C8[55]),  55,55},
  {&(_ZTV7S3490C8[31]),  31,55},
  {&(_tg__ZTV7S3490C5__7S3490C8[3]),  3,4},
  {&(_tg__ZTV7S3490C7__7S3490C8[3]),  3,4},
  {&(_tg__ZTV7S3490C6__7S3490C7__7S3490C8[3]),  3,4},
  {&(_tg__ZTV7S3490C3__A1__7S3490C8[6]),  6,6},
  {&(_tg__ZTV7S3490C5__7S3490C3__A1__7S3490C8[4]),  4,5},
  {&(_tg__ZTV7S3490C6__A1__7S3490C3__A1__7S3490C8[3]),  3,4},
  {&(_tg__ZTV7S3490C7__7S3490C3__A1__7S3490C8[4]),  4,5},
};
extern VTBL_ENTRY _ZTI7S3490C8[];
extern  VTBL_ENTRY _ZTV7S3490C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C8[];
Class_Descriptor cd_S3490C8 = {  "S3490C8", // class name
  bases_S3490C8, 15,
  &(vtc_S3490C8[0]), // expected_vtbl_contents
  &(vtt_S3490C8[0]), // expected_vtt_contents
  ABISELECT(5568,3932), // object size
  NSPAIRA(_ZTI7S3490C8),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S3490C8),55, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3490C8),31, //virtual table table var
  14, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3490C2  : S3490C3 , S3490C8 {
  void *s3490c2f0[2];
  int s3490c2f1;
  char s3490c2f2;
  ::S3490C5 s3490c2f3;
  ::S3490C8 s3490c2f4;
  long double s3490c2f5;
  virtual  ~S3490C2(); // _ZN7S3490C2D2Ev
  virtual void  v5(); // _ZN7S3490C22v5Ev
  virtual void  v6(); // _ZN7S3490C22v6Ev
  S3490C2(); // tgen
};
//SIG(-1 S3490C2) C1{ BC2{ VBC3{ m FL Fi Fc} VBC4{ BC5{ v3 FD Fi:3 Fc:8 FD[2] FL} VBC3 Fc[10] Fi FC6{ VBC5 v4 FC3 FL FC3[7] Fp FL FC3 Fp Fc Fs Fi FC5} FL} VBC5 VBC6 Fp} BC7{ BC2 BC8{ BC5 VBC3 BC4 BC6 VBC2 vd FC6 FC2 Fp Fi FC5 FC6} BC4 BC5 v5 FC4[2] FC5 Fi FC3 Fp[10] Fi[2] FL FD FL Fi} vd v1 v2 Fp[2] Fi Fc FC4 FC7 FD}


 S3490C2 ::~S3490C2(){ note_dtor("S3490C2", this);}
void  S3490C2 ::v5(){vfunc_called(this, "_ZN7S3490C22v5Ev");}
void  S3490C2 ::v6(){vfunc_called(this, "_ZN7S3490C22v6Ev");}
S3490C2 ::S3490C2(){ note_ctor("S3490C2", this);} // tgen

static void Test_S3490C2()
{
  extern Class_Descriptor cd_S3490C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(734,2070)];
    init_test(&cd_S3490C2, buf);
    S3490C2 *dp, &lv = *(dp=new (buf) S3490C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(11728,8276), "sizeof(S3490C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3490C2)");
    /*is_ambiguous_... S3490C2::S3490C3 */ AMB_check_base_class_offset(lv, (S3490C4*)(S3490C3*), ABISELECT(10800,7608), "S3490C2");
    /*is_ambiguous_... S3490C2::S3490C5 */ AMB_check_base_class_offset(lv, (S3490C4*)(S3490C5*), ABISELECT(10800,7608), "S3490C2");
    /*is_ambiguous_... S3490C8::S3490C3 */ AMB_check_base_class_offset(lv, (S3490C4*)(S3490C3*)(S3490C8*), ABISELECT(10800,7608), "S3490C2");
    check_base_class_offset(lv, (S3490C4*)(S3490C9*)(S3490C8*), ABISELECT(10800,7608), "S3490C2");
    /*is_ambiguous_... S3490C9::S3490C5 */ AMB_check_base_class_offset(lv, (S3490C4*)(S3490C5*)(S3490C9*)(S3490C8*), ABISELECT(10800,7608), "S3490C2");
    /*is_ambiguous_... S3490C2::S3490C3 */ AMB_check_base_class_offset(lv, (S3490C4*)(S3490C3*), ABISELECT(10800,7608), "S3490C2");
    /*is_ambiguous_... S3490C8::S3490C5 */ AMB_check_base_class_offset(lv, (S3490C4*)(S3490C5*)(S3490C8*), ABISELECT(10800,7608), "S3490C2");
    /*is_ambiguous_... S3490C2::S3490C5 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C5*), ABISELECT(10816,7624), "S3490C2");
    /*is_ambiguous_... S3490C2::S3490C3 */ AMB_check_base_class_offset(lv, (S3490C5*)(S3490C3*), ABISELECT(10816,7624), "S3490C2");
    /*is_ambiguous_... S3490C8::S3490C3 */ AMB_check_base_class_offset(lv, (S3490C5*)(S3490C3*)(S3490C8*), ABISELECT(10816,7624), "S3490C2");
    /*is_ambiguous_... S3490C2::S3490C3 */ AMB_check_base_class_offset(lv, (S3490C5*)(S3490C3*), ABISELECT(10816,7624), "S3490C2");
    /*is_ambiguous_... S3490C2::S3490C3 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C3*), ABISELECT(11328,7984), "S3490C2");
    /*is_ambiguous_... S3490C2::S3490C7 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C7*), ABISELECT(11328,7984), "S3490C2");
    /*is_ambiguous_... S3490C8::S3490C3 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C3*)(S3490C8*), ABISELECT(11328,7984), "S3490C2");
    /*is_ambiguous_... S3490C9::S3490C7 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C7*)(S3490C9*)(S3490C8*), ABISELECT(11328,7984), "S3490C2");
    /*is_ambiguous_... S3490C2::S3490C3 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C3*), ABISELECT(11328,7984), "S3490C2");
    /*is_ambiguous_... S3490C2::S3490C3 */ AMB_check_base_class_offset(lv, (S3490C7*)(S3490C3*), ABISELECT(11424,8036), "S3490C2");
    /*is_ambiguous_... S3490C8::S3490C3 */ AMB_check_base_class_offset(lv, (S3490C7*)(S3490C3*)(S3490C8*), ABISELECT(11424,8036), "S3490C2");
    /*is_ambiguous_... S3490C2::S3490C3 */ AMB_check_base_class_offset(lv, (S3490C7*)(S3490C3*), ABISELECT(11424,8036), "S3490C2");
    /*is_ambiguous_... S3490C2::S3490C3 */ AMB_check_base_class_offset(lv, (S3490C3*), 0, "S3490C2");
    /*is_ambiguous_... S3490C8::S3490C3 */ AMB_check_base_class_offset(lv, (S3490C3*)(S3490C8*), ABISELECT(16,8), "S3490C2");
    /*is_ambiguous_... S3490C9::S3490C6 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C9*)(S3490C8*), ABISELECT(32,16), "S3490C2");
    /*is_ambiguous_... S3490C9::S3490C5 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C5*)(S3490C9*)(S3490C8*), ABISELECT(128,68), "S3490C2");
    /*is_ambiguous_... S3490C9::S3490C5 */ AMB_check_base_class_offset(lv, (S3490C5*)(S3490C9*)(S3490C8*), ABISELECT(128,68), "S3490C2");
    /*is_ambiguous_... S3490C9::S3490C7 */ AMB_check_base_class_offset(lv, (S3490C7*)(S3490C9*)(S3490C8*), ABISELECT(640,428), "S3490C2");
    check_base_class_offset(lv, (S3490C3*)(S3490C9*)(S3490C8*), ABISELECT(11712,8268), "S3490C2");
    check_base_class_offset(lv, (S3490C9*)(S3490C8*), ABISELECT(32,16), "S3490C2");
    /*is_ambiguous_... S3490C8::S3490C5 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C5*)(S3490C8*), ABISELECT(2736,1956), "S3490C2");
    /*is_ambiguous_... S3490C8::S3490C5 */ AMB_check_base_class_offset(lv, (S3490C5*)(S3490C8*), ABISELECT(2736,1956), "S3490C2");
    /*is_ambiguous_... S3490C8::S3490C6 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C8*), ABISELECT(3248,2316), "S3490C2");
    check_base_class_offset(lv, (S3490C8*), ABISELECT(16,8), "S3490C2");
    check_field_offset(lv, s3490c2f0, ABISELECT(4656,3272), "S3490C2.s3490c2f0");
    check_field_offset(lv, s3490c2f1, ABISELECT(4672,3280), "S3490C2.s3490c2f1");
    check_field_offset(lv, s3490c2f2, ABISELECT(4676,3284), "S3490C2.s3490c2f2");
    check_field_offset(lv, s3490c2f3, ABISELECT(4688,3288), "S3490C2.s3490c2f3");
    check_field_offset(lv, s3490c2f4, ABISELECT(5216,3664), "S3490C2.s3490c2f4");
    check_field_offset(lv, s3490c2f5, ABISELECT(10784,7596), "S3490C2.s3490c2f5");
    test_class_info(&lv, &cd_S3490C2);
    dp->~S3490C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3490C2(Test_S3490C2, "S3490C2", ABISELECT(11728,8276));

#else // __cplusplus

extern void _ZN7S3490C2C1Ev();
extern void _ZN7S3490C2D2Ev();
Name_Map name_map_S3490C2[] = {
  NSPAIR(_ZN7S3490C2C1Ev),
  NSPAIR(_ZN7S3490C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3490C4;
extern VTBL_ENTRY _ZTI7S3490C4[];
extern Class_Descriptor cd_S3490C6;
extern VTBL_ENTRY _ZTI7S3490C6[];
extern  VTBL_ENTRY _ZTV7S3490C6[];
extern Class_Descriptor cd_S3490C5;
extern VTBL_ENTRY _ZTI7S3490C5[];
extern  VTBL_ENTRY _ZTV7S3490C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C5[];
extern Class_Descriptor cd_S3490C6;
extern VTBL_ENTRY _ZTI7S3490C6[];
extern  VTBL_ENTRY _ZTV7S3490C6[];
extern Class_Descriptor cd_S3490C7;
extern VTBL_ENTRY _ZTI7S3490C7[];
extern  VTBL_ENTRY _ZTV7S3490C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C7[];
extern Class_Descriptor cd_S3490C3;
extern VTBL_ENTRY _ZTI7S3490C3[];
extern  VTBL_ENTRY _ZTV7S3490C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C3[];
extern Class_Descriptor cd_S3490C3;
extern VTBL_ENTRY _ZTI7S3490C3[];
extern  VTBL_ENTRY _ZTV7S3490C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C3[];
extern Class_Descriptor cd_S3490C6;
extern VTBL_ENTRY _ZTI7S3490C6[];
extern  VTBL_ENTRY _ZTV7S3490C6[];
extern Class_Descriptor cd_S3490C6;
extern VTBL_ENTRY _ZTI7S3490C6[];
extern  VTBL_ENTRY _ZTV7S3490C6[];
extern Class_Descriptor cd_S3490C5;
extern VTBL_ENTRY _ZTI7S3490C5[];
extern  VTBL_ENTRY _ZTV7S3490C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C5[];
extern Class_Descriptor cd_S3490C7;
extern VTBL_ENTRY _ZTI7S3490C7[];
extern  VTBL_ENTRY _ZTV7S3490C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C7[];
extern Class_Descriptor cd_S3490C3;
extern VTBL_ENTRY _ZTI7S3490C3[];
extern  VTBL_ENTRY _ZTV7S3490C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C3[];
extern Class_Descriptor cd_S3490C9;
extern VTBL_ENTRY _ZTI7S3490C9[];
extern  VTBL_ENTRY _ZTV7S3490C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C9[];
extern Class_Descriptor cd_S3490C6;
extern VTBL_ENTRY _ZTI7S3490C6[];
extern  VTBL_ENTRY _ZTV7S3490C6[];
extern Class_Descriptor cd_S3490C5;
extern VTBL_ENTRY _ZTI7S3490C5[];
extern  VTBL_ENTRY _ZTV7S3490C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C5[];
extern Class_Descriptor cd_S3490C6;
extern VTBL_ENTRY _ZTI7S3490C6[];
extern  VTBL_ENTRY _ZTV7S3490C6[];
extern Class_Descriptor cd_S3490C8;
extern VTBL_ENTRY _ZTI7S3490C8[];
extern  VTBL_ENTRY _ZTV7S3490C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C8[];
static Base_Class bases_S3490C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3490C4,    ABISELECT(10800,7608), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3490C6,    ABISELECT(10816,7624), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3490C5,    ABISELECT(10816,7624), //bcp->offset
    46, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S3490C6,    ABISELECT(11328,7984), //bcp->offset
    51, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S3490C7,    ABISELECT(11424,8036), //bcp->offset
    55, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    40, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S3490C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3490C3,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S3490C6,    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
    8, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S3490C6,    ABISELECT(128,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
    9, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3490C5,    ABISELECT(128,68), //bcp->offset
    31, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    35, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S3490C7,    ABISELECT(640,428), //bcp->offset
    35, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    36, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S3490C3,    ABISELECT(11712,8268), //bcp->offset
    60, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    37, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S3490C9,    ABISELECT(32,16), //bcp->offset
    21, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    34, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S3490C6,    ABISELECT(2736,1956), //bcp->offset
    -1, //bcp->virtual_function_table_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
    14, //immediately_derived
  0, 0},
  {&cd_S3490C5,    ABISELECT(2736,1956), //bcp->offset
    39, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    38, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S3490C6,    ABISELECT(3248,2316), //bcp->offset
    43, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S3490C8,    ABISELECT(16,8), //bcp->offset
    11, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3490C2[];
extern void _ZN7S3490C2D1Ev();
extern void _ZN7S3490C2D0Ev();
extern void _ZN7S3490C22v5Ev();
extern void _ZN7S3490C22v6Ev();
extern void _ZN7S3490C82v4Ev();
extern void ABISELECT(_ZThn16_N7S3490C2D1Ev,_ZThn8_N7S3490C2D1Ev)();
extern void ABISELECT(_ZThn16_N7S3490C2D0Ev,_ZThn8_N7S3490C2D0Ev)();
extern void _ZN7S3490C62v2Ev();
extern void ABISELECT(_ZThn32_N7S3490C2D1Ev,_ZThn16_N7S3490C2D1Ev)();
extern void ABISELECT(_ZThn32_N7S3490C2D0Ev,_ZThn16_N7S3490C2D0Ev)();
extern void _ZN7S3490C62v2Ev();
extern void _ZN7S3490C72v3Ev();
extern void _ZN7S3490C62v2Ev();
extern void _ZN7S3490C62v2Ev();
extern void _ZN7S3490C62v2Ev();
extern void _ZN7S3490C62v2Ev();
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY vtc_S3490C2[] = {
  ABISELECT(11712,8268),
  ABISELECT(11424,8036),
  ABISELECT(11328,7984),
  ABISELECT(10816,7624),
  ABISELECT(10800,7608),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C2[0]),
  (VTBL_ENTRY)&_ZN7S3490C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3490C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3490C22v5Ev,
  (VTBL_ENTRY)&_ZN7S3490C22v6Ev,
  ABISELECT(11696,8260),
  ABISELECT(11408,8028),
  ABISELECT(11312,7976),
  ABISELECT(10800,7616),
  ABISELECT(10784,7600),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S3490C2[0]),
  (VTBL_ENTRY)&_ZN7S3490C82v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S3490C2D1Ev,_ZThn8_N7S3490C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S3490C2D0Ev,_ZThn8_N7S3490C2D0Ev),
  ABISELECT(11392,8020),
  ABISELECT(10784,7608),
  ABISELECT(11680,8252),
  ABISELECT(11296,7968),
  ABISELECT(10768,7592),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S3490C2[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N7S3490C2D1Ev,_ZThn16_N7S3490C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N7S3490C2D0Ev,_ZThn16_N7S3490C2D0Ev),
  ABISELECT(10672,7540),
  ABISELECT(-128,-68),
  (VTBL_ENTRY)&(_ZTI7S3490C2[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  ABISELECT(10688,7556),
  ABISELECT(-640,-428),
  (VTBL_ENTRY)&(_ZTI7S3490C2[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
  ABISELECT(8064,5652),
  ABISELECT(-2736,-1956),
  (VTBL_ENTRY)&(_ZTI7S3490C2[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  ABISELECT(-3248,-2316),
  (VTBL_ENTRY)&(_ZTI7S3490C2[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  0,
  -16,
  ABISELECT(-10816,-7624),
  (VTBL_ENTRY)&(_ZTI7S3490C2[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  0,
  ABISELECT(-11328,-7984),
  (VTBL_ENTRY)&(_ZTI7S3490C2[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  0,
  ABISELECT(-96,-52),
  ABISELECT(-11424,-8036),
  (VTBL_ENTRY)&(_ZTI7S3490C2[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
  ABISELECT(-288,-232),
  ABISELECT(-384,-284),
  ABISELECT(-896,-644),
  ABISELECT(-912,-660),
  ABISELECT(-11712,-8268),
  (VTBL_ENTRY)&(_ZTI7S3490C2[0]),
};
extern VTBL_ENTRY _ZTV7S3490C2[];
static  VTBL_ENTRY _tg__ZTV7S3490C3__A__7S3490C2[] = {
  ABISELECT(11424,8036),
  ABISELECT(11328,7984),
  ABISELECT(10816,7624),
  ABISELECT(10800,7608),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C3[0]),
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C5__7S3490C3__A__7S3490C2[] = {
  0,
  -16,
  ABISELECT(-10816,-7624),
  (VTBL_ENTRY)&(_ZTI7S3490C3[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C6__A1__7S3490C3__A__7S3490C2[] = {
  0,
  ABISELECT(-11328,-7984),
  (VTBL_ENTRY)&(_ZTI7S3490C3[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C7__7S3490C3__A__7S3490C2[] = {
  0,
  ABISELECT(-96,-52),
  ABISELECT(-11424,-8036),
  (VTBL_ENTRY)&(_ZTI7S3490C3[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C82v4Ev();
extern void _ZN7S3490C8D1Ev();
extern void _ZN7S3490C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C8__7S3490C2[] = {
  ABISELECT(11696,8260),
  ABISELECT(11408,8028),
  ABISELECT(11312,7976),
  ABISELECT(10800,7616),
  ABISELECT(10784,7600),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C8[0]),
  (VTBL_ENTRY)&_ZN7S3490C82v4Ev,
  (VTBL_ENTRY)&_ZN7S3490C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3490C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3490C37S3490C8__A1__7S3490C2[] = {
  ABISELECT(11408,8028),
  ABISELECT(11312,7976),
  ABISELECT(10800,7616),
  ABISELECT(10784,7600),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C3[0]),
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C5__7S3490C37S3490C8__A1__7S3490C2[] = {
  0,
  -16,
  ABISELECT(-10800,-7616),
  (VTBL_ENTRY)&(_ZTI7S3490C3[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C6__A1__7S3490C37S3490C8__A1__7S3490C2[] = {
  0,
  ABISELECT(-11312,-7976),
  (VTBL_ENTRY)&(_ZTI7S3490C3[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C7__7S3490C37S3490C8__A1__7S3490C2[] = {
  0,
  ABISELECT(-96,-52),
  ABISELECT(-11408,-8028),
  (VTBL_ENTRY)&(_ZTI7S3490C3[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C62v2Ev();
extern void _ZN7S3490C9D1Ev();
extern void _ZN7S3490C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C97S3490C8__7S3490C2[] = {
  ABISELECT(11392,8020),
  ABISELECT(10784,7608),
  ABISELECT(11680,8252),
  ABISELECT(11296,7968),
  ABISELECT(10768,7592),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3490C9D1Ev,
  (VTBL_ENTRY)&_ZN7S3490C9D0Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C57S3490C97S3490C8__A1__7S3490C2[] = {
  ABISELECT(10672,7540),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C5[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C77S3490C97S3490C8__A1__7S3490C2[] = {
  ABISELECT(10688,7556),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C7[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C6__7S3490C77S3490C97S3490C8__A1__7S3490C2[] = {
  0,
  ABISELECT(-10688,-7556),
  (VTBL_ENTRY)&(_ZTI7S3490C7[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C5__A__7S3490C97S3490C8__7S3490C2[] = {
  ABISELECT(10672,7540),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C7__A__7S3490C97S3490C8__7S3490C2[] = {
  ABISELECT(10688,7556),
  ABISELECT(-608,-412),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C6__A2__7S3490C97S3490C8__7S3490C2[] = {
  0,
  ABISELECT(-11296,-7968),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3490C3__7S3490C97S3490C8__7S3490C2[] = {
  ABISELECT(-288,-232),
  ABISELECT(-384,-284),
  ABISELECT(-896,-644),
  ABISELECT(-912,-660),
  ABISELECT(-11680,-8252),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C5__A1__7S3490C97S3490C8__7S3490C2[] = {
  0,
  -16,
  ABISELECT(-10784,-7608),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C7__A1__7S3490C97S3490C8__7S3490C2[] = {
  0,
  ABISELECT(-96,-52),
  ABISELECT(-11392,-8020),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C57S3490C8__A2__7S3490C2[] = {
  ABISELECT(8064,5652),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C5[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C5__7S3490C8__7S3490C2[] = {
  0,
  -16,
  ABISELECT(-10800,-7616),
  (VTBL_ENTRY)&(_ZTI7S3490C8[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C6__A1__7S3490C8__7S3490C2[] = {
  0,
  ABISELECT(-11312,-7976),
  (VTBL_ENTRY)&(_ZTI7S3490C8[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C7__7S3490C8__7S3490C2[] = {
  0,
  ABISELECT(-96,-52),
  ABISELECT(-11408,-8028),
  (VTBL_ENTRY)&(_ZTI7S3490C8[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C62v2Ev();
extern void ABISELECT(_ZThn16_N7S3490C8D1Ev,_ZThn8_N7S3490C8D1Ev)();
extern void ABISELECT(_ZThn16_N7S3490C8D0Ev,_ZThn8_N7S3490C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3490C9__7S3490C8__7S3490C2[] = {
  ABISELECT(11392,8020),
  ABISELECT(10784,7608),
  ABISELECT(11680,8252),
  ABISELECT(11296,7968),
  ABISELECT(10768,7592),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S3490C8[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S3490C8D1Ev,_ZThn8_N7S3490C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S3490C8D0Ev,_ZThn8_N7S3490C8D0Ev),
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C57S3490C9__A1__7S3490C8__7S3490C2[] = {
  ABISELECT(10672,7540),
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI7S3490C8[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C77S3490C9__A1__7S3490C8__7S3490C2[] = {
  ABISELECT(10688,7556),
  ABISELECT(-624,-420),
  (VTBL_ENTRY)&(_ZTI7S3490C8[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3490C3__A1__7S3490C8__7S3490C2[] = {
  ABISELECT(-288,-232),
  ABISELECT(-384,-284),
  ABISELECT(-896,-644),
  ABISELECT(-912,-660),
  ABISELECT(-11696,-8260),
  (VTBL_ENTRY)&(_ZTI7S3490C8[0]),
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C5__A__7S3490C8__7S3490C2[] = {
  ABISELECT(8064,5652),
  ABISELECT(-2720,-1948),
  (VTBL_ENTRY)&(_ZTI7S3490C8[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C5__7S3490C2[] = {
  -16,
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C5[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C7__7S3490C2[] = {
  ABISELECT(-96,-52),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C7[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C6__7S3490C7__7S3490C2[] = {
  0,
  ABISELECT(96,52),
  (VTBL_ENTRY)&(_ZTI7S3490C7[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3490C3__A2__7S3490C2[] = {
  ABISELECT(-288,-232),
  ABISELECT(-384,-284),
  ABISELECT(-896,-644),
  ABISELECT(-912,-660),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C3[0]),
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C5__7S3490C3__A2__7S3490C2[] = {
  0,
  -16,
  ABISELECT(896,644),
  (VTBL_ENTRY)&(_ZTI7S3490C3[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C6__A1__7S3490C3__A2__7S3490C2[] = {
  0,
  ABISELECT(384,284),
  (VTBL_ENTRY)&(_ZTI7S3490C3[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C7__7S3490C3__A2__7S3490C2[] = {
  0,
  ABISELECT(-96,-52),
  ABISELECT(288,232),
  (VTBL_ENTRY)&(_ZTI7S3490C3[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
static  VTT_ENTRY vtt_S3490C2[] = {
  {&(_ZTV7S3490C2[7]),  7,66},
  {&(_tg__ZTV7S3490C3__A__7S3490C2[6]),  6,6},
  {&(_tg__ZTV7S3490C5__7S3490C3__A__7S3490C2[4]),  4,5},
  {&(_tg__ZTV7S3490C6__A1__7S3490C3__A__7S3490C2[3]),  3,4},
  {&(_tg__ZTV7S3490C7__7S3490C3__A__7S3490C2[4]),  4,5},
  {&(_tg__ZTV7S3490C8__7S3490C2[7]),  7,10},
  {&(_tg__ZTV7S3490C37S3490C8__A1__7S3490C2[6]),  6,6},
  {&(_tg__ZTV7S3490C5__7S3490C37S3490C8__A1__7S3490C2[4]),  4,5},
  {&(_tg__ZTV7S3490C6__A1__7S3490C37S3490C8__A1__7S3490C2[3]),  3,4},
  {&(_tg__ZTV7S3490C7__7S3490C37S3490C8__A1__7S3490C2[4]),  4,5},
  {&(_tg__ZTV7S3490C97S3490C8__7S3490C2[7]),  7,10},
  {&(_tg__ZTV7S3490C57S3490C97S3490C8__A1__7S3490C2[3]),  3,4},
  {&(_tg__ZTV7S3490C77S3490C97S3490C8__A1__7S3490C2[3]),  3,4},
  {&(_tg__ZTV7S3490C6__7S3490C77S3490C97S3490C8__A1__7S3490C2[3]),  3,4},
  {&(_tg__ZTV7S3490C5__A__7S3490C97S3490C8__7S3490C2[3]),  3,4},
  {&(_tg__ZTV7S3490C7__A__7S3490C97S3490C8__7S3490C2[3]),  3,4},
  {&(_tg__ZTV7S3490C6__A2__7S3490C97S3490C8__7S3490C2[3]),  3,4},
  {&(_tg__ZTV7S3490C3__7S3490C97S3490C8__7S3490C2[6]),  6,6},
  {&(_tg__ZTV7S3490C5__A1__7S3490C97S3490C8__7S3490C2[4]),  4,5},
  {&(_tg__ZTV7S3490C7__A1__7S3490C97S3490C8__7S3490C2[4]),  4,5},
  {&(_tg__ZTV7S3490C57S3490C8__A2__7S3490C2[3]),  3,4},
  {&(_tg__ZTV7S3490C5__7S3490C8__7S3490C2[4]),  4,5},
  {&(_tg__ZTV7S3490C6__A1__7S3490C8__7S3490C2[3]),  3,4},
  {&(_tg__ZTV7S3490C7__7S3490C8__7S3490C2[4]),  4,5},
  {&(_tg__ZTV7S3490C9__7S3490C8__7S3490C2[7]),  7,10},
  {&(_tg__ZTV7S3490C57S3490C9__A1__7S3490C8__7S3490C2[3]),  3,4},
  {&(_tg__ZTV7S3490C77S3490C9__A1__7S3490C8__7S3490C2[3]),  3,4},
  {&(_tg__ZTV7S3490C3__A1__7S3490C8__7S3490C2[6]),  6,6},
  {&(_tg__ZTV7S3490C5__A__7S3490C8__7S3490C2[3]),  3,4},
  {&(_ZTV7S3490C2[50]),  50,66},
  {&(_ZTV7S3490C2[54]),  54,66},
  {&(_ZTV7S3490C2[59]),  59,66},
  {&(_ZTV7S3490C2[18]),  18,66},
  {&(_ZTV7S3490C2[28]),  28,66},
  {&(_ZTV7S3490C2[34]),  34,66},
  {&(_ZTV7S3490C2[38]),  38,66},
  {&(_ZTV7S3490C2[66]),  66,66},
  {&(_ZTV7S3490C2[42]),  42,66},
  {&(_tg__ZTV7S3490C5__7S3490C2[3]),  3,4},
  {&(_tg__ZTV7S3490C7__7S3490C2[3]),  3,4},
  {&(_tg__ZTV7S3490C6__7S3490C7__7S3490C2[3]),  3,4},
  {&(_tg__ZTV7S3490C3__A2__7S3490C2[6]),  6,6},
  {&(_tg__ZTV7S3490C5__7S3490C3__A2__7S3490C2[4]),  4,5},
  {&(_tg__ZTV7S3490C6__A1__7S3490C3__A2__7S3490C2[3]),  3,4},
  {&(_tg__ZTV7S3490C7__7S3490C3__A2__7S3490C2[4]),  4,5},
};
extern VTBL_ENTRY _ZTI7S3490C2[];
extern  VTBL_ENTRY _ZTV7S3490C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C2[];
Class_Descriptor cd_S3490C2 = {  "S3490C2", // class name
  bases_S3490C2, 17,
  &(vtc_S3490C2[0]), // expected_vtbl_contents
  &(vtt_S3490C2[0]), // expected_vtt_contents
  ABISELECT(11728,8276), // object size
  NSPAIRA(_ZTI7S3490C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3490C2),66, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3490C2),45, //virtual table table var
  16, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3490C12  : S3490C9 {
  void *s3490c12f0;
  short s3490c12f1:6;
  ::S3490C6 s3490c12f2;
  long double s3490c12f3;
  int s3490c12f4;
  ::S3490C4 s3490c12f5;
  ::S3490C7 s3490c12f6;
  void *s3490c12f7;
  int s3490c12f8;
  void *s3490c12f9[2];
  virtual  ~S3490C12(); // _ZN8S3490C12D2Ev
  virtual void  v7(); // _ZN8S3490C122v7Ev
  virtual void  v8(); // _ZN8S3490C122v8Ev
  S3490C12(); // tgen
};
//SIG(-1 S3490C12) C1{ BC2{ BC3{ v3 FD Fi:3 Fc:8 FD[2] FL} VBC4{ m FL Fi Fc} BC5{ BC3 VBC4 Fc[10] Fi FC6{ VBC3 v4 FC4 FL FC4[7] Fp FL FC4 Fp Fc Fs Fi FC3} FL} BC6 VBC7{ VBC4 VBC5 VBC3 VBC6 Fp} vd FC6 FC7 Fp Fi FC3 FC6} vd v1 v2 Fp Fs:6 FC3 FD Fi FC4 FC6 Fp Fi Fp[2]}


 S3490C12 ::~S3490C12(){ note_dtor("S3490C12", this);}
void  S3490C12 ::v7(){vfunc_called(this, "_ZN8S3490C122v7Ev");}
void  S3490C12 ::v8(){vfunc_called(this, "_ZN8S3490C122v8Ev");}
S3490C12 ::S3490C12(){ note_ctor("S3490C12", this);} // tgen

static void Test_S3490C12()
{
  extern Class_Descriptor cd_S3490C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(264,751)];
    init_test(&cd_S3490C12, buf);
    S3490C12 *dp, &lv = *(dp=new (buf) S3490C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(4208,3000), "sizeof(S3490C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3490C12)");
    /*is_ambiguous_... S3490C9::S3490C6 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C9*), 0, "S3490C12");
    check_base_class_offset(lv, (S3490C4*)(S3490C9*), ABISELECT(3280,2332), "S3490C12");
    /*is_ambiguous_... S3490C9::S3490C5 */ AMB_check_base_class_offset(lv, (S3490C4*)(S3490C5*)(S3490C9*), ABISELECT(3280,2332), "S3490C12");
    check_base_class_offset(lv, (S3490C4*)(S3490C3*), ABISELECT(3280,2332), "S3490C12");
    /*is_ambiguous_... S3490C12::S3490C5 */ AMB_check_base_class_offset(lv, (S3490C4*)(S3490C5*), ABISELECT(3280,2332), "S3490C12");
    /*is_ambiguous_... S3490C9::S3490C5 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C5*)(S3490C9*), ABISELECT(96,52), "S3490C12");
    /*is_ambiguous_... S3490C9::S3490C5 */ AMB_check_base_class_offset(lv, (S3490C5*)(S3490C9*), ABISELECT(96,52), "S3490C12");
    /*is_ambiguous_... S3490C9::S3490C7 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C7*)(S3490C9*), ABISELECT(3296,2348), "S3490C12");
    /*is_ambiguous_... S3490C3::S3490C6 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C3*), ABISELECT(3296,2348), "S3490C12");
    /*is_ambiguous_... S3490C12::S3490C7 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C7*), ABISELECT(3296,2348), "S3490C12");
    /*is_ambiguous_... S3490C9::S3490C7 */ AMB_check_base_class_offset(lv, (S3490C7*)(S3490C9*), ABISELECT(608,412), "S3490C12");
    /*is_ambiguous_... S3490C12::S3490C5 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C5*), ABISELECT(3408,2408), "S3490C12");
    check_base_class_offset(lv, (S3490C5*)(S3490C3*), ABISELECT(3408,2408), "S3490C12");
    check_base_class_offset(lv, (S3490C7*)(S3490C3*), ABISELECT(3920,2768), "S3490C12");
    check_base_class_offset(lv, (S3490C3*)(S3490C9*), ABISELECT(3384,2400), "S3490C12");
    check_base_class_offset(lv, (S3490C9*), 0, "S3490C12");
    check_field_offset(lv, s3490c12f0, ABISELECT(2704,1940), "S3490C12.s3490c12f0");
    set_bf_and_test(lv, s3490c12f1, ABISELECT(2712,1944), 0, 6, 1, "S3490C12");
    set_bf_and_test(lv, s3490c12f1, ABISELECT(2712,1944), 0, 6, hide_sll(1LL<<5), "S3490C12");
    check_field_offset(lv, s3490c12f2, ABISELECT(2720,1948), "S3490C12.s3490c12f2");
    check_field_offset(lv, s3490c12f3, ABISELECT(2816,2000), "S3490C12.s3490c12f3");
    check_field_offset(lv, s3490c12f4, ABISELECT(2832,2012), "S3490C12.s3490c12f4");
    check_field_offset(lv, s3490c12f5, ABISELECT(2840,2016), "S3490C12.s3490c12f5");
    check_field_offset(lv, s3490c12f6, ABISELECT(2864,2032), "S3490C12.s3490c12f6");
    check_field_offset(lv, s3490c12f7, ABISELECT(3248,2316), "S3490C12.s3490c12f7");
    check_field_offset(lv, s3490c12f8, ABISELECT(3256,2320), "S3490C12.s3490c12f8");
    check_field_offset(lv, s3490c12f9, ABISELECT(3264,2324), "S3490C12.s3490c12f9");
    test_class_info(&lv, &cd_S3490C12);
    dp->~S3490C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3490C12(Test_S3490C12, "S3490C12", ABISELECT(4208,3000));

#else // __cplusplus

extern void _ZN8S3490C12C1Ev();
extern void _ZN8S3490C12D2Ev();
Name_Map name_map_S3490C12[] = {
  NSPAIR(_ZN8S3490C12C1Ev),
  NSPAIR(_ZN8S3490C12D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3490C6;
extern VTBL_ENTRY _ZTI7S3490C6[];
extern  VTBL_ENTRY _ZTV7S3490C6[];
extern Class_Descriptor cd_S3490C4;
extern VTBL_ENTRY _ZTI7S3490C4[];
extern Class_Descriptor cd_S3490C6;
extern VTBL_ENTRY _ZTI7S3490C6[];
extern  VTBL_ENTRY _ZTV7S3490C6[];
extern Class_Descriptor cd_S3490C5;
extern VTBL_ENTRY _ZTI7S3490C5[];
extern  VTBL_ENTRY _ZTV7S3490C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C5[];
extern Class_Descriptor cd_S3490C6;
extern VTBL_ENTRY _ZTI7S3490C6[];
extern  VTBL_ENTRY _ZTV7S3490C6[];
extern Class_Descriptor cd_S3490C7;
extern VTBL_ENTRY _ZTI7S3490C7[];
extern  VTBL_ENTRY _ZTV7S3490C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C7[];
extern Class_Descriptor cd_S3490C6;
extern VTBL_ENTRY _ZTI7S3490C6[];
extern  VTBL_ENTRY _ZTV7S3490C6[];
extern Class_Descriptor cd_S3490C5;
extern VTBL_ENTRY _ZTI7S3490C5[];
extern  VTBL_ENTRY _ZTV7S3490C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C5[];
extern Class_Descriptor cd_S3490C7;
extern VTBL_ENTRY _ZTI7S3490C7[];
extern  VTBL_ENTRY _ZTV7S3490C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C7[];
extern Class_Descriptor cd_S3490C3;
extern VTBL_ENTRY _ZTI7S3490C3[];
extern  VTBL_ENTRY _ZTV7S3490C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C3[];
extern Class_Descriptor cd_S3490C9;
extern VTBL_ENTRY _ZTI7S3490C9[];
extern  VTBL_ENTRY _ZTV7S3490C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C9[];
static Base_Class bases_S3490C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3490C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S3490C4,    ABISELECT(3280,2332), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S3490C6,    ABISELECT(96,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3490C5,    ABISELECT(96,52), //bcp->offset
    12, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S3490C6,    ABISELECT(3296,2348), //bcp->offset
    20, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S3490C7,    ABISELECT(608,412), //bcp->offset
    16, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S3490C6,    ABISELECT(3408,2408), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S3490C5,    ABISELECT(3408,2408), //bcp->offset
    30, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S3490C7,    ABISELECT(3920,2768), //bcp->offset
    35, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S3490C3,    ABISELECT(3384,2400), //bcp->offset
    24, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S3490C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S3490C12[];
extern void _ZN7S3490C62v2Ev();
extern void _ZN8S3490C12D1Ev();
extern void _ZN8S3490C12D0Ev();
extern void _ZN8S3490C122v7Ev();
extern void _ZN8S3490C122v8Ev();
extern void _ZN7S3490C62v2Ev();
extern void _ZN7S3490C72v3Ev();
extern void _ZN7S3490C62v2Ev();
extern void _ZN7S3490C62v2Ev();
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY vtc_S3490C12[] = {
  ABISELECT(3920,2768),
  ABISELECT(3408,2408),
  ABISELECT(3384,2400),
  ABISELECT(3296,2348),
  ABISELECT(3280,2332),
  0,
  (VTBL_ENTRY)&(_ZTI8S3490C12[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  (VTBL_ENTRY)&_ZN8S3490C12D1Ev,
  (VTBL_ENTRY)&_ZN8S3490C12D0Ev,
  (VTBL_ENTRY)&_ZN8S3490C122v7Ev,
  (VTBL_ENTRY)&_ZN8S3490C122v8Ev,
  ABISELECT(3184,2280),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI8S3490C12[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  ABISELECT(2688,1936),
  ABISELECT(-608,-412),
  (VTBL_ENTRY)&(_ZTI8S3490C12[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
  0,
  ABISELECT(-3296,-2348),
  (VTBL_ENTRY)&(_ZTI8S3490C12[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  ABISELECT(536,368),
  ABISELECT(-88,-52),
  ABISELECT(24,8),
  ABISELECT(-104,-68),
  ABISELECT(-3384,-2400),
  (VTBL_ENTRY)&(_ZTI8S3490C12[0]),
  0,
  ABISELECT(-128,-76),
  ABISELECT(-3408,-2408),
  (VTBL_ENTRY)&(_ZTI8S3490C12[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  0,
  ABISELECT(-624,-420),
  ABISELECT(-3920,-2768),
  (VTBL_ENTRY)&(_ZTI8S3490C12[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern VTBL_ENTRY _ZTV8S3490C12[];
extern void _ZN7S3490C62v2Ev();
extern void _ZN7S3490C9D1Ev();
extern void _ZN7S3490C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C9__8S3490C12[] = {
  ABISELECT(3920,2768),
  ABISELECT(3408,2408),
  ABISELECT(3384,2400),
  ABISELECT(3296,2348),
  ABISELECT(3280,2332),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3490C9D1Ev,
  (VTBL_ENTRY)&_ZN7S3490C9D0Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C57S3490C9__8S3490C12[] = {
  ABISELECT(3184,2280),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C5[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C77S3490C9__8S3490C12[] = {
  ABISELECT(2688,1936),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C7[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C6__7S3490C77S3490C9__8S3490C12[] = {
  0,
  ABISELECT(-2688,-1936),
  (VTBL_ENTRY)&(_ZTI7S3490C7[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C5__A__7S3490C9__8S3490C12[] = {
  ABISELECT(3184,2280),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C7__A__7S3490C9__8S3490C12[] = {
  ABISELECT(2688,1936),
  ABISELECT(-608,-412),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C6__A2__7S3490C9__8S3490C12[] = {
  0,
  ABISELECT(-3296,-2348),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3490C3__7S3490C9__8S3490C12[] = {
  ABISELECT(536,368),
  ABISELECT(-88,-52),
  ABISELECT(24,8),
  ABISELECT(-104,-68),
  ABISELECT(-3384,-2400),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C5__A1__7S3490C9__8S3490C12[] = {
  0,
  ABISELECT(-128,-76),
  ABISELECT(-3408,-2408),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C7__A1__7S3490C9__8S3490C12[] = {
  0,
  ABISELECT(-624,-420),
  ABISELECT(-3920,-2768),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3490C3__8S3490C12[] = {
  ABISELECT(536,368),
  ABISELECT(-88,-52),
  ABISELECT(24,8),
  ABISELECT(-104,-68),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C3[0]),
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C5__7S3490C3__8S3490C12[] = {
  0,
  ABISELECT(-128,-76),
  ABISELECT(-24,-8),
  (VTBL_ENTRY)&(_ZTI7S3490C3[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C6__A1__7S3490C3__8S3490C12[] = {
  0,
  ABISELECT(88,52),
  (VTBL_ENTRY)&(_ZTI7S3490C3[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C7__7S3490C3__8S3490C12[] = {
  0,
  ABISELECT(-624,-420),
  ABISELECT(-536,-368),
  (VTBL_ENTRY)&(_ZTI7S3490C3[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C5__A1__8S3490C12[] = {
  ABISELECT(-128,-76),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C5[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C7__A1__8S3490C12[] = {
  ABISELECT(-624,-420),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C7[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C6__7S3490C7__A1__8S3490C12[] = {
  0,
  ABISELECT(624,420),
  (VTBL_ENTRY)&(_ZTI7S3490C7[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
static  VTT_ENTRY vtt_S3490C12[] = {
  {&(_ZTV8S3490C12[7]),  7,40},
  {&(_tg__ZTV7S3490C9__8S3490C12[7]),  7,10},
  {&(_tg__ZTV7S3490C57S3490C9__8S3490C12[3]),  3,4},
  {&(_tg__ZTV7S3490C77S3490C9__8S3490C12[3]),  3,4},
  {&(_tg__ZTV7S3490C6__7S3490C77S3490C9__8S3490C12[3]),  3,4},
  {&(_tg__ZTV7S3490C5__A__7S3490C9__8S3490C12[3]),  3,4},
  {&(_tg__ZTV7S3490C7__A__7S3490C9__8S3490C12[3]),  3,4},
  {&(_tg__ZTV7S3490C6__A2__7S3490C9__8S3490C12[3]),  3,4},
  {&(_tg__ZTV7S3490C3__7S3490C9__8S3490C12[6]),  6,6},
  {&(_tg__ZTV7S3490C5__A1__7S3490C9__8S3490C12[4]),  4,5},
  {&(_tg__ZTV7S3490C7__A1__7S3490C9__8S3490C12[4]),  4,5},
  {&(_ZTV8S3490C12[15]),  15,40},
  {&(_ZTV8S3490C12[19]),  19,40},
  {&(_ZTV8S3490C12[23]),  23,40},
  {&(_ZTV8S3490C12[30]),  30,40},
  {&(_ZTV8S3490C12[34]),  34,40},
  {&(_ZTV8S3490C12[39]),  39,40},
  {&(_tg__ZTV7S3490C3__8S3490C12[6]),  6,6},
  {&(_tg__ZTV7S3490C5__7S3490C3__8S3490C12[4]),  4,5},
  {&(_tg__ZTV7S3490C6__A1__7S3490C3__8S3490C12[3]),  3,4},
  {&(_tg__ZTV7S3490C7__7S3490C3__8S3490C12[4]),  4,5},
  {&(_tg__ZTV7S3490C5__A1__8S3490C12[3]),  3,4},
  {&(_tg__ZTV7S3490C7__A1__8S3490C12[3]),  3,4},
  {&(_tg__ZTV7S3490C6__7S3490C7__A1__8S3490C12[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S3490C12[];
extern  VTBL_ENTRY _ZTV8S3490C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3490C12[];
Class_Descriptor cd_S3490C12 = {  "S3490C12", // class name
  bases_S3490C12, 11,
  &(vtc_S3490C12[0]), // expected_vtbl_contents
  &(vtt_S3490C12[0]), // expected_vtt_contents
  ABISELECT(4208,3000), // object size
  NSPAIRA(_ZTI8S3490C12),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S3490C12),40, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3490C12),24, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3490C11  : virtual S3490C4 , virtual S3490C3 , S3490C12 , S3490C8 {
  ::S601C21_nt s3490c11f0;
  ::S3490C12 s3490c11f1;
  __tsi64 s3490c11f2;
  ~S3490C11(); // tgen
  S3490C11(); // tgen
};
//SIG(-1 S3490C11) C1{ VBC2{ m FL Fi Fc} VBC3{ VBC2 VBC4{ BC5{ v1 FD Fi:3 Fc:8 FD[2] FL} VBC2 Fc[10] Fi FC6{ VBC5 v2 FC2 FL FC2[7] Fp FL FC2 Fp Fc Fs Fi FC5} FL} VBC5 VBC6 Fp} BC7{ BC8{ BC5 VBC2 BC4 BC6 VBC3 vd FC6 FC3 Fp Fi FC5 FC6} vd v3 v4 Fp Fs:6 FC5 FD Fi FC2 FC6 Fp Fi Fp[2]} BC9{ BC3 BC8 BC4 BC5 v5 FC4[2] FC5 Fi FC2 Fp[10] Fi[2] FL FD FL Fi} FC10{} FC7 FL}


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

static void Test_S3490C11()
{
  extern Class_Descriptor cd_S3490C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(818,2320)];
    init_test(&cd_S3490C11, buf);
    S3490C11 *dp, &lv = *(dp=new (buf) S3490C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(13072,9276), "sizeof(S3490C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3490C11)");
    check_base_class_offset(lv, (S3490C4*), ABISELECT(12136,8608), "S3490C11");
    /*is_ambiguous_... S3490C11::S3490C3 */ AMB_check_base_class_offset(lv, (S3490C4*)(S3490C3*), ABISELECT(12136,8608), "S3490C11");
    /*is_ambiguous_... S3490C11::S3490C5 */ AMB_check_base_class_offset(lv, (S3490C4*)(S3490C5*), ABISELECT(12136,8608), "S3490C11");
    check_base_class_offset(lv, (S3490C4*)(S3490C9*)(S3490C12*), ABISELECT(12136,8608), "S3490C11");
    /*is_ambiguous_... S3490C9::S3490C5 */ AMB_check_base_class_offset(lv, (S3490C4*)(S3490C5*)(S3490C9*)(S3490C12*), ABISELECT(12136,8608), "S3490C11");
    /*is_ambiguous_... S3490C8::S3490C3 */ AMB_check_base_class_offset(lv, (S3490C4*)(S3490C3*)(S3490C8*), ABISELECT(12136,8608), "S3490C11");
    check_base_class_offset(lv, (S3490C4*)(S3490C9*)(S3490C8*), ABISELECT(12136,8608), "S3490C11");
    /*is_ambiguous_... S3490C9::S3490C5 */ AMB_check_base_class_offset(lv, (S3490C4*)(S3490C5*)(S3490C9*)(S3490C8*), ABISELECT(12136,8608), "S3490C11");
    /*is_ambiguous_... S3490C8::S3490C5 */ AMB_check_base_class_offset(lv, (S3490C4*)(S3490C5*)(S3490C8*), ABISELECT(12136,8608), "S3490C11");
    /*is_ambiguous_... S3490C11::S3490C5 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C5*), ABISELECT(12176,8632), "S3490C11");
    /*is_ambiguous_... S3490C11::S3490C3 */ AMB_check_base_class_offset(lv, (S3490C5*)(S3490C3*), ABISELECT(12176,8632), "S3490C11");
    /*is_ambiguous_... S3490C8::S3490C3 */ AMB_check_base_class_offset(lv, (S3490C5*)(S3490C3*)(S3490C8*), ABISELECT(12176,8632), "S3490C11");
    /*is_ambiguous_... S3490C11::S3490C3 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C3*), ABISELECT(12688,8992), "S3490C11");
    /*is_ambiguous_... S3490C11::S3490C7 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C7*), ABISELECT(12688,8992), "S3490C11");
    /*is_ambiguous_... S3490C9::S3490C7 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C7*)(S3490C9*)(S3490C12*), ABISELECT(12688,8992), "S3490C11");
    /*is_ambiguous_... S3490C8::S3490C3 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C3*)(S3490C8*), ABISELECT(12688,8992), "S3490C11");
    /*is_ambiguous_... S3490C9::S3490C7 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C7*)(S3490C9*)(S3490C8*), ABISELECT(12688,8992), "S3490C11");
    /*is_ambiguous_... S3490C11::S3490C3 */ AMB_check_base_class_offset(lv, (S3490C7*)(S3490C3*), ABISELECT(12784,9044), "S3490C11");
    /*is_ambiguous_... S3490C8::S3490C3 */ AMB_check_base_class_offset(lv, (S3490C7*)(S3490C3*)(S3490C8*), ABISELECT(12784,9044), "S3490C11");
    /*is_ambiguous_... S3490C11::S3490C3 */ AMB_check_base_class_offset(lv, (S3490C3*), ABISELECT(12152,8624), "S3490C11");
    check_base_class_offset(lv, (S3490C3*)(S3490C9*)(S3490C12*), ABISELECT(12152,8624), "S3490C11");
    check_base_class_offset(lv, (S3490C3*)(S3490C9*)(S3490C8*), ABISELECT(12152,8624), "S3490C11");
    /*is_ambiguous_... S3490C9::S3490C6 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C9*)(S3490C12*), 0, "S3490C11");
    /*is_ambiguous_... S3490C9::S3490C5 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C5*)(S3490C9*)(S3490C12*), ABISELECT(96,52), "S3490C11");
    /*is_ambiguous_... S3490C9::S3490C5 */ AMB_check_base_class_offset(lv, (S3490C5*)(S3490C9*)(S3490C12*), ABISELECT(96,52), "S3490C11");
    /*is_ambiguous_... S3490C9::S3490C7 */ AMB_check_base_class_offset(lv, (S3490C7*)(S3490C9*)(S3490C12*), ABISELECT(608,412), "S3490C11");
    check_base_class_offset(lv, (S3490C9*)(S3490C12*), 0, "S3490C11");
    check_base_class_offset(lv, (S3490C12*), 0, "S3490C11");
    /*is_ambiguous_... S3490C8::S3490C3 */ AMB_check_base_class_offset(lv, (S3490C3*)(S3490C8*), ABISELECT(3280,2332), "S3490C11");
    /*is_ambiguous_... S3490C9::S3490C6 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C9*)(S3490C8*), ABISELECT(3296,2340), "S3490C11");
    /*is_ambiguous_... S3490C9::S3490C5 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C5*)(S3490C9*)(S3490C8*), ABISELECT(3392,2392), "S3490C11");
    /*is_ambiguous_... S3490C9::S3490C5 */ AMB_check_base_class_offset(lv, (S3490C5*)(S3490C9*)(S3490C8*), ABISELECT(3392,2392), "S3490C11");
    /*is_ambiguous_... S3490C9::S3490C7 */ AMB_check_base_class_offset(lv, (S3490C7*)(S3490C9*)(S3490C8*), ABISELECT(3904,2752), "S3490C11");
    check_base_class_offset(lv, (S3490C9*)(S3490C8*), ABISELECT(3296,2340), "S3490C11");
    /*is_ambiguous_... S3490C8::S3490C5 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C5*)(S3490C8*), ABISELECT(6000,4280), "S3490C11");
    /*is_ambiguous_... S3490C8::S3490C5 */ AMB_check_base_class_offset(lv, (S3490C5*)(S3490C8*), ABISELECT(6000,4280), "S3490C11");
    /*is_ambiguous_... S3490C8::S3490C6 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C8*), ABISELECT(6512,4640), "S3490C11");
    check_base_class_offset(lv, (S3490C8*), ABISELECT(3280,2332), "S3490C11");
    check_field_offset(lv, s3490c11f0, ABISELECT(7916,5596), "S3490C11.s3490c11f0");
    check_field_offset(lv, s3490c11f1, ABISELECT(7920,5600), "S3490C11.s3490c11f1");
    check_field_offset(lv, s3490c11f2, ABISELECT(12128,8600), "S3490C11.s3490c11f2");
    test_class_info(&lv, &cd_S3490C11);
    dp->~S3490C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3490C11(Test_S3490C11, "S3490C11", ABISELECT(13072,9276));

#else // __cplusplus

extern void _ZN8S3490C11C1Ev();
extern void _ZN8S3490C11D1Ev();
Name_Map name_map_S3490C11[] = {
  NSPAIR(_ZN8S3490C11C1Ev),
  NSPAIR(_ZN8S3490C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3490C4;
extern VTBL_ENTRY _ZTI7S3490C4[];
extern Class_Descriptor cd_S3490C6;
extern VTBL_ENTRY _ZTI7S3490C6[];
extern  VTBL_ENTRY _ZTV7S3490C6[];
extern Class_Descriptor cd_S3490C5;
extern VTBL_ENTRY _ZTI7S3490C5[];
extern  VTBL_ENTRY _ZTV7S3490C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C5[];
extern Class_Descriptor cd_S3490C6;
extern VTBL_ENTRY _ZTI7S3490C6[];
extern  VTBL_ENTRY _ZTV7S3490C6[];
extern Class_Descriptor cd_S3490C7;
extern VTBL_ENTRY _ZTI7S3490C7[];
extern  VTBL_ENTRY _ZTV7S3490C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C7[];
extern Class_Descriptor cd_S3490C3;
extern VTBL_ENTRY _ZTI7S3490C3[];
extern  VTBL_ENTRY _ZTV7S3490C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C3[];
extern Class_Descriptor cd_S3490C6;
extern VTBL_ENTRY _ZTI7S3490C6[];
extern  VTBL_ENTRY _ZTV7S3490C6[];
extern Class_Descriptor cd_S3490C6;
extern VTBL_ENTRY _ZTI7S3490C6[];
extern  VTBL_ENTRY _ZTV7S3490C6[];
extern Class_Descriptor cd_S3490C5;
extern VTBL_ENTRY _ZTI7S3490C5[];
extern  VTBL_ENTRY _ZTV7S3490C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C5[];
extern Class_Descriptor cd_S3490C7;
extern VTBL_ENTRY _ZTI7S3490C7[];
extern  VTBL_ENTRY _ZTV7S3490C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C7[];
extern Class_Descriptor cd_S3490C9;
extern VTBL_ENTRY _ZTI7S3490C9[];
extern  VTBL_ENTRY _ZTV7S3490C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C9[];
extern Class_Descriptor cd_S3490C12;
extern VTBL_ENTRY _ZTI8S3490C12[];
extern  VTBL_ENTRY _ZTV8S3490C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3490C12[];
extern Class_Descriptor cd_S3490C3;
extern VTBL_ENTRY _ZTI7S3490C3[];
extern  VTBL_ENTRY _ZTV7S3490C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C3[];
extern Class_Descriptor cd_S3490C6;
extern VTBL_ENTRY _ZTI7S3490C6[];
extern  VTBL_ENTRY _ZTV7S3490C6[];
extern Class_Descriptor cd_S3490C6;
extern VTBL_ENTRY _ZTI7S3490C6[];
extern  VTBL_ENTRY _ZTV7S3490C6[];
extern Class_Descriptor cd_S3490C5;
extern VTBL_ENTRY _ZTI7S3490C5[];
extern  VTBL_ENTRY _ZTV7S3490C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C5[];
extern Class_Descriptor cd_S3490C7;
extern VTBL_ENTRY _ZTI7S3490C7[];
extern  VTBL_ENTRY _ZTV7S3490C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C7[];
extern Class_Descriptor cd_S3490C9;
extern VTBL_ENTRY _ZTI7S3490C9[];
extern  VTBL_ENTRY _ZTV7S3490C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C9[];
extern Class_Descriptor cd_S3490C6;
extern VTBL_ENTRY _ZTI7S3490C6[];
extern  VTBL_ENTRY _ZTV7S3490C6[];
extern Class_Descriptor cd_S3490C5;
extern VTBL_ENTRY _ZTI7S3490C5[];
extern  VTBL_ENTRY _ZTV7S3490C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C5[];
extern Class_Descriptor cd_S3490C6;
extern VTBL_ENTRY _ZTI7S3490C6[];
extern  VTBL_ENTRY _ZTV7S3490C6[];
extern Class_Descriptor cd_S3490C8;
extern VTBL_ENTRY _ZTI7S3490C8[];
extern  VTBL_ENTRY _ZTV7S3490C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C8[];
static Base_Class bases_S3490C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3490C4,    ABISELECT(12136,8608), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S3490C6,    ABISELECT(12176,8632), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3490C5,    ABISELECT(12176,8632), //bcp->offset
    61, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    44, //bcp->index_in_construction_vtbl_array
    58, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S3490C6,    ABISELECT(12688,8992), //bcp->offset
    66, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    45, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S3490C7,    ABISELECT(12784,9044), //bcp->offset
    70, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    46, //bcp->index_in_construction_vtbl_array
    59, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S3490C3,    ABISELECT(12152,8624), //bcp->offset
    55, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    43, //bcp->index_in_construction_vtbl_array
    54, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3490C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S3490C6,    ABISELECT(96,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S3490C5,    ABISELECT(96,52), //bcp->offset
    12, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    47, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S3490C7,    ABISELECT(608,412), //bcp->offset
    16, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    48, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S3490C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S3490C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3490C3,    ABISELECT(3280,2332), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S3490C6,    ABISELECT(3296,2340), //bcp->offset
    -1, //bcp->virtual_function_table_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
    17, //immediately_derived
  0, 0},
  {&cd_S3490C6,    ABISELECT(3392,2392), //bcp->offset
    -1, //bcp->virtual_function_table_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
    15, //immediately_derived
  0, 0},
  {&cd_S3490C5,    ABISELECT(3392,2392), //bcp->offset
    40, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    51, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S3490C7,    ABISELECT(3904,2752), //bcp->offset
    44, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    52, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S3490C9,    ABISELECT(3296,2340), //bcp->offset
    30, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    50, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S3490C6,    ABISELECT(6000,4280), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S3490C5,    ABISELECT(6000,4280), //bcp->offset
    48, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    53, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S3490C6,    ABISELECT(6512,4640), //bcp->offset
    52, //bcp->virtual_function_table_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
    21, //immediately_derived
  0, 0},
  {&cd_S3490C8,    ABISELECT(3280,2332), //bcp->offset
    20, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    49, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S3490C11[];
extern void _ZN7S3490C62v2Ev();
extern void _ZN8S3490C11D1Ev();
extern void _ZN8S3490C11D0Ev();
extern void _ZN8S3490C122v7Ev();
extern void _ZN8S3490C122v8Ev();
extern void _ZN7S3490C62v2Ev();
extern void _ZN7S3490C72v3Ev();
extern void _ZN7S3490C82v4Ev();
extern void ABISELECT(_ZThn3280_N8S3490C11D1Ev,_ZThn2332_N8S3490C11D1Ev)();
extern void ABISELECT(_ZThn3280_N8S3490C11D0Ev,_ZThn2332_N8S3490C11D0Ev)();
extern void _ZN7S3490C62v2Ev();
extern void ABISELECT(_ZThn3296_N8S3490C11D1Ev,_ZThn2340_N8S3490C11D1Ev)();
extern void ABISELECT(_ZThn3296_N8S3490C11D0Ev,_ZThn2340_N8S3490C11D0Ev)();
extern void _ZN7S3490C62v2Ev();
extern void _ZN7S3490C72v3Ev();
extern void _ZN7S3490C62v2Ev();
extern void _ZN7S3490C62v2Ev();
extern void _ZN7S3490C62v2Ev();
extern void _ZN7S3490C62v2Ev();
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY vtc_S3490C11[] = {
  ABISELECT(12784,9044),
  ABISELECT(12176,8632),
  ABISELECT(12152,8624),
  ABISELECT(12688,8992),
  ABISELECT(12136,8608),
  0,
  (VTBL_ENTRY)&(_ZTI8S3490C11[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  (VTBL_ENTRY)&_ZN8S3490C11D1Ev,
  (VTBL_ENTRY)&_ZN8S3490C11D0Ev,
  (VTBL_ENTRY)&_ZN8S3490C122v7Ev,
  (VTBL_ENTRY)&_ZN8S3490C122v8Ev,
  ABISELECT(12040,8556),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI8S3490C11[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  ABISELECT(12080,8580),
  ABISELECT(-608,-412),
  (VTBL_ENTRY)&(_ZTI8S3490C11[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
  ABISELECT(8872,6292),
  ABISELECT(9504,6712),
  ABISELECT(9408,6660),
  ABISELECT(8896,6300),
  ABISELECT(8856,6276),
  ABISELECT(-3280,-2332),
  (VTBL_ENTRY)&(_ZTI8S3490C11[0]),
  (VTBL_ENTRY)&_ZN7S3490C82v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn3280_N8S3490C11D1Ev,_ZThn2332_N8S3490C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn3280_N8S3490C11D0Ev,_ZThn2332_N8S3490C11D0Ev),
  ABISELECT(9488,6704),
  ABISELECT(8880,6292),
  ABISELECT(8856,6284),
  ABISELECT(9392,6652),
  ABISELECT(8840,6268),
  ABISELECT(-3296,-2340),
  (VTBL_ENTRY)&(_ZTI8S3490C11[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn3296_N8S3490C11D1Ev,_ZThn2340_N8S3490C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn3296_N8S3490C11D0Ev,_ZThn2340_N8S3490C11D0Ev),
  ABISELECT(8744,6216),
  ABISELECT(-3392,-2392),
  (VTBL_ENTRY)&(_ZTI8S3490C11[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  ABISELECT(8784,6240),
  ABISELECT(-3904,-2752),
  (VTBL_ENTRY)&(_ZTI8S3490C11[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
  ABISELECT(6136,4328),
  ABISELECT(-6000,-4280),
  (VTBL_ENTRY)&(_ZTI8S3490C11[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  ABISELECT(-6512,-4640),
  (VTBL_ENTRY)&(_ZTI8S3490C11[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  ABISELECT(632,420),
  ABISELECT(536,368),
  ABISELECT(24,8),
  -16,
  ABISELECT(-12152,-8624),
  (VTBL_ENTRY)&(_ZTI8S3490C11[0]),
  0,
  ABISELECT(-40,-24),
  ABISELECT(-12176,-8632),
  (VTBL_ENTRY)&(_ZTI8S3490C11[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  0,
  ABISELECT(-12688,-8992),
  (VTBL_ENTRY)&(_ZTI8S3490C11[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  0,
  ABISELECT(-96,-52),
  ABISELECT(-12784,-9044),
  (VTBL_ENTRY)&(_ZTI8S3490C11[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern VTBL_ENTRY _ZTV8S3490C11[];
extern void _ZN7S3490C62v2Ev();
extern void _ZN8S3490C12D1Ev();
extern void _ZN8S3490C12D0Ev();
extern void _ZN8S3490C122v7Ev();
extern void _ZN8S3490C122v8Ev();
static  VTBL_ENTRY _tg__ZTV8S3490C12__8S3490C11[] = {
  ABISELECT(12784,9044),
  ABISELECT(12176,8632),
  ABISELECT(12152,8624),
  ABISELECT(12688,8992),
  ABISELECT(12136,8608),
  0,
  (VTBL_ENTRY)&(_ZTI8S3490C12[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  (VTBL_ENTRY)&_ZN8S3490C12D1Ev,
  (VTBL_ENTRY)&_ZN8S3490C12D0Ev,
  (VTBL_ENTRY)&_ZN8S3490C122v7Ev,
  (VTBL_ENTRY)&_ZN8S3490C122v8Ev,
};
extern void _ZN7S3490C62v2Ev();
extern void _ZN7S3490C9D1Ev();
extern void _ZN7S3490C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C98S3490C12__8S3490C11[] = {
  ABISELECT(12784,9044),
  ABISELECT(12176,8632),
  ABISELECT(12152,8624),
  ABISELECT(12688,8992),
  ABISELECT(12136,8608),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3490C9D1Ev,
  (VTBL_ENTRY)&_ZN7S3490C9D0Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C57S3490C98S3490C12__A1__8S3490C11[] = {
  ABISELECT(12040,8556),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C5[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C77S3490C98S3490C12__A1__8S3490C11[] = {
  ABISELECT(12080,8580),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C7[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C6__7S3490C77S3490C98S3490C12__A1__8S3490C11[] = {
  0,
  ABISELECT(-12080,-8580),
  (VTBL_ENTRY)&(_ZTI7S3490C7[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C5__A__7S3490C98S3490C12__8S3490C11[] = {
  ABISELECT(12040,8556),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C7__A__7S3490C98S3490C12__8S3490C11[] = {
  ABISELECT(12080,8580),
  ABISELECT(-608,-412),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C6__A2__7S3490C98S3490C12__8S3490C11[] = {
  0,
  ABISELECT(-12688,-8992),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3490C3__7S3490C98S3490C12__8S3490C11[] = {
  ABISELECT(632,420),
  ABISELECT(536,368),
  ABISELECT(24,8),
  -16,
  ABISELECT(-12152,-8624),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C5__A1__7S3490C98S3490C12__8S3490C11[] = {
  0,
  ABISELECT(-40,-24),
  ABISELECT(-12176,-8632),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C7__A1__7S3490C98S3490C12__8S3490C11[] = {
  0,
  ABISELECT(-96,-52),
  ABISELECT(-12784,-9044),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C57S3490C9__8S3490C12__8S3490C11[] = {
  ABISELECT(12040,8556),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI8S3490C12[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C77S3490C9__8S3490C12__8S3490C11[] = {
  ABISELECT(12080,8580),
  ABISELECT(-608,-412),
  (VTBL_ENTRY)&(_ZTI8S3490C12[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C6__A2__8S3490C12__8S3490C11[] = {
  0,
  ABISELECT(-12688,-8992),
  (VTBL_ENTRY)&(_ZTI8S3490C12[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3490C3__8S3490C12__8S3490C11[] = {
  ABISELECT(632,420),
  ABISELECT(536,368),
  ABISELECT(24,8),
  -16,
  ABISELECT(-12152,-8624),
  (VTBL_ENTRY)&(_ZTI8S3490C12[0]),
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C5__A1__8S3490C12__8S3490C11[] = {
  0,
  ABISELECT(-40,-24),
  ABISELECT(-12176,-8632),
  (VTBL_ENTRY)&(_ZTI8S3490C12[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C7__A1__8S3490C12__8S3490C11[] = {
  0,
  ABISELECT(-96,-52),
  ABISELECT(-12784,-9044),
  (VTBL_ENTRY)&(_ZTI8S3490C12[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C82v4Ev();
extern void _ZN7S3490C8D1Ev();
extern void _ZN7S3490C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C8__8S3490C11[] = {
  ABISELECT(8872,6292),
  ABISELECT(9504,6712),
  ABISELECT(9408,6660),
  ABISELECT(8896,6300),
  ABISELECT(8856,6276),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C8[0]),
  (VTBL_ENTRY)&_ZN7S3490C82v4Ev,
  (VTBL_ENTRY)&_ZN7S3490C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3490C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3490C37S3490C8__A1__8S3490C11[] = {
  ABISELECT(9504,6712),
  ABISELECT(9408,6660),
  ABISELECT(8896,6300),
  ABISELECT(8856,6276),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C3[0]),
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C5__7S3490C37S3490C8__A1__8S3490C11[] = {
  0,
  ABISELECT(-40,-24),
  ABISELECT(-8896,-6300),
  (VTBL_ENTRY)&(_ZTI7S3490C3[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C6__A1__7S3490C37S3490C8__A1__8S3490C11[] = {
  0,
  ABISELECT(-9408,-6660),
  (VTBL_ENTRY)&(_ZTI7S3490C3[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C7__7S3490C37S3490C8__A1__8S3490C11[] = {
  0,
  ABISELECT(-96,-52),
  ABISELECT(-9504,-6712),
  (VTBL_ENTRY)&(_ZTI7S3490C3[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C62v2Ev();
extern void _ZN7S3490C9D1Ev();
extern void _ZN7S3490C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C97S3490C8__A1__8S3490C11[] = {
  ABISELECT(9488,6704),
  ABISELECT(8880,6292),
  ABISELECT(8856,6284),
  ABISELECT(9392,6652),
  ABISELECT(8840,6268),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3490C9D1Ev,
  (VTBL_ENTRY)&_ZN7S3490C9D0Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C57S3490C97S3490C8__A2__8S3490C11[] = {
  ABISELECT(8744,6216),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C5[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C77S3490C97S3490C8__A2__8S3490C11[] = {
  ABISELECT(8784,6240),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C7[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C6__7S3490C77S3490C97S3490C8__A2__8S3490C11[] = {
  0,
  ABISELECT(-8784,-6240),
  (VTBL_ENTRY)&(_ZTI7S3490C7[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C5__A__7S3490C97S3490C8__A1__8S3490C11[] = {
  ABISELECT(8744,6216),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C7__A__7S3490C97S3490C8__A1__8S3490C11[] = {
  ABISELECT(8784,6240),
  ABISELECT(-608,-412),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C6__A2__7S3490C97S3490C8__A1__8S3490C11[] = {
  0,
  ABISELECT(-9392,-6652),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3490C3__7S3490C97S3490C8__A1__8S3490C11[] = {
  ABISELECT(632,420),
  ABISELECT(536,368),
  ABISELECT(24,8),
  -16,
  ABISELECT(-8856,-6284),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C5__A1__7S3490C97S3490C8__A1__8S3490C11[] = {
  0,
  ABISELECT(-40,-24),
  ABISELECT(-8880,-6292),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C7__A1__7S3490C97S3490C8__A1__8S3490C11[] = {
  0,
  ABISELECT(-96,-52),
  ABISELECT(-9488,-6704),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C57S3490C8__A3__8S3490C11[] = {
  ABISELECT(6136,4328),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C5[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C5__7S3490C8__8S3490C11[] = {
  0,
  ABISELECT(-40,-24),
  ABISELECT(-8896,-6300),
  (VTBL_ENTRY)&(_ZTI7S3490C8[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C6__A1__7S3490C8__8S3490C11[] = {
  0,
  ABISELECT(-9408,-6660),
  (VTBL_ENTRY)&(_ZTI7S3490C8[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C7__7S3490C8__8S3490C11[] = {
  0,
  ABISELECT(-96,-52),
  ABISELECT(-9504,-6712),
  (VTBL_ENTRY)&(_ZTI7S3490C8[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C62v2Ev();
extern void ABISELECT(_ZThn16_N7S3490C8D1Ev,_ZThn8_N7S3490C8D1Ev)();
extern void ABISELECT(_ZThn16_N7S3490C8D0Ev,_ZThn8_N7S3490C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3490C9__7S3490C8__8S3490C11[] = {
  ABISELECT(9488,6704),
  ABISELECT(8880,6292),
  ABISELECT(8856,6284),
  ABISELECT(9392,6652),
  ABISELECT(8840,6268),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S3490C8[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S3490C8D1Ev,_ZThn8_N7S3490C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S3490C8D0Ev,_ZThn8_N7S3490C8D0Ev),
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C57S3490C9__A1__7S3490C8__8S3490C11[] = {
  ABISELECT(8744,6216),
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI7S3490C8[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C77S3490C9__A1__7S3490C8__8S3490C11[] = {
  ABISELECT(8784,6240),
  ABISELECT(-624,-420),
  (VTBL_ENTRY)&(_ZTI7S3490C8[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3490C3__A1__7S3490C8__8S3490C11[] = {
  ABISELECT(632,420),
  ABISELECT(536,368),
  ABISELECT(24,8),
  -16,
  ABISELECT(-8872,-6292),
  (VTBL_ENTRY)&(_ZTI7S3490C8[0]),
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C5__A__7S3490C8__8S3490C11[] = {
  ABISELECT(6136,4328),
  ABISELECT(-2720,-1948),
  (VTBL_ENTRY)&(_ZTI7S3490C8[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3490C3__8S3490C11[] = {
  ABISELECT(632,420),
  ABISELECT(536,368),
  ABISELECT(24,8),
  -16,
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C3[0]),
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C5__7S3490C3__8S3490C11[] = {
  0,
  ABISELECT(-40,-24),
  ABISELECT(-24,-8),
  (VTBL_ENTRY)&(_ZTI7S3490C3[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C6__A1__7S3490C3__8S3490C11[] = {
  0,
  ABISELECT(-536,-368),
  (VTBL_ENTRY)&(_ZTI7S3490C3[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C7__7S3490C3__8S3490C11[] = {
  0,
  ABISELECT(-96,-52),
  ABISELECT(-632,-420),
  (VTBL_ENTRY)&(_ZTI7S3490C3[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C5__8S3490C11[] = {
  ABISELECT(-40,-24),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C5[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C7__8S3490C11[] = {
  ABISELECT(-96,-52),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C7[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C6__7S3490C7__8S3490C11[] = {
  0,
  ABISELECT(96,52),
  (VTBL_ENTRY)&(_ZTI7S3490C7[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
static  VTT_ENTRY vtt_S3490C11[] = {
  {&(_ZTV8S3490C11[7]),  7,75},
  {&(_tg__ZTV8S3490C12__8S3490C11[7]),  7,12},
  {&(_tg__ZTV7S3490C98S3490C12__8S3490C11[7]),  7,10},
  {&(_tg__ZTV7S3490C57S3490C98S3490C12__A1__8S3490C11[3]),  3,4},
  {&(_tg__ZTV7S3490C77S3490C98S3490C12__A1__8S3490C11[3]),  3,4},
  {&(_tg__ZTV7S3490C6__7S3490C77S3490C98S3490C12__A1__8S3490C11[3]),  3,4},
  {&(_tg__ZTV7S3490C5__A__7S3490C98S3490C12__8S3490C11[3]),  3,4},
  {&(_tg__ZTV7S3490C7__A__7S3490C98S3490C12__8S3490C11[3]),  3,4},
  {&(_tg__ZTV7S3490C6__A2__7S3490C98S3490C12__8S3490C11[3]),  3,4},
  {&(_tg__ZTV7S3490C3__7S3490C98S3490C12__8S3490C11[6]),  6,6},
  {&(_tg__ZTV7S3490C5__A1__7S3490C98S3490C12__8S3490C11[4]),  4,5},
  {&(_tg__ZTV7S3490C7__A1__7S3490C98S3490C12__8S3490C11[4]),  4,5},
  {&(_tg__ZTV7S3490C57S3490C9__8S3490C12__8S3490C11[3]),  3,4},
  {&(_tg__ZTV7S3490C77S3490C9__8S3490C12__8S3490C11[3]),  3,4},
  {&(_tg__ZTV7S3490C6__A2__8S3490C12__8S3490C11[3]),  3,4},
  {&(_tg__ZTV7S3490C3__8S3490C12__8S3490C11[6]),  6,6},
  {&(_tg__ZTV7S3490C5__A1__8S3490C12__8S3490C11[4]),  4,5},
  {&(_tg__ZTV7S3490C7__A1__8S3490C12__8S3490C11[4]),  4,5},
  {&(_tg__ZTV7S3490C8__8S3490C11[7]),  7,10},
  {&(_tg__ZTV7S3490C37S3490C8__A1__8S3490C11[6]),  6,6},
  {&(_tg__ZTV7S3490C5__7S3490C37S3490C8__A1__8S3490C11[4]),  4,5},
  {&(_tg__ZTV7S3490C6__A1__7S3490C37S3490C8__A1__8S3490C11[3]),  3,4},
  {&(_tg__ZTV7S3490C7__7S3490C37S3490C8__A1__8S3490C11[4]),  4,5},
  {&(_tg__ZTV7S3490C97S3490C8__A1__8S3490C11[7]),  7,10},
  {&(_tg__ZTV7S3490C57S3490C97S3490C8__A2__8S3490C11[3]),  3,4},
  {&(_tg__ZTV7S3490C77S3490C97S3490C8__A2__8S3490C11[3]),  3,4},
  {&(_tg__ZTV7S3490C6__7S3490C77S3490C97S3490C8__A2__8S3490C11[3]),  3,4},
  {&(_tg__ZTV7S3490C5__A__7S3490C97S3490C8__A1__8S3490C11[3]),  3,4},
  {&(_tg__ZTV7S3490C7__A__7S3490C97S3490C8__A1__8S3490C11[3]),  3,4},
  {&(_tg__ZTV7S3490C6__A2__7S3490C97S3490C8__A1__8S3490C11[3]),  3,4},
  {&(_tg__ZTV7S3490C3__7S3490C97S3490C8__A1__8S3490C11[6]),  6,6},
  {&(_tg__ZTV7S3490C5__A1__7S3490C97S3490C8__A1__8S3490C11[4]),  4,5},
  {&(_tg__ZTV7S3490C7__A1__7S3490C97S3490C8__A1__8S3490C11[4]),  4,5},
  {&(_tg__ZTV7S3490C57S3490C8__A3__8S3490C11[3]),  3,4},
  {&(_tg__ZTV7S3490C5__7S3490C8__8S3490C11[4]),  4,5},
  {&(_tg__ZTV7S3490C6__A1__7S3490C8__8S3490C11[3]),  3,4},
  {&(_tg__ZTV7S3490C7__7S3490C8__8S3490C11[4]),  4,5},
  {&(_tg__ZTV7S3490C9__7S3490C8__8S3490C11[7]),  7,10},
  {&(_tg__ZTV7S3490C57S3490C9__A1__7S3490C8__8S3490C11[3]),  3,4},
  {&(_tg__ZTV7S3490C77S3490C9__A1__7S3490C8__8S3490C11[3]),  3,4},
  {&(_tg__ZTV7S3490C3__A1__7S3490C8__8S3490C11[6]),  6,6},
  {&(_tg__ZTV7S3490C5__A__7S3490C8__8S3490C11[3]),  3,4},
  {&(_ZTV8S3490C11[61]),  61,75},
  {&(_ZTV8S3490C11[65]),  65,75},
  {&(_ZTV8S3490C11[69]),  69,75},
  {&(_ZTV8S3490C11[74]),  74,75},
  {&(_ZTV8S3490C11[15]),  15,75},
  {&(_ZTV8S3490C11[19]),  19,75},
  {&(_ZTV8S3490C11[27]),  27,75},
  {&(_ZTV8S3490C11[37]),  37,75},
  {&(_ZTV8S3490C11[43]),  43,75},
  {&(_ZTV8S3490C11[47]),  47,75},
  {&(_ZTV8S3490C11[51]),  51,75},
  {&(_tg__ZTV7S3490C3__8S3490C11[6]),  6,6},
  {&(_tg__ZTV7S3490C5__7S3490C3__8S3490C11[4]),  4,5},
  {&(_tg__ZTV7S3490C6__A1__7S3490C3__8S3490C11[3]),  3,4},
  {&(_tg__ZTV7S3490C7__7S3490C3__8S3490C11[4]),  4,5},
  {&(_tg__ZTV7S3490C5__8S3490C11[3]),  3,4},
  {&(_tg__ZTV7S3490C7__8S3490C11[3]),  3,4},
  {&(_tg__ZTV7S3490C6__7S3490C7__8S3490C11[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S3490C11[];
extern  VTBL_ENTRY _ZTV8S3490C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3490C11[];
Class_Descriptor cd_S3490C11 = {  "S3490C11", // class name
  bases_S3490C11, 22,
  &(vtc_S3490C11[0]), // expected_vtbl_contents
  &(vtt_S3490C11[0]), // expected_vtt_contents
  ABISELECT(13072,9276), // object size
  NSPAIRA(_ZTI8S3490C11),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S3490C11),75, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3490C11),60, //virtual table table var
  21, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3490C14  : virtual S3490C3 , S3490C9 , S3490C12 {
  int s3490c14f0;
  char s3490c14f1;
  void *s3490c14f2;
  long s3490c14f3;
  virtual void  v9(); // _ZN8S3490C142v9Ev
  ~S3490C14(); // tgen
  S3490C14(); // tgen
};
//SIG(-1 S3490C14) C1{ VBC2{ VBC3{ m FL Fi Fc} VBC4{ BC5{ v2 FD Fi:3 Fc:8 FD[2] FL} VBC3 Fc[10] Fi FC6{ VBC5 v3 FC3 FL FC3[7] Fp FL FC3 Fp Fc Fs Fi FC5} FL} VBC5 VBC6 Fp} BC7{ BC5 VBC3 BC4 BC6 VBC2 vd FC6 FC2 Fp Fi FC5 FC6} BC8{ BC7 vd v4 v5 Fp Fs:6 FC5 FD Fi FC3 FC6 Fp Fi Fp[2]} v1 Fi Fc Fp Fl}


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

static void Test_S3490C14()
{
  extern Class_Descriptor cd_S3490C14;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(435,1240)];
    init_test(&cd_S3490C14, buf);
    S3490C14 *dp, &lv = *(dp=new (buf) S3490C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(6944,4956), "sizeof(S3490C14)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3490C14)");
    check_base_class_offset(lv, (S3490C4*)(S3490C3*), ABISELECT(6024,4296), "S3490C14");
    /*is_ambiguous_... S3490C14::S3490C5 */ AMB_check_base_class_offset(lv, (S3490C4*)(S3490C5*), ABISELECT(6024,4296), "S3490C14");
    /*is_ambiguous_... S3490C14::S3490C9 */ AMB_check_base_class_offset(lv, (S3490C4*)(S3490C9*), ABISELECT(6024,4296), "S3490C14");
    /*is_ambiguous_... S3490C14::S3490C9 */ AMB_check_base_class_offset(lv, (S3490C4*)(S3490C5*)(S3490C9*), ABISELECT(6024,4296), "S3490C14");
    check_base_class_offset(lv, (S3490C4*)(S3490C9*)(S3490C12*), ABISELECT(6024,4296), "S3490C14");
    /*is_ambiguous_... S3490C9::S3490C5 */ AMB_check_base_class_offset(lv, (S3490C4*)(S3490C5*)(S3490C9*)(S3490C12*), ABISELECT(6024,4296), "S3490C14");
    /*is_ambiguous_... S3490C14::S3490C5 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C5*), ABISELECT(6048,4312), "S3490C14");
    check_base_class_offset(lv, (S3490C5*)(S3490C3*), ABISELECT(6048,4312), "S3490C14");
    /*is_ambiguous_... S3490C3::S3490C6 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C3*), ABISELECT(6560,4672), "S3490C14");
    /*is_ambiguous_... S3490C14::S3490C7 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C7*), ABISELECT(6560,4672), "S3490C14");
    /*is_ambiguous_... S3490C14::S3490C9 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C7*)(S3490C9*), ABISELECT(6560,4672), "S3490C14");
    /*is_ambiguous_... S3490C9::S3490C7 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C7*)(S3490C9*)(S3490C12*), ABISELECT(6560,4672), "S3490C14");
    check_base_class_offset(lv, (S3490C7*)(S3490C3*), ABISELECT(6656,4724), "S3490C14");
    check_base_class_offset(lv, (S3490C3*), ABISELECT(6008,4288), "S3490C14");
    /*is_ambiguous_... S3490C14::S3490C9 */ AMB_check_base_class_offset(lv, (S3490C3*)(S3490C9*), ABISELECT(6008,4288), "S3490C14");
    check_base_class_offset(lv, (S3490C3*)(S3490C9*)(S3490C12*), ABISELECT(6008,4288), "S3490C14");
    /*is_ambiguous_... S3490C14::S3490C9 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C9*), 0, "S3490C14");
    /*is_ambiguous_... S3490C14::S3490C9 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C5*)(S3490C9*), ABISELECT(96,52), "S3490C14");
    /*is_ambiguous_... S3490C14::S3490C9 */ AMB_check_base_class_offset(lv, (S3490C5*)(S3490C9*), ABISELECT(96,52), "S3490C14");
    /*is_ambiguous_... S3490C14::S3490C9 */ AMB_check_base_class_offset(lv, (S3490C7*)(S3490C9*), ABISELECT(608,412), "S3490C14");
    /*is_ambiguous_... S3490C14::S3490C9 */ AMB_check_base_class_offset(lv, (S3490C9*), 0, "S3490C14");
    /*is_ambiguous_... S3490C9::S3490C6 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C9*)(S3490C12*), ABISELECT(2704,1940), "S3490C14");
    /*is_ambiguous_... S3490C9::S3490C5 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C5*)(S3490C9*)(S3490C12*), ABISELECT(2800,1992), "S3490C14");
    /*is_ambiguous_... S3490C9::S3490C5 */ AMB_check_base_class_offset(lv, (S3490C5*)(S3490C9*)(S3490C12*), ABISELECT(2800,1992), "S3490C14");
    /*is_ambiguous_... S3490C9::S3490C7 */ AMB_check_base_class_offset(lv, (S3490C7*)(S3490C9*)(S3490C12*), ABISELECT(3312,2352), "S3490C14");
    check_base_class_offset(lv, (S3490C9*)(S3490C12*), ABISELECT(2704,1940), "S3490C14");
    check_base_class_offset(lv, (S3490C12*), ABISELECT(2704,1940), "S3490C14");
    check_field_offset(lv, s3490c14f0, ABISELECT(5984,4272), "S3490C14.s3490c14f0");
    check_field_offset(lv, s3490c14f1, ABISELECT(5988,4276), "S3490C14.s3490c14f1");
    check_field_offset(lv, s3490c14f2, ABISELECT(5992,4280), "S3490C14.s3490c14f2");
    check_field_offset(lv, s3490c14f3, ABISELECT(6000,4284), "S3490C14.s3490c14f3");
    test_class_info(&lv, &cd_S3490C14);
    dp->~S3490C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3490C14(Test_S3490C14, "S3490C14", ABISELECT(6944,4956));

#else // __cplusplus

extern void _ZN8S3490C14C1Ev();
extern void _ZN8S3490C14D1Ev();
Name_Map name_map_S3490C14[] = {
  NSPAIR(_ZN8S3490C14C1Ev),
  NSPAIR(_ZN8S3490C14D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3490C4;
extern VTBL_ENTRY _ZTI7S3490C4[];
extern Class_Descriptor cd_S3490C6;
extern VTBL_ENTRY _ZTI7S3490C6[];
extern  VTBL_ENTRY _ZTV7S3490C6[];
extern Class_Descriptor cd_S3490C5;
extern VTBL_ENTRY _ZTI7S3490C5[];
extern  VTBL_ENTRY _ZTV7S3490C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C5[];
extern Class_Descriptor cd_S3490C6;
extern VTBL_ENTRY _ZTI7S3490C6[];
extern  VTBL_ENTRY _ZTV7S3490C6[];
extern Class_Descriptor cd_S3490C7;
extern VTBL_ENTRY _ZTI7S3490C7[];
extern  VTBL_ENTRY _ZTV7S3490C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C7[];
extern Class_Descriptor cd_S3490C3;
extern VTBL_ENTRY _ZTI7S3490C3[];
extern  VTBL_ENTRY _ZTV7S3490C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C3[];
extern Class_Descriptor cd_S3490C6;
extern VTBL_ENTRY _ZTI7S3490C6[];
extern  VTBL_ENTRY _ZTV7S3490C6[];
extern Class_Descriptor cd_S3490C6;
extern VTBL_ENTRY _ZTI7S3490C6[];
extern  VTBL_ENTRY _ZTV7S3490C6[];
extern Class_Descriptor cd_S3490C5;
extern VTBL_ENTRY _ZTI7S3490C5[];
extern  VTBL_ENTRY _ZTV7S3490C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C5[];
extern Class_Descriptor cd_S3490C7;
extern VTBL_ENTRY _ZTI7S3490C7[];
extern  VTBL_ENTRY _ZTV7S3490C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C7[];
extern Class_Descriptor cd_S3490C9;
extern VTBL_ENTRY _ZTI7S3490C9[];
extern  VTBL_ENTRY _ZTV7S3490C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C9[];
extern Class_Descriptor cd_S3490C6;
extern VTBL_ENTRY _ZTI7S3490C6[];
extern  VTBL_ENTRY _ZTV7S3490C6[];
extern Class_Descriptor cd_S3490C6;
extern VTBL_ENTRY _ZTI7S3490C6[];
extern  VTBL_ENTRY _ZTV7S3490C6[];
extern Class_Descriptor cd_S3490C5;
extern VTBL_ENTRY _ZTI7S3490C5[];
extern  VTBL_ENTRY _ZTV7S3490C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C5[];
extern Class_Descriptor cd_S3490C7;
extern VTBL_ENTRY _ZTI7S3490C7[];
extern  VTBL_ENTRY _ZTV7S3490C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C7[];
extern Class_Descriptor cd_S3490C9;
extern VTBL_ENTRY _ZTI7S3490C9[];
extern  VTBL_ENTRY _ZTV7S3490C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C9[];
extern Class_Descriptor cd_S3490C12;
extern VTBL_ENTRY _ZTI8S3490C12[];
extern  VTBL_ENTRY _ZTV8S3490C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3490C12[];
static Base_Class bases_S3490C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3490C4,    ABISELECT(6024,4296), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3490C6,    ABISELECT(6048,4312), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3490C5,    ABISELECT(6048,4312), //bcp->offset
    45, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S3490C6,    ABISELECT(6560,4672), //bcp->offset
    50, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S3490C7,    ABISELECT(6656,4724), //bcp->offset
    54, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S3490C3,    ABISELECT(6008,4288), //bcp->offset
    39, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3490C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S3490C6,    ABISELECT(96,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S3490C5,    ABISELECT(96,52), //bcp->offset
    11, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S3490C7,    ABISELECT(608,412), //bcp->offset
    15, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    34, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S3490C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3490C6,    ABISELECT(2704,1940), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S3490C6,    ABISELECT(2800,1992), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S3490C5,    ABISELECT(2800,1992), //bcp->offset
    31, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    36, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S3490C7,    ABISELECT(3312,2352), //bcp->offset
    35, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    37, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S3490C9,    ABISELECT(2704,1940), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S3490C12,    ABISELECT(2704,1940), //bcp->offset
    19, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    35, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S3490C14[];
extern void _ZN7S3490C62v2Ev();
extern void _ZN8S3490C14D1Ev();
extern void _ZN8S3490C14D0Ev();
extern void _ZN8S3490C142v9Ev();
extern void _ZN7S3490C62v2Ev();
extern void _ZN7S3490C72v3Ev();
extern void _ZN7S3490C62v2Ev();
extern void ABISELECT(_ZThn2704_N8S3490C14D1Ev,_ZThn1940_N8S3490C14D1Ev)();
extern void ABISELECT(_ZThn2704_N8S3490C14D0Ev,_ZThn1940_N8S3490C14D0Ev)();
extern void _ZN8S3490C122v7Ev();
extern void _ZN8S3490C122v8Ev();
extern void _ZN7S3490C62v2Ev();
extern void _ZN7S3490C72v3Ev();
extern void _ZN7S3490C62v2Ev();
extern void _ZN7S3490C62v2Ev();
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY vtc_S3490C14[] = {
  ABISELECT(6656,4724),
  ABISELECT(6048,4312),
  ABISELECT(6008,4288),
  ABISELECT(6560,4672),
  ABISELECT(6024,4296),
  0,
  (VTBL_ENTRY)&(_ZTI8S3490C14[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  (VTBL_ENTRY)&_ZN8S3490C14D1Ev,
  (VTBL_ENTRY)&_ZN8S3490C14D0Ev,
  (VTBL_ENTRY)&_ZN8S3490C142v9Ev,
  ABISELECT(5928,4244),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI8S3490C14[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  ABISELECT(5952,4260),
  ABISELECT(-608,-412),
  (VTBL_ENTRY)&(_ZTI8S3490C14[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
  ABISELECT(3952,2784),
  ABISELECT(3344,2372),
  ABISELECT(3304,2348),
  ABISELECT(3856,2732),
  ABISELECT(3320,2356),
  ABISELECT(-2704,-1940),
  (VTBL_ENTRY)&(_ZTI8S3490C14[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn2704_N8S3490C14D1Ev,_ZThn1940_N8S3490C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2704_N8S3490C14D0Ev,_ZThn1940_N8S3490C14D0Ev),
  (VTBL_ENTRY)&_ZN8S3490C122v7Ev,
  (VTBL_ENTRY)&_ZN8S3490C122v8Ev,
  ABISELECT(3224,2304),
  ABISELECT(-2800,-1992),
  (VTBL_ENTRY)&(_ZTI8S3490C14[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  ABISELECT(3248,2320),
  ABISELECT(-3312,-2352),
  (VTBL_ENTRY)&(_ZTI8S3490C14[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
  ABISELECT(648,436),
  ABISELECT(552,384),
  ABISELECT(40,24),
  ABISELECT(16,8),
  ABISELECT(-6008,-4288),
  (VTBL_ENTRY)&(_ZTI8S3490C14[0]),
  0,
  ABISELECT(-24,-16),
  ABISELECT(-6048,-4312),
  (VTBL_ENTRY)&(_ZTI8S3490C14[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  0,
  ABISELECT(-6560,-4672),
  (VTBL_ENTRY)&(_ZTI8S3490C14[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  0,
  ABISELECT(-96,-52),
  ABISELECT(-6656,-4724),
  (VTBL_ENTRY)&(_ZTI8S3490C14[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern VTBL_ENTRY _ZTV8S3490C14[];
extern void _ZN7S3490C62v2Ev();
extern void _ZN7S3490C9D1Ev();
extern void _ZN7S3490C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C9__8S3490C14[] = {
  ABISELECT(6656,4724),
  ABISELECT(6048,4312),
  ABISELECT(6008,4288),
  ABISELECT(6560,4672),
  ABISELECT(6024,4296),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3490C9D1Ev,
  (VTBL_ENTRY)&_ZN7S3490C9D0Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C57S3490C9__A1__8S3490C14[] = {
  ABISELECT(5928,4244),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C5[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C77S3490C9__A1__8S3490C14[] = {
  ABISELECT(5952,4260),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C7[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C6__7S3490C77S3490C9__A1__8S3490C14[] = {
  0,
  ABISELECT(-5952,-4260),
  (VTBL_ENTRY)&(_ZTI7S3490C7[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C5__A__7S3490C9__8S3490C14[] = {
  ABISELECT(5928,4244),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C7__A__7S3490C9__8S3490C14[] = {
  ABISELECT(5952,4260),
  ABISELECT(-608,-412),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C6__A2__7S3490C9__8S3490C14[] = {
  0,
  ABISELECT(-6560,-4672),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3490C3__7S3490C9__8S3490C14[] = {
  ABISELECT(648,436),
  ABISELECT(552,384),
  ABISELECT(40,24),
  ABISELECT(16,8),
  ABISELECT(-6008,-4288),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C5__A1__7S3490C9__8S3490C14[] = {
  0,
  ABISELECT(-24,-16),
  ABISELECT(-6048,-4312),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C7__A1__7S3490C9__8S3490C14[] = {
  0,
  ABISELECT(-96,-52),
  ABISELECT(-6656,-4724),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C62v2Ev();
extern void _ZN8S3490C12D1Ev();
extern void _ZN8S3490C12D0Ev();
extern void _ZN8S3490C122v7Ev();
extern void _ZN8S3490C122v8Ev();
static  VTBL_ENTRY _tg__ZTV8S3490C12__8S3490C14[] = {
  ABISELECT(3952,2784),
  ABISELECT(3344,2372),
  ABISELECT(3304,2348),
  ABISELECT(3856,2732),
  ABISELECT(3320,2356),
  0,
  (VTBL_ENTRY)&(_ZTI8S3490C12[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  (VTBL_ENTRY)&_ZN8S3490C12D1Ev,
  (VTBL_ENTRY)&_ZN8S3490C12D0Ev,
  (VTBL_ENTRY)&_ZN8S3490C122v7Ev,
  (VTBL_ENTRY)&_ZN8S3490C122v8Ev,
};
extern void _ZN7S3490C62v2Ev();
extern void _ZN7S3490C9D1Ev();
extern void _ZN7S3490C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C98S3490C12__A1__8S3490C14[] = {
  ABISELECT(3952,2784),
  ABISELECT(3344,2372),
  ABISELECT(3304,2348),
  ABISELECT(3856,2732),
  ABISELECT(3320,2356),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3490C9D1Ev,
  (VTBL_ENTRY)&_ZN7S3490C9D0Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C57S3490C98S3490C12__A2__8S3490C14[] = {
  ABISELECT(3224,2304),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C5[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C77S3490C98S3490C12__A2__8S3490C14[] = {
  ABISELECT(3248,2320),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C7[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C6__7S3490C77S3490C98S3490C12__A2__8S3490C14[] = {
  0,
  ABISELECT(-3248,-2320),
  (VTBL_ENTRY)&(_ZTI7S3490C7[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C5__A__7S3490C98S3490C12__A1__8S3490C14[] = {
  ABISELECT(3224,2304),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C7__A__7S3490C98S3490C12__A1__8S3490C14[] = {
  ABISELECT(3248,2320),
  ABISELECT(-608,-412),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C6__A2__7S3490C98S3490C12__A1__8S3490C14[] = {
  0,
  ABISELECT(-3856,-2732),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3490C3__7S3490C98S3490C12__A1__8S3490C14[] = {
  ABISELECT(648,436),
  ABISELECT(552,384),
  ABISELECT(40,24),
  ABISELECT(16,8),
  ABISELECT(-3304,-2348),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C5__A1__7S3490C98S3490C12__A1__8S3490C14[] = {
  0,
  ABISELECT(-24,-16),
  ABISELECT(-3344,-2372),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C7__A1__7S3490C98S3490C12__A1__8S3490C14[] = {
  0,
  ABISELECT(-96,-52),
  ABISELECT(-3952,-2784),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C57S3490C9__8S3490C12__8S3490C14[] = {
  ABISELECT(3224,2304),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI8S3490C12[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C77S3490C9__8S3490C12__8S3490C14[] = {
  ABISELECT(3248,2320),
  ABISELECT(-608,-412),
  (VTBL_ENTRY)&(_ZTI8S3490C12[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C6__A2__8S3490C12__8S3490C14[] = {
  0,
  ABISELECT(-3856,-2732),
  (VTBL_ENTRY)&(_ZTI8S3490C12[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3490C3__8S3490C12__8S3490C14[] = {
  ABISELECT(648,436),
  ABISELECT(552,384),
  ABISELECT(40,24),
  ABISELECT(16,8),
  ABISELECT(-3304,-2348),
  (VTBL_ENTRY)&(_ZTI8S3490C12[0]),
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C5__A1__8S3490C12__8S3490C14[] = {
  0,
  ABISELECT(-24,-16),
  ABISELECT(-3344,-2372),
  (VTBL_ENTRY)&(_ZTI8S3490C12[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C7__A1__8S3490C12__8S3490C14[] = {
  0,
  ABISELECT(-96,-52),
  ABISELECT(-3952,-2784),
  (VTBL_ENTRY)&(_ZTI8S3490C12[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3490C3__8S3490C14[] = {
  ABISELECT(648,436),
  ABISELECT(552,384),
  ABISELECT(40,24),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C3[0]),
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C5__7S3490C3__8S3490C14[] = {
  0,
  ABISELECT(-24,-16),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S3490C3[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C6__A1__7S3490C3__8S3490C14[] = {
  0,
  ABISELECT(-552,-384),
  (VTBL_ENTRY)&(_ZTI7S3490C3[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C7__7S3490C3__8S3490C14[] = {
  0,
  ABISELECT(-96,-52),
  ABISELECT(-648,-436),
  (VTBL_ENTRY)&(_ZTI7S3490C3[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C5__8S3490C14[] = {
  ABISELECT(-24,-16),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C5[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C7__8S3490C14[] = {
  ABISELECT(-96,-52),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C7[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C6__7S3490C7__8S3490C14[] = {
  0,
  ABISELECT(96,52),
  (VTBL_ENTRY)&(_ZTI7S3490C7[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
static  VTT_ENTRY vtt_S3490C14[] = {
  {&(_ZTV8S3490C14[7]),  7,59},
  {&(_tg__ZTV7S3490C9__8S3490C14[7]),  7,10},
  {&(_tg__ZTV7S3490C57S3490C9__A1__8S3490C14[3]),  3,4},
  {&(_tg__ZTV7S3490C77S3490C9__A1__8S3490C14[3]),  3,4},
  {&(_tg__ZTV7S3490C6__7S3490C77S3490C9__A1__8S3490C14[3]),  3,4},
  {&(_tg__ZTV7S3490C5__A__7S3490C9__8S3490C14[3]),  3,4},
  {&(_tg__ZTV7S3490C7__A__7S3490C9__8S3490C14[3]),  3,4},
  {&(_tg__ZTV7S3490C6__A2__7S3490C9__8S3490C14[3]),  3,4},
  {&(_tg__ZTV7S3490C3__7S3490C9__8S3490C14[6]),  6,6},
  {&(_tg__ZTV7S3490C5__A1__7S3490C9__8S3490C14[4]),  4,5},
  {&(_tg__ZTV7S3490C7__A1__7S3490C9__8S3490C14[4]),  4,5},
  {&(_tg__ZTV8S3490C12__8S3490C14[7]),  7,12},
  {&(_tg__ZTV7S3490C98S3490C12__A1__8S3490C14[7]),  7,10},
  {&(_tg__ZTV7S3490C57S3490C98S3490C12__A2__8S3490C14[3]),  3,4},
  {&(_tg__ZTV7S3490C77S3490C98S3490C12__A2__8S3490C14[3]),  3,4},
  {&(_tg__ZTV7S3490C6__7S3490C77S3490C98S3490C12__A2__8S3490C14[3]),  3,4},
  {&(_tg__ZTV7S3490C5__A__7S3490C98S3490C12__A1__8S3490C14[3]),  3,4},
  {&(_tg__ZTV7S3490C7__A__7S3490C98S3490C12__A1__8S3490C14[3]),  3,4},
  {&(_tg__ZTV7S3490C6__A2__7S3490C98S3490C12__A1__8S3490C14[3]),  3,4},
  {&(_tg__ZTV7S3490C3__7S3490C98S3490C12__A1__8S3490C14[6]),  6,6},
  {&(_tg__ZTV7S3490C5__A1__7S3490C98S3490C12__A1__8S3490C14[4]),  4,5},
  {&(_tg__ZTV7S3490C7__A1__7S3490C98S3490C12__A1__8S3490C14[4]),  4,5},
  {&(_tg__ZTV7S3490C57S3490C9__8S3490C12__8S3490C14[3]),  3,4},
  {&(_tg__ZTV7S3490C77S3490C9__8S3490C12__8S3490C14[3]),  3,4},
  {&(_tg__ZTV7S3490C6__A2__8S3490C12__8S3490C14[3]),  3,4},
  {&(_tg__ZTV7S3490C3__8S3490C12__8S3490C14[6]),  6,6},
  {&(_tg__ZTV7S3490C5__A1__8S3490C12__8S3490C14[4]),  4,5},
  {&(_tg__ZTV7S3490C7__A1__8S3490C12__8S3490C14[4]),  4,5},
  {&(_ZTV8S3490C14[45]),  45,59},
  {&(_ZTV8S3490C14[49]),  49,59},
  {&(_ZTV8S3490C14[53]),  53,59},
  {&(_ZTV8S3490C14[58]),  58,59},
  {&(_ZTV8S3490C14[14]),  14,59},
  {&(_ZTV8S3490C14[18]),  18,59},
  {&(_ZTV8S3490C14[26]),  26,59},
  {&(_ZTV8S3490C14[34]),  34,59},
  {&(_ZTV8S3490C14[38]),  38,59},
  {&(_tg__ZTV7S3490C3__8S3490C14[6]),  6,6},
  {&(_tg__ZTV7S3490C5__7S3490C3__8S3490C14[4]),  4,5},
  {&(_tg__ZTV7S3490C6__A1__7S3490C3__8S3490C14[3]),  3,4},
  {&(_tg__ZTV7S3490C7__7S3490C3__8S3490C14[4]),  4,5},
  {&(_tg__ZTV7S3490C5__8S3490C14[3]),  3,4},
  {&(_tg__ZTV7S3490C7__8S3490C14[3]),  3,4},
  {&(_tg__ZTV7S3490C6__7S3490C7__8S3490C14[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S3490C14[];
extern  VTBL_ENTRY _ZTV8S3490C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3490C14[];
Class_Descriptor cd_S3490C14 = {  "S3490C14", // class name
  bases_S3490C14, 17,
  &(vtc_S3490C14[0]), // expected_vtbl_contents
  &(vtt_S3490C14[0]), // expected_vtt_contents
  ABISELECT(6944,4956), // object size
  NSPAIRA(_ZTI8S3490C14),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S3490C14),59, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3490C14),44, //virtual table table var
  16, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3490C10  : virtual S3490C9 , S3490C11 , S3490C2 {
  int s3490c10f0[10];
  long double s3490c10f1;
  void *s3490c10f2[9];
  long s3490c10f3[8];
  int s3490c10f4;
  void *s3490c10f5;
  ::S3490C14 s3490c10f6;
  void *s3490c10f7;
  ~S3490C10(); // tgen
  S3490C10(); // tgen
};
//SIG(-1 S3490C10) C1{ VBC2{ BC3{ v1 FD Fi:3 Fc:8 FD[2] FL} VBC4{ m FL Fi Fc} BC5{ BC3 VBC4 Fc[10] Fi FC6{ VBC3 v2 FC4 FL FC4[7] Fp FL FC4 Fp Fc Fs Fi FC3} FL} BC6 VBC7{ VBC4 VBC5 VBC3 VBC6 Fp} vd FC6 FC7 Fp Fi FC3 FC6} BC8{ VBC4 VBC7 BC9{ BC2 vd v3 v4 Fp Fs:6 FC3 FD Fi FC4 FC6 Fp Fi Fp[2]} BC10{ BC7 BC2 BC5 BC3 v5 FC5[2] FC3 Fi FC4 Fp[10] Fi[2] FL FD FL Fi} FC11{} FC9 FL} BC12{ BC7 BC10 vd v6 v7 Fp[2] Fi Fc FC5 FC10 FD} Fi[10] FD Fp[9] Fl[8] Fi Fp FC13{ VBC7 BC2 BC9 v8 Fi Fc Fp Fl} Fp}


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

static void Test_S3490C10()
{
  extern Class_Descriptor cd_S3490C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(2111,5979)];
    init_test(&cd_S3490C10, buf);
    S3490C10 *dp, &lv = *(dp=new (buf) S3490C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(33760,23912), "sizeof(S3490C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3490C10)");
    /*is_ambiguous_... S3490C10::S3490C9 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C9*), ABISELECT(30128,21304), "S3490C10");
    /*is_ambiguous_... S3490C10::S3490C9 */ AMB_check_base_class_offset(lv, (S3490C4*)(S3490C9*), ABISELECT(32832,23244), "S3490C10");
    /*is_ambiguous_... S3490C10::S3490C9 */ AMB_check_base_class_offset(lv, (S3490C4*)(S3490C5*)(S3490C9*), ABISELECT(32832,23244), "S3490C10");
    /*is_ambiguous_... S3490C10::S3490C3 */ AMB_check_base_class_offset(lv, (S3490C4*)(S3490C3*), ABISELECT(32832,23244), "S3490C10");
    /*is_ambiguous_... S3490C10::S3490C5 */ AMB_check_base_class_offset(lv, (S3490C4*)(S3490C5*), ABISELECT(32832,23244), "S3490C10");
    check_base_class_offset(lv, (S3490C4*)(S3490C11*), ABISELECT(32832,23244), "S3490C10");
    check_base_class_offset(lv, (S3490C4*)(S3490C9*)(S3490C12*)(S3490C11*), ABISELECT(32832,23244), "S3490C10");
    /*is_ambiguous_... S3490C9::S3490C5 */ AMB_check_base_class_offset(lv, (S3490C4*)(S3490C5*)(S3490C9*)(S3490C12*)(S3490C11*), ABISELECT(32832,23244), "S3490C10");
    /*is_ambiguous_... S3490C8::S3490C3 */ AMB_check_base_class_offset(lv, (S3490C4*)(S3490C3*)(S3490C8*)(S3490C11*), ABISELECT(32832,23244), "S3490C10");
    check_base_class_offset(lv, (S3490C4*)(S3490C9*)(S3490C8*)(S3490C11*), ABISELECT(32832,23244), "S3490C10");
    /*is_ambiguous_... S3490C9::S3490C5 */ AMB_check_base_class_offset(lv, (S3490C4*)(S3490C5*)(S3490C9*)(S3490C8*)(S3490C11*), ABISELECT(32832,23244), "S3490C10");
    /*is_ambiguous_... S3490C8::S3490C5 */ AMB_check_base_class_offset(lv, (S3490C4*)(S3490C5*)(S3490C8*)(S3490C11*), ABISELECT(32832,23244), "S3490C10");
    /*is_ambiguous_... S3490C2::S3490C3 */ AMB_check_base_class_offset(lv, (S3490C4*)(S3490C3*)(S3490C2*), ABISELECT(32832,23244), "S3490C10");
    /*is_ambiguous_... S3490C8::S3490C3 */ AMB_check_base_class_offset(lv, (S3490C4*)(S3490C3*)(S3490C8*)(S3490C2*), ABISELECT(32832,23244), "S3490C10");
    check_base_class_offset(lv, (S3490C4*)(S3490C9*)(S3490C8*)(S3490C2*), ABISELECT(32832,23244), "S3490C10");
    /*is_ambiguous_... S3490C9::S3490C5 */ AMB_check_base_class_offset(lv, (S3490C4*)(S3490C5*)(S3490C9*)(S3490C8*)(S3490C2*), ABISELECT(32832,23244), "S3490C10");
    /*is_ambiguous_... S3490C8::S3490C5 */ AMB_check_base_class_offset(lv, (S3490C4*)(S3490C5*)(S3490C8*)(S3490C2*), ABISELECT(32832,23244), "S3490C10");
    /*is_ambiguous_... S3490C10::S3490C9 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C5*)(S3490C9*), ABISELECT(30224,21356), "S3490C10");
    /*is_ambiguous_... S3490C10::S3490C9 */ AMB_check_base_class_offset(lv, (S3490C5*)(S3490C9*), ABISELECT(30224,21356), "S3490C10");
    /*is_ambiguous_... S3490C10::S3490C9 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C7*)(S3490C9*), ABISELECT(32848,23260), "S3490C10");
    /*is_ambiguous_... S3490C10::S3490C3 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C3*), ABISELECT(32848,23260), "S3490C10");
    /*is_ambiguous_... S3490C10::S3490C7 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C7*), ABISELECT(32848,23260), "S3490C10");
    /*is_ambiguous_... S3490C9::S3490C7 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C7*)(S3490C9*)(S3490C12*)(S3490C11*), ABISELECT(32848,23260), "S3490C10");
    /*is_ambiguous_... S3490C8::S3490C3 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C3*)(S3490C8*)(S3490C11*), ABISELECT(32848,23260), "S3490C10");
    /*is_ambiguous_... S3490C9::S3490C7 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C7*)(S3490C9*)(S3490C8*)(S3490C11*), ABISELECT(32848,23260), "S3490C10");
    /*is_ambiguous_... S3490C2::S3490C3 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C3*)(S3490C2*), ABISELECT(32848,23260), "S3490C10");
    /*is_ambiguous_... S3490C8::S3490C3 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C3*)(S3490C8*)(S3490C2*), ABISELECT(32848,23260), "S3490C10");
    /*is_ambiguous_... S3490C9::S3490C7 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C7*)(S3490C9*)(S3490C8*)(S3490C2*), ABISELECT(32848,23260), "S3490C10");
    /*is_ambiguous_... S3490C10::S3490C9 */ AMB_check_base_class_offset(lv, (S3490C7*)(S3490C9*), ABISELECT(30736,21716), "S3490C10");
    /*is_ambiguous_... S3490C10::S3490C5 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C5*), ABISELECT(32960,23320), "S3490C10");
    /*is_ambiguous_... S3490C10::S3490C3 */ AMB_check_base_class_offset(lv, (S3490C5*)(S3490C3*), ABISELECT(32960,23320), "S3490C10");
    /*is_ambiguous_... S3490C8::S3490C3 */ AMB_check_base_class_offset(lv, (S3490C5*)(S3490C3*)(S3490C8*)(S3490C11*), ABISELECT(32960,23320), "S3490C10");
    /*is_ambiguous_... S3490C2::S3490C3 */ AMB_check_base_class_offset(lv, (S3490C5*)(S3490C3*)(S3490C2*), ABISELECT(32960,23320), "S3490C10");
    /*is_ambiguous_... S3490C8::S3490C3 */ AMB_check_base_class_offset(lv, (S3490C5*)(S3490C3*)(S3490C8*)(S3490C2*), ABISELECT(32960,23320), "S3490C10");
    /*is_ambiguous_... S3490C10::S3490C3 */ AMB_check_base_class_offset(lv, (S3490C7*)(S3490C3*), ABISELECT(33472,23680), "S3490C10");
    /*is_ambiguous_... S3490C8::S3490C3 */ AMB_check_base_class_offset(lv, (S3490C7*)(S3490C3*)(S3490C8*)(S3490C11*), ABISELECT(33472,23680), "S3490C10");
    /*is_ambiguous_... S3490C2::S3490C3 */ AMB_check_base_class_offset(lv, (S3490C7*)(S3490C3*)(S3490C2*), ABISELECT(33472,23680), "S3490C10");
    /*is_ambiguous_... S3490C8::S3490C3 */ AMB_check_base_class_offset(lv, (S3490C7*)(S3490C3*)(S3490C8*)(S3490C2*), ABISELECT(33472,23680), "S3490C10");
    /*is_ambiguous_... S3490C10::S3490C9 */ AMB_check_base_class_offset(lv, (S3490C3*)(S3490C9*), ABISELECT(32936,23312), "S3490C10");
    /*is_ambiguous_... S3490C11::S3490C3 */ AMB_check_base_class_offset(lv, (S3490C3*)(S3490C11*), ABISELECT(32936,23312), "S3490C10");
    check_base_class_offset(lv, (S3490C3*)(S3490C9*)(S3490C12*)(S3490C11*), ABISELECT(32936,23312), "S3490C10");
    check_base_class_offset(lv, (S3490C3*)(S3490C9*)(S3490C8*)(S3490C11*), ABISELECT(32936,23312), "S3490C10");
    check_base_class_offset(lv, (S3490C3*)(S3490C9*)(S3490C8*)(S3490C2*), ABISELECT(32936,23312), "S3490C10");
    /*is_ambiguous_... S3490C10::S3490C9 */ AMB_check_base_class_offset(lv, (S3490C9*), ABISELECT(30128,21304), "S3490C10");
    /*is_ambiguous_... S3490C9::S3490C6 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C9*)(S3490C12*)(S3490C11*), 0, "S3490C10");
    /*is_ambiguous_... S3490C9::S3490C5 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C5*)(S3490C9*)(S3490C12*)(S3490C11*), ABISELECT(96,52), "S3490C10");
    /*is_ambiguous_... S3490C9::S3490C5 */ AMB_check_base_class_offset(lv, (S3490C5*)(S3490C9*)(S3490C12*)(S3490C11*), ABISELECT(96,52), "S3490C10");
    /*is_ambiguous_... S3490C9::S3490C7 */ AMB_check_base_class_offset(lv, (S3490C7*)(S3490C9*)(S3490C12*)(S3490C11*), ABISELECT(608,412), "S3490C10");
    check_base_class_offset(lv, (S3490C9*)(S3490C12*)(S3490C11*), 0, "S3490C10");
    check_base_class_offset(lv, (S3490C12*)(S3490C11*), 0, "S3490C10");
    /*is_ambiguous_... S3490C8::S3490C3 */ AMB_check_base_class_offset(lv, (S3490C3*)(S3490C8*)(S3490C11*), ABISELECT(3280,2332), "S3490C10");
    /*is_ambiguous_... S3490C9::S3490C6 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C9*)(S3490C8*)(S3490C11*), ABISELECT(3296,2340), "S3490C10");
    /*is_ambiguous_... S3490C9::S3490C5 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C5*)(S3490C9*)(S3490C8*)(S3490C11*), ABISELECT(3392,2392), "S3490C10");
    /*is_ambiguous_... S3490C9::S3490C5 */ AMB_check_base_class_offset(lv, (S3490C5*)(S3490C9*)(S3490C8*)(S3490C11*), ABISELECT(3392,2392), "S3490C10");
    /*is_ambiguous_... S3490C9::S3490C7 */ AMB_check_base_class_offset(lv, (S3490C7*)(S3490C9*)(S3490C8*)(S3490C11*), ABISELECT(3904,2752), "S3490C10");
    check_base_class_offset(lv, (S3490C9*)(S3490C8*)(S3490C11*), ABISELECT(3296,2340), "S3490C10");
    /*is_ambiguous_... S3490C8::S3490C5 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C5*)(S3490C8*)(S3490C11*), ABISELECT(6000,4280), "S3490C10");
    /*is_ambiguous_... S3490C8::S3490C5 */ AMB_check_base_class_offset(lv, (S3490C5*)(S3490C8*)(S3490C11*), ABISELECT(6000,4280), "S3490C10");
    /*is_ambiguous_... S3490C8::S3490C6 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C8*)(S3490C11*), ABISELECT(6512,4640), "S3490C10");
    check_base_class_offset(lv, (S3490C8*)(S3490C11*), ABISELECT(3280,2332), "S3490C10");
    check_base_class_offset(lv, (S3490C11*), 0, "S3490C10");
    /*is_ambiguous_... S3490C2::S3490C3 */ AMB_check_base_class_offset(lv, (S3490C3*)(S3490C2*), ABISELECT(12144,8608), "S3490C10");
    /*is_ambiguous_... S3490C8::S3490C3 */ AMB_check_base_class_offset(lv, (S3490C3*)(S3490C8*)(S3490C2*), ABISELECT(12160,8616), "S3490C10");
    /*is_ambiguous_... S3490C9::S3490C6 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C9*)(S3490C8*)(S3490C2*), ABISELECT(12176,8624), "S3490C10");
    /*is_ambiguous_... S3490C9::S3490C5 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C5*)(S3490C9*)(S3490C8*)(S3490C2*), ABISELECT(12272,8676), "S3490C10");
    /*is_ambiguous_... S3490C9::S3490C5 */ AMB_check_base_class_offset(lv, (S3490C5*)(S3490C9*)(S3490C8*)(S3490C2*), ABISELECT(12272,8676), "S3490C10");
    /*is_ambiguous_... S3490C9::S3490C7 */ AMB_check_base_class_offset(lv, (S3490C7*)(S3490C9*)(S3490C8*)(S3490C2*), ABISELECT(12784,9036), "S3490C10");
    check_base_class_offset(lv, (S3490C9*)(S3490C8*)(S3490C2*), ABISELECT(12176,8624), "S3490C10");
    /*is_ambiguous_... S3490C8::S3490C5 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C5*)(S3490C8*)(S3490C2*), ABISELECT(14880,10564), "S3490C10");
    /*is_ambiguous_... S3490C8::S3490C5 */ AMB_check_base_class_offset(lv, (S3490C5*)(S3490C8*)(S3490C2*), ABISELECT(14880,10564), "S3490C10");
    /*is_ambiguous_... S3490C8::S3490C6 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C8*)(S3490C2*), ABISELECT(15392,10924), "S3490C10");
    check_base_class_offset(lv, (S3490C8*)(S3490C2*), ABISELECT(12160,8616), "S3490C10");
    check_base_class_offset(lv, (S3490C2*), ABISELECT(12144,8608), "S3490C10");
    check_field_offset(lv, s3490c10f0, ABISELECT(22944,16216), "S3490C10.s3490c10f0");
    check_field_offset(lv, s3490c10f1, ABISELECT(22992,16256), "S3490C10.s3490c10f1");
    check_field_offset(lv, s3490c10f2, ABISELECT(23008,16268), "S3490C10.s3490c10f2");
    check_field_offset(lv, s3490c10f3, ABISELECT(23080,16304), "S3490C10.s3490c10f3");
    check_field_offset(lv, s3490c10f4, ABISELECT(23144,16336), "S3490C10.s3490c10f4");
    check_field_offset(lv, s3490c10f5, ABISELECT(23152,16340), "S3490C10.s3490c10f5");
    check_field_offset(lv, s3490c10f6, ABISELECT(23168,16344), "S3490C10.s3490c10f6");
    check_field_offset(lv, s3490c10f7, ABISELECT(30112,21300), "S3490C10.s3490c10f7");
    test_class_info(&lv, &cd_S3490C10);
    dp->~S3490C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3490C10(Test_S3490C10, "S3490C10", ABISELECT(33760,23912));

#else // __cplusplus

extern void _ZN8S3490C10C1Ev();
extern void _ZN8S3490C10D1Ev();
Name_Map name_map_S3490C10[] = {
  NSPAIR(_ZN8S3490C10C1Ev),
  NSPAIR(_ZN8S3490C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3490C6;
extern VTBL_ENTRY _ZTI7S3490C6[];
extern  VTBL_ENTRY _ZTV7S3490C6[];
extern Class_Descriptor cd_S3490C4;
extern VTBL_ENTRY _ZTI7S3490C4[];
extern Class_Descriptor cd_S3490C6;
extern VTBL_ENTRY _ZTI7S3490C6[];
extern  VTBL_ENTRY _ZTV7S3490C6[];
extern Class_Descriptor cd_S3490C5;
extern VTBL_ENTRY _ZTI7S3490C5[];
extern  VTBL_ENTRY _ZTV7S3490C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C5[];
extern Class_Descriptor cd_S3490C6;
extern VTBL_ENTRY _ZTI7S3490C6[];
extern  VTBL_ENTRY _ZTV7S3490C6[];
extern Class_Descriptor cd_S3490C7;
extern VTBL_ENTRY _ZTI7S3490C7[];
extern  VTBL_ENTRY _ZTV7S3490C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C7[];
extern Class_Descriptor cd_S3490C6;
extern VTBL_ENTRY _ZTI7S3490C6[];
extern  VTBL_ENTRY _ZTV7S3490C6[];
extern Class_Descriptor cd_S3490C5;
extern VTBL_ENTRY _ZTI7S3490C5[];
extern  VTBL_ENTRY _ZTV7S3490C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C5[];
extern Class_Descriptor cd_S3490C7;
extern VTBL_ENTRY _ZTI7S3490C7[];
extern  VTBL_ENTRY _ZTV7S3490C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C7[];
extern Class_Descriptor cd_S3490C3;
extern VTBL_ENTRY _ZTI7S3490C3[];
extern  VTBL_ENTRY _ZTV7S3490C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C3[];
extern Class_Descriptor cd_S3490C9;
extern VTBL_ENTRY _ZTI7S3490C9[];
extern  VTBL_ENTRY _ZTV7S3490C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C9[];
extern Class_Descriptor cd_S3490C6;
extern VTBL_ENTRY _ZTI7S3490C6[];
extern  VTBL_ENTRY _ZTV7S3490C6[];
extern Class_Descriptor cd_S3490C6;
extern VTBL_ENTRY _ZTI7S3490C6[];
extern  VTBL_ENTRY _ZTV7S3490C6[];
extern Class_Descriptor cd_S3490C5;
extern VTBL_ENTRY _ZTI7S3490C5[];
extern  VTBL_ENTRY _ZTV7S3490C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C5[];
extern Class_Descriptor cd_S3490C7;
extern VTBL_ENTRY _ZTI7S3490C7[];
extern  VTBL_ENTRY _ZTV7S3490C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C7[];
extern Class_Descriptor cd_S3490C9;
extern VTBL_ENTRY _ZTI7S3490C9[];
extern  VTBL_ENTRY _ZTV7S3490C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C9[];
extern Class_Descriptor cd_S3490C12;
extern VTBL_ENTRY _ZTI8S3490C12[];
extern  VTBL_ENTRY _ZTV8S3490C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3490C12[];
extern Class_Descriptor cd_S3490C3;
extern VTBL_ENTRY _ZTI7S3490C3[];
extern  VTBL_ENTRY _ZTV7S3490C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C3[];
extern Class_Descriptor cd_S3490C6;
extern VTBL_ENTRY _ZTI7S3490C6[];
extern  VTBL_ENTRY _ZTV7S3490C6[];
extern Class_Descriptor cd_S3490C6;
extern VTBL_ENTRY _ZTI7S3490C6[];
extern  VTBL_ENTRY _ZTV7S3490C6[];
extern Class_Descriptor cd_S3490C5;
extern VTBL_ENTRY _ZTI7S3490C5[];
extern  VTBL_ENTRY _ZTV7S3490C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C5[];
extern Class_Descriptor cd_S3490C7;
extern VTBL_ENTRY _ZTI7S3490C7[];
extern  VTBL_ENTRY _ZTV7S3490C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C7[];
extern Class_Descriptor cd_S3490C9;
extern VTBL_ENTRY _ZTI7S3490C9[];
extern  VTBL_ENTRY _ZTV7S3490C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C9[];
extern Class_Descriptor cd_S3490C6;
extern VTBL_ENTRY _ZTI7S3490C6[];
extern  VTBL_ENTRY _ZTV7S3490C6[];
extern Class_Descriptor cd_S3490C5;
extern VTBL_ENTRY _ZTI7S3490C5[];
extern  VTBL_ENTRY _ZTV7S3490C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C5[];
extern Class_Descriptor cd_S3490C6;
extern VTBL_ENTRY _ZTI7S3490C6[];
extern  VTBL_ENTRY _ZTV7S3490C6[];
extern Class_Descriptor cd_S3490C8;
extern VTBL_ENTRY _ZTI7S3490C8[];
extern  VTBL_ENTRY _ZTV7S3490C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C8[];
extern Class_Descriptor cd_S3490C11;
extern VTBL_ENTRY _ZTI8S3490C11[];
extern  VTBL_ENTRY _ZTV8S3490C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3490C11[];
extern Class_Descriptor cd_S3490C3;
extern VTBL_ENTRY _ZTI7S3490C3[];
extern  VTBL_ENTRY _ZTV7S3490C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C3[];
extern Class_Descriptor cd_S3490C3;
extern VTBL_ENTRY _ZTI7S3490C3[];
extern  VTBL_ENTRY _ZTV7S3490C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C3[];
extern Class_Descriptor cd_S3490C6;
extern VTBL_ENTRY _ZTI7S3490C6[];
extern  VTBL_ENTRY _ZTV7S3490C6[];
extern Class_Descriptor cd_S3490C6;
extern VTBL_ENTRY _ZTI7S3490C6[];
extern  VTBL_ENTRY _ZTV7S3490C6[];
extern Class_Descriptor cd_S3490C5;
extern VTBL_ENTRY _ZTI7S3490C5[];
extern  VTBL_ENTRY _ZTV7S3490C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C5[];
extern Class_Descriptor cd_S3490C7;
extern VTBL_ENTRY _ZTI7S3490C7[];
extern  VTBL_ENTRY _ZTV7S3490C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C7[];
extern Class_Descriptor cd_S3490C9;
extern VTBL_ENTRY _ZTI7S3490C9[];
extern  VTBL_ENTRY _ZTV7S3490C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C9[];
extern Class_Descriptor cd_S3490C6;
extern VTBL_ENTRY _ZTI7S3490C6[];
extern  VTBL_ENTRY _ZTV7S3490C6[];
extern Class_Descriptor cd_S3490C5;
extern VTBL_ENTRY _ZTI7S3490C5[];
extern  VTBL_ENTRY _ZTV7S3490C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C5[];
extern Class_Descriptor cd_S3490C6;
extern VTBL_ENTRY _ZTI7S3490C6[];
extern  VTBL_ENTRY _ZTV7S3490C6[];
extern Class_Descriptor cd_S3490C8;
extern VTBL_ENTRY _ZTI7S3490C8[];
extern  VTBL_ENTRY _ZTV7S3490C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C8[];
extern Class_Descriptor cd_S3490C2;
extern VTBL_ENTRY _ZTI7S3490C2[];
extern  VTBL_ENTRY _ZTV7S3490C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C2[];
static Base_Class bases_S3490C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3490C6,    ABISELECT(30128,21304), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S3490C4,    ABISELECT(32832,23244), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3490C6,    ABISELECT(30224,21356), //bcp->offset
    -1, //bcp->virtual_function_table_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
    3, //immediately_derived
  0, 0},
  {&cd_S3490C5,    ABISELECT(30224,21356), //bcp->offset
    115, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    94, //bcp->index_in_construction_vtbl_array
    114, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S3490C6,    ABISELECT(32848,23260), //bcp->offset
    123, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    96, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S3490C7,    ABISELECT(30736,21716), //bcp->offset
    119, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    95, //bcp->index_in_construction_vtbl_array
    115, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S3490C6,    ABISELECT(32960,23320), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S3490C5,    ABISELECT(32960,23320), //bcp->offset
    133, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    98, //bcp->index_in_construction_vtbl_array
    127, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S3490C7,    ABISELECT(33472,23680), //bcp->offset
    138, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    99, //bcp->index_in_construction_vtbl_array
    128, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S3490C3,    ABISELECT(32936,23312), //bcp->offset
    127, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    97, //bcp->index_in_construction_vtbl_array
    123, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S3490C9,    ABISELECT(30128,21304), //bcp->offset
    102, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    93, //bcp->index_in_construction_vtbl_array
    113, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3490C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    15, //immediately_derived
  0, 0},
  {&cd_S3490C6,    ABISELECT(96,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S3490C5,    ABISELECT(96,52), //bcp->offset
    13, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    100, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S3490C7,    ABISELECT(608,412), //bcp->offset
    17, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    101, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S3490C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S3490C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S3490C3,    ABISELECT(3280,2332), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S3490C6,    ABISELECT(3296,2340), //bcp->offset
    -1, //bcp->virtual_function_table_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
    22, //immediately_derived
  0, 0},
  {&cd_S3490C6,    ABISELECT(3392,2392), //bcp->offset
    -1, //bcp->virtual_function_table_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
    20, //immediately_derived
  0, 0},
  {&cd_S3490C5,    ABISELECT(3392,2392), //bcp->offset
    41, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    104, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S3490C7,    ABISELECT(3904,2752), //bcp->offset
    45, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    105, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S3490C9,    ABISELECT(3296,2340), //bcp->offset
    31, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    103, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S3490C6,    ABISELECT(6000,4280), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S3490C5,    ABISELECT(6000,4280), //bcp->offset
    49, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    106, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S3490C6,    ABISELECT(6512,4640), //bcp->offset
    53, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S3490C8,    ABISELECT(3280,2332), //bcp->offset
    21, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    102, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S3490C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    27, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3490C3,    ABISELECT(12144,8608), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    56, //bcp->base_subarray_index_in_construction_vtbl_array
    28, //init_seq
    39, //immediately_derived
  0, 0},
  {&cd_S3490C3,    ABISELECT(12160,8616), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    61, //bcp->base_subarray_index_in_construction_vtbl_array
    29, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S3490C6,    ABISELECT(12176,8624), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    30, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S3490C6,    ABISELECT(12272,8676), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    31, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S3490C5,    ABISELECT(12272,8676), //bcp->offset
    87, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    110, //bcp->index_in_construction_vtbl_array
    66, //bcp->base_subarray_index_in_construction_vtbl_array
    32, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S3490C7,    ABISELECT(12784,9036), //bcp->offset
    91, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    111, //bcp->index_in_construction_vtbl_array
    67, //bcp->base_subarray_index_in_construction_vtbl_array
    33, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S3490C9,    ABISELECT(12176,8624), //bcp->offset
    77, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    109, //bcp->index_in_construction_vtbl_array
    65, //bcp->base_subarray_index_in_construction_vtbl_array
    34, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S3490C6,    ABISELECT(14880,10564), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    35, //init_seq
    36, //immediately_derived
  0, 0},
  {&cd_S3490C5,    ABISELECT(14880,10564), //bcp->offset
    95, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    112, //bcp->index_in_construction_vtbl_array
    75, //bcp->base_subarray_index_in_construction_vtbl_array
    36, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S3490C6,    ABISELECT(15392,10924), //bcp->offset
    99, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    37, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S3490C8,    ABISELECT(12160,8616), //bcp->offset
    67, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    108, //bcp->index_in_construction_vtbl_array
    60, //bcp->base_subarray_index_in_construction_vtbl_array
    38, //init_seq
    39, //immediately_derived
  0, 0},
  {&cd_S3490C2,    ABISELECT(12144,8608), //bcp->offset
    56, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    107, //bcp->index_in_construction_vtbl_array
    55, //bcp->base_subarray_index_in_construction_vtbl_array
    39, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S3490C10[];
extern void _ZN7S3490C62v2Ev();
extern void _ZN8S3490C10D1Ev();
extern void _ZN8S3490C10D0Ev();
extern void _ZN8S3490C122v7Ev();
extern void _ZN8S3490C122v8Ev();
extern void _ZN7S3490C62v2Ev();
extern void _ZN7S3490C72v3Ev();
extern void _ZN7S3490C82v4Ev();
extern void ABISELECT(_ZThn3280_N8S3490C10D1Ev,_ZThn2332_N8S3490C10D1Ev)();
extern void ABISELECT(_ZThn3280_N8S3490C10D0Ev,_ZThn2332_N8S3490C10D0Ev)();
extern void _ZN7S3490C62v2Ev();
extern void ABISELECT(_ZThn3296_N8S3490C10D1Ev,_ZThn2340_N8S3490C10D1Ev)();
extern void ABISELECT(_ZThn3296_N8S3490C10D0Ev,_ZThn2340_N8S3490C10D0Ev)();
extern void _ZN7S3490C62v2Ev();
extern void _ZN7S3490C72v3Ev();
extern void _ZN7S3490C62v2Ev();
extern void _ZN7S3490C62v2Ev();
extern void ABISELECT(_ZThn12144_N8S3490C10D1Ev,_ZThn8608_N8S3490C10D1Ev)();
extern void ABISELECT(_ZThn12144_N8S3490C10D0Ev,_ZThn8608_N8S3490C10D0Ev)();
extern void _ZN7S3490C22v5Ev();
extern void _ZN7S3490C22v6Ev();
extern void _ZN7S3490C82v4Ev();
extern void ABISELECT(_ZThn12160_N8S3490C10D1Ev,_ZThn8616_N8S3490C10D1Ev)();
extern void ABISELECT(_ZThn12160_N8S3490C10D0Ev,_ZThn8616_N8S3490C10D0Ev)();
extern void _ZN7S3490C62v2Ev();
extern void ABISELECT(_ZThn12176_N8S3490C10D1Ev,_ZThn8624_N8S3490C10D1Ev)();
extern void ABISELECT(_ZThn12176_N8S3490C10D0Ev,_ZThn8624_N8S3490C10D0Ev)();
extern void _ZN7S3490C62v2Ev();
extern void _ZN7S3490C72v3Ev();
extern void _ZN7S3490C62v2Ev();
extern void _ZN7S3490C62v2Ev();
extern void _ZN7S3490C62v2Ev();
extern void ABISELECT(_ZTv0_n72_N8S3490C10D1Ev,_ZTv0_n36_N8S3490C10D1Ev)();
extern void ABISELECT(_ZThn30128_N8S3490C10D1Ev,_ZThn21304_N8S3490C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S3490C10D0Ev,_ZTv0_n36_N8S3490C10D0Ev)();
extern void ABISELECT(_ZThn30128_N8S3490C10D0Ev,_ZThn21304_N8S3490C10D0Ev)() __attribute__((weak));
extern void _ZN7S3490C62v2Ev();
extern void _ZN7S3490C72v3Ev();
extern void _ZN7S3490C62v2Ev();
extern void _ZN7S3490C62v2Ev();
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY vtc_S3490C10[] = {
  ABISELECT(30128,21304),
  ABISELECT(33472,23680),
  ABISELECT(32960,23320),
  ABISELECT(32936,23312),
  ABISELECT(32848,23260),
  ABISELECT(32832,23244),
  0,
  (VTBL_ENTRY)&(_ZTI8S3490C10[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  (VTBL_ENTRY)&_ZN8S3490C10D1Ev,
  (VTBL_ENTRY)&_ZN8S3490C10D0Ev,
  (VTBL_ENTRY)&_ZN8S3490C122v7Ev,
  (VTBL_ENTRY)&_ZN8S3490C122v8Ev,
  ABISELECT(32736,23192),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI8S3490C10[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  ABISELECT(32240,22848),
  ABISELECT(-608,-412),
  (VTBL_ENTRY)&(_ZTI8S3490C10[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
  ABISELECT(29656,20980),
  ABISELECT(30192,21348),
  ABISELECT(29568,20928),
  ABISELECT(29680,20988),
  ABISELECT(29552,20912),
  ABISELECT(-3280,-2332),
  (VTBL_ENTRY)&(_ZTI8S3490C10[0]),
  (VTBL_ENTRY)&_ZN7S3490C82v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn3280_N8S3490C10D1Ev,_ZThn2332_N8S3490C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn3280_N8S3490C10D0Ev,_ZThn2332_N8S3490C10D0Ev),
  ABISELECT(30176,21340),
  ABISELECT(29664,20980),
  ABISELECT(29640,20972),
  ABISELECT(29552,20920),
  ABISELECT(29536,20904),
  ABISELECT(-3296,-2340),
  (VTBL_ENTRY)&(_ZTI8S3490C10[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn3296_N8S3490C10D1Ev,_ZThn2340_N8S3490C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn3296_N8S3490C10D0Ev,_ZThn2340_N8S3490C10D0Ev),
  ABISELECT(29440,20852),
  ABISELECT(-3392,-2392),
  (VTBL_ENTRY)&(_ZTI8S3490C10[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  ABISELECT(28944,20508),
  ABISELECT(-3904,-2752),
  (VTBL_ENTRY)&(_ZTI8S3490C10[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
  ABISELECT(26832,18964),
  ABISELECT(-6000,-4280),
  (VTBL_ENTRY)&(_ZTI8S3490C10[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  ABISELECT(-6512,-4640),
  (VTBL_ENTRY)&(_ZTI8S3490C10[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  ABISELECT(20792,14704),
  ABISELECT(21328,15072),
  ABISELECT(20704,14652),
  ABISELECT(20816,14712),
  ABISELECT(20688,14636),
  ABISELECT(-12144,-8608),
  (VTBL_ENTRY)&(_ZTI8S3490C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn12144_N8S3490C10D1Ev,_ZThn8608_N8S3490C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn12144_N8S3490C10D0Ev,_ZThn8608_N8S3490C10D0Ev),
  (VTBL_ENTRY)&_ZN7S3490C22v5Ev,
  (VTBL_ENTRY)&_ZN7S3490C22v6Ev,
  ABISELECT(20776,14696),
  ABISELECT(21312,15064),
  ABISELECT(20688,14644),
  ABISELECT(20800,14704),
  ABISELECT(20672,14628),
  ABISELECT(-12160,-8616),
  (VTBL_ENTRY)&(_ZTI8S3490C10[0]),
  (VTBL_ENTRY)&_ZN7S3490C82v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn12160_N8S3490C10D1Ev,_ZThn8616_N8S3490C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn12160_N8S3490C10D0Ev,_ZThn8616_N8S3490C10D0Ev),
  ABISELECT(21296,15056),
  ABISELECT(20784,14696),
  ABISELECT(20760,14688),
  ABISELECT(20672,14636),
  ABISELECT(20656,14620),
  ABISELECT(-12176,-8624),
  (VTBL_ENTRY)&(_ZTI8S3490C10[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn12176_N8S3490C10D1Ev,_ZThn8624_N8S3490C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn12176_N8S3490C10D0Ev,_ZThn8624_N8S3490C10D0Ev),
  ABISELECT(20560,14568),
  ABISELECT(-12272,-8676),
  (VTBL_ENTRY)&(_ZTI8S3490C10[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  ABISELECT(20064,14224),
  ABISELECT(-12784,-9036),
  (VTBL_ENTRY)&(_ZTI8S3490C10[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
  ABISELECT(17952,12680),
  ABISELECT(-14880,-10564),
  (VTBL_ENTRY)&(_ZTI8S3490C10[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  ABISELECT(-15392,-10924),
  (VTBL_ENTRY)&(_ZTI8S3490C10[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  ABISELECT(608,412),
  ABISELECT(-30128,-21304),
  0,
  ABISELECT(3344,2376),
  ABISELECT(2832,2016),
  ABISELECT(2808,2008),
  ABISELECT(2720,1956),
  ABISELECT(2704,1940),
  ABISELECT(-30128,-21304),
  (VTBL_ENTRY)&(_ZTI8S3490C10[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S3490C10D1Ev,_ZTv0_n36_N8S3490C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S3490C10D0Ev,_ZTv0_n36_N8S3490C10D0Ev),
  ABISELECT(2608,1888),
  ABISELECT(-30224,-21356),
  (VTBL_ENTRY)&(_ZTI8S3490C10[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  ABISELECT(2112,1544),
  ABISELECT(-30736,-21716),
  (VTBL_ENTRY)&(_ZTI8S3490C10[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
  0,
  ABISELECT(-32848,-23260),
  (VTBL_ENTRY)&(_ZTI8S3490C10[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  ABISELECT(536,368),
  ABISELECT(-88,-52),
  ABISELECT(24,8),
  ABISELECT(-104,-68),
  ABISELECT(-32936,-23312),
  (VTBL_ENTRY)&(_ZTI8S3490C10[0]),
  0,
  ABISELECT(-128,-76),
  ABISELECT(-32960,-23320),
  (VTBL_ENTRY)&(_ZTI8S3490C10[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  0,
  ABISELECT(-624,-420),
  ABISELECT(-33472,-23680),
  (VTBL_ENTRY)&(_ZTI8S3490C10[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern VTBL_ENTRY _ZTV8S3490C10[];
extern void _ZN7S3490C62v2Ev();
extern void _ZN8S3490C11D1Ev();
extern void _ZN8S3490C11D0Ev();
extern void _ZN8S3490C122v7Ev();
extern void _ZN8S3490C122v8Ev();
static  VTBL_ENTRY _tg__ZTV8S3490C11__8S3490C10[] = {
  ABISELECT(33472,23680),
  ABISELECT(32960,23320),
  ABISELECT(32936,23312),
  ABISELECT(32848,23260),
  ABISELECT(32832,23244),
  0,
  (VTBL_ENTRY)&(_ZTI8S3490C11[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  (VTBL_ENTRY)&_ZN8S3490C11D1Ev,
  (VTBL_ENTRY)&_ZN8S3490C11D0Ev,
  (VTBL_ENTRY)&_ZN8S3490C122v7Ev,
  (VTBL_ENTRY)&_ZN8S3490C122v8Ev,
};
extern void _ZN7S3490C62v2Ev();
extern void _ZN8S3490C12D1Ev();
extern void _ZN8S3490C12D0Ev();
extern void _ZN8S3490C122v7Ev();
extern void _ZN8S3490C122v8Ev();
static  VTBL_ENTRY _tg__ZTV8S3490C128S3490C11__8S3490C10[] = {
  ABISELECT(33472,23680),
  ABISELECT(32960,23320),
  ABISELECT(32936,23312),
  ABISELECT(32848,23260),
  ABISELECT(32832,23244),
  0,
  (VTBL_ENTRY)&(_ZTI8S3490C12[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  (VTBL_ENTRY)&_ZN8S3490C12D1Ev,
  (VTBL_ENTRY)&_ZN8S3490C12D0Ev,
  (VTBL_ENTRY)&_ZN8S3490C122v7Ev,
  (VTBL_ENTRY)&_ZN8S3490C122v8Ev,
};
extern void _ZN7S3490C62v2Ev();
extern void _ZN7S3490C9D1Ev();
extern void _ZN7S3490C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C98S3490C128S3490C11__A1__8S3490C10[] = {
  ABISELECT(33472,23680),
  ABISELECT(32960,23320),
  ABISELECT(32936,23312),
  ABISELECT(32848,23260),
  ABISELECT(32832,23244),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3490C9D1Ev,
  (VTBL_ENTRY)&_ZN7S3490C9D0Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C57S3490C98S3490C128S3490C11__A2__8S3490C10[] = {
  ABISELECT(32736,23192),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C5[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C77S3490C98S3490C128S3490C11__A2__8S3490C10[] = {
  ABISELECT(32240,22848),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C7[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C6__7S3490C77S3490C98S3490C128S3490C11__A2__8S3490C10[] = {
  0,
  ABISELECT(-32240,-22848),
  (VTBL_ENTRY)&(_ZTI7S3490C7[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C5__A__7S3490C98S3490C128S3490C11__A1__8S3490C10[] = {
  ABISELECT(32736,23192),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C7__A__7S3490C98S3490C128S3490C11__A1__8S3490C10[] = {
  ABISELECT(32240,22848),
  ABISELECT(-608,-412),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C6__A2__7S3490C98S3490C128S3490C11__A1__8S3490C10[] = {
  0,
  ABISELECT(-32848,-23260),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3490C3__7S3490C98S3490C128S3490C11__A1__8S3490C10[] = {
  ABISELECT(536,368),
  ABISELECT(-88,-52),
  ABISELECT(24,8),
  ABISELECT(-104,-68),
  ABISELECT(-32936,-23312),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C5__A1__7S3490C98S3490C128S3490C11__A1__8S3490C10[] = {
  0,
  ABISELECT(-128,-76),
  ABISELECT(-32960,-23320),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C7__A1__7S3490C98S3490C128S3490C11__A1__8S3490C10[] = {
  0,
  ABISELECT(-624,-420),
  ABISELECT(-33472,-23680),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C57S3490C9__8S3490C128S3490C11__8S3490C10[] = {
  ABISELECT(32736,23192),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI8S3490C12[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C77S3490C9__8S3490C128S3490C11__8S3490C10[] = {
  ABISELECT(32240,22848),
  ABISELECT(-608,-412),
  (VTBL_ENTRY)&(_ZTI8S3490C12[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C6__A2__8S3490C128S3490C11__8S3490C10[] = {
  0,
  ABISELECT(-32848,-23260),
  (VTBL_ENTRY)&(_ZTI8S3490C12[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3490C3__8S3490C128S3490C11__8S3490C10[] = {
  ABISELECT(536,368),
  ABISELECT(-88,-52),
  ABISELECT(24,8),
  ABISELECT(-104,-68),
  ABISELECT(-32936,-23312),
  (VTBL_ENTRY)&(_ZTI8S3490C12[0]),
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C5__A1__8S3490C128S3490C11__8S3490C10[] = {
  0,
  ABISELECT(-128,-76),
  ABISELECT(-32960,-23320),
  (VTBL_ENTRY)&(_ZTI8S3490C12[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C7__A1__8S3490C128S3490C11__8S3490C10[] = {
  0,
  ABISELECT(-624,-420),
  ABISELECT(-33472,-23680),
  (VTBL_ENTRY)&(_ZTI8S3490C12[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C82v4Ev();
extern void _ZN7S3490C8D1Ev();
extern void _ZN7S3490C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C88S3490C11__8S3490C10[] = {
  ABISELECT(29656,20980),
  ABISELECT(30192,21348),
  ABISELECT(29568,20928),
  ABISELECT(29680,20988),
  ABISELECT(29552,20912),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C8[0]),
  (VTBL_ENTRY)&_ZN7S3490C82v4Ev,
  (VTBL_ENTRY)&_ZN7S3490C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3490C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3490C37S3490C88S3490C11__A1__8S3490C10[] = {
  ABISELECT(30192,21348),
  ABISELECT(29568,20928),
  ABISELECT(29680,20988),
  ABISELECT(29552,20912),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C3[0]),
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C5__7S3490C37S3490C88S3490C11__A1__8S3490C10[] = {
  0,
  ABISELECT(-128,-76),
  ABISELECT(-29680,-20988),
  (VTBL_ENTRY)&(_ZTI7S3490C3[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C6__A1__7S3490C37S3490C88S3490C11__A1__8S3490C10[] = {
  0,
  ABISELECT(-29568,-20928),
  (VTBL_ENTRY)&(_ZTI7S3490C3[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C7__7S3490C37S3490C88S3490C11__A1__8S3490C10[] = {
  0,
  ABISELECT(-624,-420),
  ABISELECT(-30192,-21348),
  (VTBL_ENTRY)&(_ZTI7S3490C3[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C62v2Ev();
extern void _ZN7S3490C9D1Ev();
extern void _ZN7S3490C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C97S3490C88S3490C11__A2__8S3490C10[] = {
  ABISELECT(30176,21340),
  ABISELECT(29664,20980),
  ABISELECT(29640,20972),
  ABISELECT(29552,20920),
  ABISELECT(29536,20904),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3490C9D1Ev,
  (VTBL_ENTRY)&_ZN7S3490C9D0Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C57S3490C97S3490C88S3490C11__A3__8S3490C10[] = {
  ABISELECT(29440,20852),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C5[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C77S3490C97S3490C88S3490C11__A3__8S3490C10[] = {
  ABISELECT(28944,20508),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C7[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C6__7S3490C77S3490C97S3490C88S3490C11__A3__8S3490C10[] = {
  0,
  ABISELECT(-28944,-20508),
  (VTBL_ENTRY)&(_ZTI7S3490C7[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C5__A__7S3490C97S3490C88S3490C11__A2__8S3490C10[] = {
  ABISELECT(29440,20852),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C7__A__7S3490C97S3490C88S3490C11__A2__8S3490C10[] = {
  ABISELECT(28944,20508),
  ABISELECT(-608,-412),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C6__A2__7S3490C97S3490C88S3490C11__A2__8S3490C10[] = {
  0,
  ABISELECT(-29552,-20920),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3490C3__7S3490C97S3490C88S3490C11__A2__8S3490C10[] = {
  ABISELECT(536,368),
  ABISELECT(-88,-52),
  ABISELECT(24,8),
  ABISELECT(-104,-68),
  ABISELECT(-29640,-20972),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C5__A1__7S3490C97S3490C88S3490C11__A2__8S3490C10[] = {
  0,
  ABISELECT(-128,-76),
  ABISELECT(-29664,-20980),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C7__A1__7S3490C97S3490C88S3490C11__A2__8S3490C10[] = {
  0,
  ABISELECT(-624,-420),
  ABISELECT(-30176,-21340),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C57S3490C88S3490C11__A4__8S3490C10[] = {
  ABISELECT(26832,18964),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C5[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C5__7S3490C88S3490C11__8S3490C10[] = {
  0,
  ABISELECT(-128,-76),
  ABISELECT(-29680,-20988),
  (VTBL_ENTRY)&(_ZTI7S3490C8[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C6__A1__7S3490C88S3490C11__8S3490C10[] = {
  0,
  ABISELECT(-29568,-20928),
  (VTBL_ENTRY)&(_ZTI7S3490C8[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C7__7S3490C88S3490C11__8S3490C10[] = {
  0,
  ABISELECT(-624,-420),
  ABISELECT(-30192,-21348),
  (VTBL_ENTRY)&(_ZTI7S3490C8[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C62v2Ev();
extern void ABISELECT(_ZThn16_N7S3490C8D1Ev,_ZThn8_N7S3490C8D1Ev)();
extern void ABISELECT(_ZThn16_N7S3490C8D0Ev,_ZThn8_N7S3490C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3490C9__7S3490C88S3490C11__8S3490C10[] = {
  ABISELECT(30176,21340),
  ABISELECT(29664,20980),
  ABISELECT(29640,20972),
  ABISELECT(29552,20920),
  ABISELECT(29536,20904),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S3490C8[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S3490C8D1Ev,_ZThn8_N7S3490C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S3490C8D0Ev,_ZThn8_N7S3490C8D0Ev),
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C57S3490C9__A1__7S3490C88S3490C11__8S3490C10[] = {
  ABISELECT(29440,20852),
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI7S3490C8[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C77S3490C9__A1__7S3490C88S3490C11__8S3490C10[] = {
  ABISELECT(28944,20508),
  ABISELECT(-624,-420),
  (VTBL_ENTRY)&(_ZTI7S3490C8[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3490C3__A1__7S3490C88S3490C11__8S3490C10[] = {
  ABISELECT(536,368),
  ABISELECT(-88,-52),
  ABISELECT(24,8),
  ABISELECT(-104,-68),
  ABISELECT(-29656,-20980),
  (VTBL_ENTRY)&(_ZTI7S3490C8[0]),
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C5__A__7S3490C88S3490C11__8S3490C10[] = {
  ABISELECT(26832,18964),
  ABISELECT(-2720,-1948),
  (VTBL_ENTRY)&(_ZTI7S3490C8[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3490C3__8S3490C11__8S3490C10[] = {
  ABISELECT(536,368),
  ABISELECT(-88,-52),
  ABISELECT(24,8),
  ABISELECT(-104,-68),
  ABISELECT(-32936,-23312),
  (VTBL_ENTRY)&(_ZTI8S3490C11[0]),
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C5__8S3490C11__8S3490C10[] = {
  0,
  ABISELECT(-128,-76),
  ABISELECT(-32960,-23320),
  (VTBL_ENTRY)&(_ZTI8S3490C11[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C6__A1__8S3490C11__8S3490C10[] = {
  0,
  ABISELECT(-32848,-23260),
  (VTBL_ENTRY)&(_ZTI8S3490C11[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C7__8S3490C11__8S3490C10[] = {
  0,
  ABISELECT(-624,-420),
  ABISELECT(-33472,-23680),
  (VTBL_ENTRY)&(_ZTI8S3490C11[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C57S3490C98S3490C12__A1__8S3490C11__8S3490C10[] = {
  ABISELECT(32736,23192),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI8S3490C11[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C77S3490C98S3490C12__A1__8S3490C11__8S3490C10[] = {
  ABISELECT(32240,22848),
  ABISELECT(-608,-412),
  (VTBL_ENTRY)&(_ZTI8S3490C11[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C82v4Ev();
extern void ABISELECT(_ZThn3280_N8S3490C11D1Ev,_ZThn2332_N8S3490C11D1Ev)();
extern void ABISELECT(_ZThn3280_N8S3490C11D0Ev,_ZThn2332_N8S3490C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3490C8__8S3490C11__8S3490C10[] = {
  ABISELECT(29656,20980),
  ABISELECT(30192,21348),
  ABISELECT(29568,20928),
  ABISELECT(29680,20988),
  ABISELECT(29552,20912),
  ABISELECT(-3280,-2332),
  (VTBL_ENTRY)&(_ZTI8S3490C11[0]),
  (VTBL_ENTRY)&_ZN7S3490C82v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn3280_N8S3490C11D1Ev,_ZThn2332_N8S3490C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn3280_N8S3490C11D0Ev,_ZThn2332_N8S3490C11D0Ev),
};
extern void _ZN7S3490C62v2Ev();
extern void ABISELECT(_ZThn3296_N8S3490C11D1Ev,_ZThn2340_N8S3490C11D1Ev)();
extern void ABISELECT(_ZThn3296_N8S3490C11D0Ev,_ZThn2340_N8S3490C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3490C97S3490C8__A1__8S3490C11__8S3490C10[] = {
  ABISELECT(30176,21340),
  ABISELECT(29664,20980),
  ABISELECT(29640,20972),
  ABISELECT(29552,20920),
  ABISELECT(29536,20904),
  ABISELECT(-3296,-2340),
  (VTBL_ENTRY)&(_ZTI8S3490C11[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn3296_N8S3490C11D1Ev,_ZThn2340_N8S3490C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn3296_N8S3490C11D0Ev,_ZThn2340_N8S3490C11D0Ev),
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C57S3490C97S3490C8__A2__8S3490C11__8S3490C10[] = {
  ABISELECT(29440,20852),
  ABISELECT(-3392,-2392),
  (VTBL_ENTRY)&(_ZTI8S3490C11[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C77S3490C97S3490C8__A2__8S3490C11__8S3490C10[] = {
  ABISELECT(28944,20508),
  ABISELECT(-3904,-2752),
  (VTBL_ENTRY)&(_ZTI8S3490C11[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C57S3490C8__A3__8S3490C11__8S3490C10[] = {
  ABISELECT(26832,18964),
  ABISELECT(-6000,-4280),
  (VTBL_ENTRY)&(_ZTI8S3490C11[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C2D1Ev();
extern void _ZN7S3490C2D0Ev();
extern void _ZN7S3490C22v5Ev();
extern void _ZN7S3490C22v6Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C2__8S3490C10[] = {
  ABISELECT(20792,14704),
  ABISELECT(21328,15072),
  ABISELECT(20704,14652),
  ABISELECT(20816,14712),
  ABISELECT(20688,14636),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C2[0]),
  (VTBL_ENTRY)&_ZN7S3490C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3490C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3490C22v5Ev,
  (VTBL_ENTRY)&_ZN7S3490C22v6Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3490C37S3490C2__A2__8S3490C10[] = {
  ABISELECT(21328,15072),
  ABISELECT(20704,14652),
  ABISELECT(20816,14712),
  ABISELECT(20688,14636),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C3[0]),
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C5__7S3490C37S3490C2__A2__8S3490C10[] = {
  0,
  ABISELECT(-128,-76),
  ABISELECT(-20816,-14712),
  (VTBL_ENTRY)&(_ZTI7S3490C3[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C6__A1__7S3490C37S3490C2__A2__8S3490C10[] = {
  0,
  ABISELECT(-20704,-14652),
  (VTBL_ENTRY)&(_ZTI7S3490C3[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C7__7S3490C37S3490C2__A2__8S3490C10[] = {
  0,
  ABISELECT(-624,-420),
  ABISELECT(-21328,-15072),
  (VTBL_ENTRY)&(_ZTI7S3490C3[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C82v4Ev();
extern void _ZN7S3490C8D1Ev();
extern void _ZN7S3490C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C87S3490C2__A1__8S3490C10[] = {
  ABISELECT(20776,14696),
  ABISELECT(21312,15064),
  ABISELECT(20688,14644),
  ABISELECT(20800,14704),
  ABISELECT(20672,14628),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C8[0]),
  (VTBL_ENTRY)&_ZN7S3490C82v4Ev,
  (VTBL_ENTRY)&_ZN7S3490C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3490C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3490C37S3490C87S3490C2__A3__8S3490C10[] = {
  ABISELECT(21312,15064),
  ABISELECT(20688,14644),
  ABISELECT(20800,14704),
  ABISELECT(20672,14628),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C3[0]),
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C5__7S3490C37S3490C87S3490C2__A3__8S3490C10[] = {
  0,
  ABISELECT(-128,-76),
  ABISELECT(-20800,-14704),
  (VTBL_ENTRY)&(_ZTI7S3490C3[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C6__A1__7S3490C37S3490C87S3490C2__A3__8S3490C10[] = {
  0,
  ABISELECT(-20688,-14644),
  (VTBL_ENTRY)&(_ZTI7S3490C3[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C7__7S3490C37S3490C87S3490C2__A3__8S3490C10[] = {
  0,
  ABISELECT(-624,-420),
  ABISELECT(-21312,-15064),
  (VTBL_ENTRY)&(_ZTI7S3490C3[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C62v2Ev();
extern void _ZN7S3490C9D1Ev();
extern void _ZN7S3490C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C97S3490C87S3490C2__A3__8S3490C10[] = {
  ABISELECT(21296,15056),
  ABISELECT(20784,14696),
  ABISELECT(20760,14688),
  ABISELECT(20672,14636),
  ABISELECT(20656,14620),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3490C9D1Ev,
  (VTBL_ENTRY)&_ZN7S3490C9D0Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C57S3490C97S3490C87S3490C2__A5__8S3490C10[] = {
  ABISELECT(20560,14568),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C5[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C77S3490C97S3490C87S3490C2__A4__8S3490C10[] = {
  ABISELECT(20064,14224),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C7[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C6__7S3490C77S3490C97S3490C87S3490C2__A4__8S3490C10[] = {
  0,
  ABISELECT(-20064,-14224),
  (VTBL_ENTRY)&(_ZTI7S3490C7[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C5__A__7S3490C97S3490C87S3490C2__A3__8S3490C10[] = {
  ABISELECT(20560,14568),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C7__A__7S3490C97S3490C87S3490C2__A3__8S3490C10[] = {
  ABISELECT(20064,14224),
  ABISELECT(-608,-412),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C6__A2__7S3490C97S3490C87S3490C2__A3__8S3490C10[] = {
  0,
  ABISELECT(-20672,-14636),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3490C3__7S3490C97S3490C87S3490C2__A3__8S3490C10[] = {
  ABISELECT(536,368),
  ABISELECT(-88,-52),
  ABISELECT(24,8),
  ABISELECT(-104,-68),
  ABISELECT(-20760,-14688),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C5__A1__7S3490C97S3490C87S3490C2__A3__8S3490C10[] = {
  0,
  ABISELECT(-128,-76),
  ABISELECT(-20784,-14696),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C7__A1__7S3490C97S3490C87S3490C2__A3__8S3490C10[] = {
  0,
  ABISELECT(-624,-420),
  ABISELECT(-21296,-15056),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C57S3490C87S3490C2__A6__8S3490C10[] = {
  ABISELECT(17952,12680),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C5[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C5__7S3490C87S3490C2__A1__8S3490C10[] = {
  0,
  ABISELECT(-128,-76),
  ABISELECT(-20800,-14704),
  (VTBL_ENTRY)&(_ZTI7S3490C8[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C6__A1__7S3490C87S3490C2__A1__8S3490C10[] = {
  0,
  ABISELECT(-20688,-14644),
  (VTBL_ENTRY)&(_ZTI7S3490C8[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C7__7S3490C87S3490C2__A1__8S3490C10[] = {
  0,
  ABISELECT(-624,-420),
  ABISELECT(-21312,-15064),
  (VTBL_ENTRY)&(_ZTI7S3490C8[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C62v2Ev();
extern void ABISELECT(_ZThn16_N7S3490C8D1Ev,_ZThn8_N7S3490C8D1Ev)();
extern void ABISELECT(_ZThn16_N7S3490C8D0Ev,_ZThn8_N7S3490C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3490C9__7S3490C87S3490C2__A1__8S3490C10[] = {
  ABISELECT(21296,15056),
  ABISELECT(20784,14696),
  ABISELECT(20760,14688),
  ABISELECT(20672,14636),
  ABISELECT(20656,14620),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S3490C8[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S3490C8D1Ev,_ZThn8_N7S3490C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S3490C8D0Ev,_ZThn8_N7S3490C8D0Ev),
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C57S3490C9__A1__7S3490C87S3490C2__A1__8S3490C10[] = {
  ABISELECT(20560,14568),
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI7S3490C8[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C77S3490C9__A1__7S3490C87S3490C2__A1__8S3490C10[] = {
  ABISELECT(20064,14224),
  ABISELECT(-624,-420),
  (VTBL_ENTRY)&(_ZTI7S3490C8[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3490C3__A1__7S3490C87S3490C2__A1__8S3490C10[] = {
  ABISELECT(536,368),
  ABISELECT(-88,-52),
  ABISELECT(24,8),
  ABISELECT(-104,-68),
  ABISELECT(-20776,-14696),
  (VTBL_ENTRY)&(_ZTI7S3490C8[0]),
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C5__A__7S3490C87S3490C2__A1__8S3490C10[] = {
  ABISELECT(17952,12680),
  ABISELECT(-2720,-1948),
  (VTBL_ENTRY)&(_ZTI7S3490C8[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C5__7S3490C2__8S3490C10[] = {
  0,
  ABISELECT(-128,-76),
  ABISELECT(-20816,-14712),
  (VTBL_ENTRY)&(_ZTI7S3490C2[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C6__A1__7S3490C2__8S3490C10[] = {
  0,
  ABISELECT(-20704,-14652),
  (VTBL_ENTRY)&(_ZTI7S3490C2[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C7__7S3490C2__8S3490C10[] = {
  0,
  ABISELECT(-624,-420),
  ABISELECT(-21328,-15072),
  (VTBL_ENTRY)&(_ZTI7S3490C2[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C82v4Ev();
extern void ABISELECT(_ZThn16_N7S3490C2D1Ev,_ZThn8_N7S3490C2D1Ev)();
extern void ABISELECT(_ZThn16_N7S3490C2D0Ev,_ZThn8_N7S3490C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3490C8__7S3490C2__8S3490C10[] = {
  ABISELECT(20776,14696),
  ABISELECT(21312,15064),
  ABISELECT(20688,14644),
  ABISELECT(20800,14704),
  ABISELECT(20672,14628),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S3490C2[0]),
  (VTBL_ENTRY)&_ZN7S3490C82v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S3490C2D1Ev,_ZThn8_N7S3490C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S3490C2D0Ev,_ZThn8_N7S3490C2D0Ev),
};
extern void _ZN7S3490C62v2Ev();
extern void ABISELECT(_ZThn32_N7S3490C2D1Ev,_ZThn16_N7S3490C2D1Ev)();
extern void ABISELECT(_ZThn32_N7S3490C2D0Ev,_ZThn16_N7S3490C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3490C97S3490C8__7S3490C2__8S3490C10[] = {
  ABISELECT(21296,15056),
  ABISELECT(20784,14696),
  ABISELECT(20760,14688),
  ABISELECT(20672,14636),
  ABISELECT(20656,14620),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S3490C2[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N7S3490C2D1Ev,_ZThn16_N7S3490C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N7S3490C2D0Ev,_ZThn16_N7S3490C2D0Ev),
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C57S3490C97S3490C8__A1__7S3490C2__8S3490C10[] = {
  ABISELECT(20560,14568),
  ABISELECT(-128,-68),
  (VTBL_ENTRY)&(_ZTI7S3490C2[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C77S3490C97S3490C8__A1__7S3490C2__8S3490C10[] = {
  ABISELECT(20064,14224),
  ABISELECT(-640,-428),
  (VTBL_ENTRY)&(_ZTI7S3490C2[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3490C3__A2__7S3490C2__8S3490C10[] = {
  ABISELECT(536,368),
  ABISELECT(-88,-52),
  ABISELECT(24,8),
  ABISELECT(-104,-68),
  ABISELECT(-20792,-14704),
  (VTBL_ENTRY)&(_ZTI7S3490C2[0]),
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C57S3490C8__A2__7S3490C2__8S3490C10[] = {
  ABISELECT(17952,12680),
  ABISELECT(-2736,-1956),
  (VTBL_ENTRY)&(_ZTI7S3490C2[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C62v2Ev();
extern void _ZN7S3490C9D1Ev();
extern void _ZN7S3490C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C9__8S3490C10[] = {
  ABISELECT(3344,2376),
  ABISELECT(2832,2016),
  ABISELECT(2808,2008),
  ABISELECT(2720,1956),
  ABISELECT(2704,1940),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3490C9D1Ev,
  (VTBL_ENTRY)&_ZN7S3490C9D0Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C57S3490C9__8S3490C10[] = {
  ABISELECT(2608,1888),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C5[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C77S3490C9__8S3490C10[] = {
  ABISELECT(2112,1544),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C7[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C6__7S3490C77S3490C9__8S3490C10[] = {
  0,
  ABISELECT(-2112,-1544),
  (VTBL_ENTRY)&(_ZTI7S3490C7[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C5__A__7S3490C9__8S3490C10[] = {
  ABISELECT(2608,1888),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C7__A__7S3490C9__8S3490C10[] = {
  ABISELECT(2112,1544),
  ABISELECT(-608,-412),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C6__A2__7S3490C9__8S3490C10[] = {
  0,
  ABISELECT(-2720,-1956),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3490C3__7S3490C9__8S3490C10[] = {
  ABISELECT(536,368),
  ABISELECT(-88,-52),
  ABISELECT(24,8),
  ABISELECT(-104,-68),
  ABISELECT(-2808,-2008),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C5__A1__7S3490C9__8S3490C10[] = {
  0,
  ABISELECT(-128,-76),
  ABISELECT(-2832,-2016),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C7__A1__7S3490C9__8S3490C10[] = {
  0,
  ABISELECT(-624,-420),
  ABISELECT(-3344,-2376),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3490C3__8S3490C10[] = {
  ABISELECT(536,368),
  ABISELECT(-88,-52),
  ABISELECT(24,8),
  ABISELECT(-104,-68),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C3[0]),
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C5__7S3490C3__8S3490C10[] = {
  0,
  ABISELECT(-128,-76),
  ABISELECT(-24,-8),
  (VTBL_ENTRY)&(_ZTI7S3490C3[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C6__A1__7S3490C3__8S3490C10[] = {
  0,
  ABISELECT(88,52),
  (VTBL_ENTRY)&(_ZTI7S3490C3[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C7__7S3490C3__8S3490C10[] = {
  0,
  ABISELECT(-624,-420),
  ABISELECT(-536,-368),
  (VTBL_ENTRY)&(_ZTI7S3490C3[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C5__A1__8S3490C10[] = {
  ABISELECT(-128,-76),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C5[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C7__A1__8S3490C10[] = {
  ABISELECT(-624,-420),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C7[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C6__7S3490C7__A1__8S3490C10[] = {
  0,
  ABISELECT(624,420),
  (VTBL_ENTRY)&(_ZTI7S3490C7[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
static  VTT_ENTRY vtt_S3490C10[] = {
  {&(_ZTV8S3490C10[8]),  8,143},
  {&(_tg__ZTV8S3490C11__8S3490C10[7]),  7,12},
  {&(_tg__ZTV8S3490C128S3490C11__8S3490C10[7]),  7,12},
  {&(_tg__ZTV7S3490C98S3490C128S3490C11__A1__8S3490C10[7]),  7,10},
  {&(_tg__ZTV7S3490C57S3490C98S3490C128S3490C11__A2__8S3490C10[3]),  3,4},
  {&(_tg__ZTV7S3490C77S3490C98S3490C128S3490C11__A2__8S3490C10[3]),  3,4},
  {&(_tg__ZTV7S3490C6__7S3490C77S3490C98S3490C128S3490C11__A2__8S3490C10[3]),  3,4},
  {&(_tg__ZTV7S3490C5__A__7S3490C98S3490C128S3490C11__A1__8S3490C10[3]),  3,4},
  {&(_tg__ZTV7S3490C7__A__7S3490C98S3490C128S3490C11__A1__8S3490C10[3]),  3,4},
  {&(_tg__ZTV7S3490C6__A2__7S3490C98S3490C128S3490C11__A1__8S3490C10[3]),  3,4},
  {&(_tg__ZTV7S3490C3__7S3490C98S3490C128S3490C11__A1__8S3490C10[6]),  6,6},
  {&(_tg__ZTV7S3490C5__A1__7S3490C98S3490C128S3490C11__A1__8S3490C10[4]),  4,5},
  {&(_tg__ZTV7S3490C7__A1__7S3490C98S3490C128S3490C11__A1__8S3490C10[4]),  4,5},
  {&(_tg__ZTV7S3490C57S3490C9__8S3490C128S3490C11__8S3490C10[3]),  3,4},
  {&(_tg__ZTV7S3490C77S3490C9__8S3490C128S3490C11__8S3490C10[3]),  3,4},
  {&(_tg__ZTV7S3490C6__A2__8S3490C128S3490C11__8S3490C10[3]),  3,4},
  {&(_tg__ZTV7S3490C3__8S3490C128S3490C11__8S3490C10[6]),  6,6},
  {&(_tg__ZTV7S3490C5__A1__8S3490C128S3490C11__8S3490C10[4]),  4,5},
  {&(_tg__ZTV7S3490C7__A1__8S3490C128S3490C11__8S3490C10[4]),  4,5},
  {&(_tg__ZTV7S3490C88S3490C11__8S3490C10[7]),  7,10},
  {&(_tg__ZTV7S3490C37S3490C88S3490C11__A1__8S3490C10[6]),  6,6},
  {&(_tg__ZTV7S3490C5__7S3490C37S3490C88S3490C11__A1__8S3490C10[4]),  4,5},
  {&(_tg__ZTV7S3490C6__A1__7S3490C37S3490C88S3490C11__A1__8S3490C10[3]),  3,4},
  {&(_tg__ZTV7S3490C7__7S3490C37S3490C88S3490C11__A1__8S3490C10[4]),  4,5},
  {&(_tg__ZTV7S3490C97S3490C88S3490C11__A2__8S3490C10[7]),  7,10},
  {&(_tg__ZTV7S3490C57S3490C97S3490C88S3490C11__A3__8S3490C10[3]),  3,4},
  {&(_tg__ZTV7S3490C77S3490C97S3490C88S3490C11__A3__8S3490C10[3]),  3,4},
  {&(_tg__ZTV7S3490C6__7S3490C77S3490C97S3490C88S3490C11__A3__8S3490C10[3]),  3,4},
  {&(_tg__ZTV7S3490C5__A__7S3490C97S3490C88S3490C11__A2__8S3490C10[3]),  3,4},
  {&(_tg__ZTV7S3490C7__A__7S3490C97S3490C88S3490C11__A2__8S3490C10[3]),  3,4},
  {&(_tg__ZTV7S3490C6__A2__7S3490C97S3490C88S3490C11__A2__8S3490C10[3]),  3,4},
  {&(_tg__ZTV7S3490C3__7S3490C97S3490C88S3490C11__A2__8S3490C10[6]),  6,6},
  {&(_tg__ZTV7S3490C5__A1__7S3490C97S3490C88S3490C11__A2__8S3490C10[4]),  4,5},
  {&(_tg__ZTV7S3490C7__A1__7S3490C97S3490C88S3490C11__A2__8S3490C10[4]),  4,5},
  {&(_tg__ZTV7S3490C57S3490C88S3490C11__A4__8S3490C10[3]),  3,4},
  {&(_tg__ZTV7S3490C5__7S3490C88S3490C11__8S3490C10[4]),  4,5},
  {&(_tg__ZTV7S3490C6__A1__7S3490C88S3490C11__8S3490C10[3]),  3,4},
  {&(_tg__ZTV7S3490C7__7S3490C88S3490C11__8S3490C10[4]),  4,5},
  {&(_tg__ZTV7S3490C9__7S3490C88S3490C11__8S3490C10[7]),  7,10},
  {&(_tg__ZTV7S3490C57S3490C9__A1__7S3490C88S3490C11__8S3490C10[3]),  3,4},
  {&(_tg__ZTV7S3490C77S3490C9__A1__7S3490C88S3490C11__8S3490C10[3]),  3,4},
  {&(_tg__ZTV7S3490C3__A1__7S3490C88S3490C11__8S3490C10[6]),  6,6},
  {&(_tg__ZTV7S3490C5__A__7S3490C88S3490C11__8S3490C10[3]),  3,4},
  {&(_tg__ZTV7S3490C3__8S3490C11__8S3490C10[6]),  6,6},
  {&(_tg__ZTV7S3490C5__8S3490C11__8S3490C10[4]),  4,5},
  {&(_tg__ZTV7S3490C6__A1__8S3490C11__8S3490C10[3]),  3,4},
  {&(_tg__ZTV7S3490C7__8S3490C11__8S3490C10[4]),  4,5},
  {&(_tg__ZTV7S3490C57S3490C98S3490C12__A1__8S3490C11__8S3490C10[3]),  3,4},
  {&(_tg__ZTV7S3490C77S3490C98S3490C12__A1__8S3490C11__8S3490C10[3]),  3,4},
  {&(_tg__ZTV7S3490C8__8S3490C11__8S3490C10[7]),  7,10},
  {&(_tg__ZTV7S3490C97S3490C8__A1__8S3490C11__8S3490C10[7]),  7,10},
  {&(_tg__ZTV7S3490C57S3490C97S3490C8__A2__8S3490C11__8S3490C10[3]),  3,4},
  {&(_tg__ZTV7S3490C77S3490C97S3490C8__A2__8S3490C11__8S3490C10[3]),  3,4},
  {&(_tg__ZTV7S3490C57S3490C8__A3__8S3490C11__8S3490C10[3]),  3,4},
  {&(_tg__ZTV7S3490C2__8S3490C10[7]),  7,11},
  {&(_tg__ZTV7S3490C37S3490C2__A2__8S3490C10[6]),  6,6},
  {&(_tg__ZTV7S3490C5__7S3490C37S3490C2__A2__8S3490C10[4]),  4,5},
  {&(_tg__ZTV7S3490C6__A1__7S3490C37S3490C2__A2__8S3490C10[3]),  3,4},
  {&(_tg__ZTV7S3490C7__7S3490C37S3490C2__A2__8S3490C10[4]),  4,5},
  {&(_tg__ZTV7S3490C87S3490C2__A1__8S3490C10[7]),  7,10},
  {&(_tg__ZTV7S3490C37S3490C87S3490C2__A3__8S3490C10[6]),  6,6},
  {&(_tg__ZTV7S3490C5__7S3490C37S3490C87S3490C2__A3__8S3490C10[4]),  4,5},
  {&(_tg__ZTV7S3490C6__A1__7S3490C37S3490C87S3490C2__A3__8S3490C10[3]),  3,4},
  {&(_tg__ZTV7S3490C7__7S3490C37S3490C87S3490C2__A3__8S3490C10[4]),  4,5},
  {&(_tg__ZTV7S3490C97S3490C87S3490C2__A3__8S3490C10[7]),  7,10},
  {&(_tg__ZTV7S3490C57S3490C97S3490C87S3490C2__A5__8S3490C10[3]),  3,4},
  {&(_tg__ZTV7S3490C77S3490C97S3490C87S3490C2__A4__8S3490C10[3]),  3,4},
  {&(_tg__ZTV7S3490C6__7S3490C77S3490C97S3490C87S3490C2__A4__8S3490C10[3]),  3,4},
  {&(_tg__ZTV7S3490C5__A__7S3490C97S3490C87S3490C2__A3__8S3490C10[3]),  3,4},
  {&(_tg__ZTV7S3490C7__A__7S3490C97S3490C87S3490C2__A3__8S3490C10[3]),  3,4},
  {&(_tg__ZTV7S3490C6__A2__7S3490C97S3490C87S3490C2__A3__8S3490C10[3]),  3,4},
  {&(_tg__ZTV7S3490C3__7S3490C97S3490C87S3490C2__A3__8S3490C10[6]),  6,6},
  {&(_tg__ZTV7S3490C5__A1__7S3490C97S3490C87S3490C2__A3__8S3490C10[4]),  4,5},
  {&(_tg__ZTV7S3490C7__A1__7S3490C97S3490C87S3490C2__A3__8S3490C10[4]),  4,5},
  {&(_tg__ZTV7S3490C57S3490C87S3490C2__A6__8S3490C10[3]),  3,4},
  {&(_tg__ZTV7S3490C5__7S3490C87S3490C2__A1__8S3490C10[4]),  4,5},
  {&(_tg__ZTV7S3490C6__A1__7S3490C87S3490C2__A1__8S3490C10[3]),  3,4},
  {&(_tg__ZTV7S3490C7__7S3490C87S3490C2__A1__8S3490C10[4]),  4,5},
  {&(_tg__ZTV7S3490C9__7S3490C87S3490C2__A1__8S3490C10[7]),  7,10},
  {&(_tg__ZTV7S3490C57S3490C9__A1__7S3490C87S3490C2__A1__8S3490C10[3]),  3,4},
  {&(_tg__ZTV7S3490C77S3490C9__A1__7S3490C87S3490C2__A1__8S3490C10[3]),  3,4},
  {&(_tg__ZTV7S3490C3__A1__7S3490C87S3490C2__A1__8S3490C10[6]),  6,6},
  {&(_tg__ZTV7S3490C5__A__7S3490C87S3490C2__A1__8S3490C10[3]),  3,4},
  {&(_tg__ZTV7S3490C5__7S3490C2__8S3490C10[4]),  4,5},
  {&(_tg__ZTV7S3490C6__A1__7S3490C2__8S3490C10[3]),  3,4},
  {&(_tg__ZTV7S3490C7__7S3490C2__8S3490C10[4]),  4,5},
  {&(_tg__ZTV7S3490C8__7S3490C2__8S3490C10[7]),  7,10},
  {&(_tg__ZTV7S3490C97S3490C8__7S3490C2__8S3490C10[7]),  7,10},
  {&(_tg__ZTV7S3490C57S3490C97S3490C8__A1__7S3490C2__8S3490C10[3]),  3,4},
  {&(_tg__ZTV7S3490C77S3490C97S3490C8__A1__7S3490C2__8S3490C10[3]),  3,4},
  {&(_tg__ZTV7S3490C3__A2__7S3490C2__8S3490C10[6]),  6,6},
  {&(_tg__ZTV7S3490C57S3490C8__A2__7S3490C2__8S3490C10[3]),  3,4},
  {&(_ZTV8S3490C10[112]),  112,143},
  {&(_ZTV8S3490C10[118]),  118,143},
  {&(_ZTV8S3490C10[122]),  122,143},
  {&(_ZTV8S3490C10[126]),  126,143},
  {&(_ZTV8S3490C10[133]),  133,143},
  {&(_ZTV8S3490C10[137]),  137,143},
  {&(_ZTV8S3490C10[142]),  142,143},
  {&(_ZTV8S3490C10[16]),  16,143},
  {&(_ZTV8S3490C10[20]),  20,143},
  {&(_ZTV8S3490C10[28]),  28,143},
  {&(_ZTV8S3490C10[38]),  38,143},
  {&(_ZTV8S3490C10[44]),  44,143},
  {&(_ZTV8S3490C10[48]),  48,143},
  {&(_ZTV8S3490C10[52]),  52,143},
  {&(_ZTV8S3490C10[63]),  63,143},
  {&(_ZTV8S3490C10[74]),  74,143},
  {&(_ZTV8S3490C10[84]),  84,143},
  {&(_ZTV8S3490C10[90]),  90,143},
  {&(_ZTV8S3490C10[94]),  94,143},
  {&(_ZTV8S3490C10[98]),  98,143},
  {&(_tg__ZTV7S3490C9__8S3490C10[7]),  7,10},
  {&(_tg__ZTV7S3490C57S3490C9__8S3490C10[3]),  3,4},
  {&(_tg__ZTV7S3490C77S3490C9__8S3490C10[3]),  3,4},
  {&(_tg__ZTV7S3490C6__7S3490C77S3490C9__8S3490C10[3]),  3,4},
  {&(_tg__ZTV7S3490C5__A__7S3490C9__8S3490C10[3]),  3,4},
  {&(_tg__ZTV7S3490C7__A__7S3490C9__8S3490C10[3]),  3,4},
  {&(_tg__ZTV7S3490C6__A2__7S3490C9__8S3490C10[3]),  3,4},
  {&(_tg__ZTV7S3490C3__7S3490C9__8S3490C10[6]),  6,6},
  {&(_tg__ZTV7S3490C5__A1__7S3490C9__8S3490C10[4]),  4,5},
  {&(_tg__ZTV7S3490C7__A1__7S3490C9__8S3490C10[4]),  4,5},
  {&(_tg__ZTV7S3490C3__8S3490C10[6]),  6,6},
  {&(_tg__ZTV7S3490C5__7S3490C3__8S3490C10[4]),  4,5},
  {&(_tg__ZTV7S3490C6__A1__7S3490C3__8S3490C10[3]),  3,4},
  {&(_tg__ZTV7S3490C7__7S3490C3__8S3490C10[4]),  4,5},
  {&(_tg__ZTV7S3490C5__A1__8S3490C10[3]),  3,4},
  {&(_tg__ZTV7S3490C7__A1__8S3490C10[3]),  3,4},
  {&(_tg__ZTV7S3490C6__7S3490C7__A1__8S3490C10[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S3490C10[];
extern  VTBL_ENTRY _ZTV8S3490C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3490C10[];
static VTBL_ENTRY alt_thunk_names1[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S3490C10D0Ev,_ZTv0_n36_N8S3490C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn30128_N8S3490C10D0Ev,_ZThn21304_N8S3490C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S3490C10D1Ev,_ZTv0_n36_N8S3490C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn30128_N8S3490C10D1Ev,_ZThn21304_N8S3490C10D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3490C10 = {  "S3490C10", // class name
  bases_S3490C10, 40,
  &(vtc_S3490C10[0]), // expected_vtbl_contents
  &(vtt_S3490C10[0]), // expected_vtt_contents
  ABISELECT(33760,23912), // object size
  NSPAIRA(_ZTI8S3490C10),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S3490C10),143, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3490C10),129, //virtual table table var
  39, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names1,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3490C15  : virtual S3490C8 , S3490C5 , S3490C7 , S3490C3 {
  void *s3490c15f0;
  ~S3490C15(); // tgen
  S3490C15(); // tgen
};
//SIG(-1 S3490C15) C1{ VBC2{ BC3{ VBC4{ m FL Fi Fc} VBC5{ BC6{ v1 FD Fi:3 Fc:8 FD[2] FL} VBC4 Fc[10] Fi FC7{ VBC6 v2 FC4 FL FC4[7] Fp FL FC4 Fp Fc Fs Fi FC6} FL} VBC6 VBC7 Fp} BC8{ BC6 VBC4 BC5 BC7 VBC3 vd FC7 FC3 Fp Fi FC6 FC7} BC5 BC6 v3 FC5[2] FC6 Fi FC4 Fp[10] Fi[2] FL FD FL Fi} BC5 BC7 BC3 Fp}


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

static void Test_S3490C15()
{
  extern Class_Descriptor cd_S3490C15;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(401,1135)];
    init_test(&cd_S3490C15, buf);
    S3490C15 *dp, &lv = *(dp=new (buf) S3490C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(6400,4536), "sizeof(S3490C15)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3490C15)");
    /*is_ambiguous_... S3490C8::S3490C3 */ AMB_check_base_class_offset(lv, (S3490C4*)(S3490C3*)(S3490C8*), ABISELECT(5472,3868), "S3490C15");
    /*is_ambiguous_... S3490C15::S3490C5 */ AMB_check_base_class_offset(lv, (S3490C4*)(S3490C5*), ABISELECT(5472,3868), "S3490C15");
    check_base_class_offset(lv, (S3490C4*)(S3490C9*)(S3490C8*), ABISELECT(5472,3868), "S3490C15");
    /*is_ambiguous_... S3490C9::S3490C5 */ AMB_check_base_class_offset(lv, (S3490C4*)(S3490C5*)(S3490C9*)(S3490C8*), ABISELECT(5472,3868), "S3490C15");
    /*is_ambiguous_... S3490C15::S3490C3 */ AMB_check_base_class_offset(lv, (S3490C4*)(S3490C3*), ABISELECT(5472,3868), "S3490C15");
    /*is_ambiguous_... S3490C8::S3490C5 */ AMB_check_base_class_offset(lv, (S3490C4*)(S3490C5*)(S3490C8*), ABISELECT(5472,3868), "S3490C15");
    /*is_ambiguous_... S3490C15::S3490C5 */ AMB_check_base_class_offset(lv, (S3490C4*)(S3490C5*), ABISELECT(5472,3868), "S3490C15");
    /*is_ambiguous_... S3490C15::S3490C3 */ AMB_check_base_class_offset(lv, (S3490C4*)(S3490C3*), ABISELECT(5472,3868), "S3490C15");
    /*is_ambiguous_... S3490C15::S3490C5 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C5*), ABISELECT(5488,3884), "S3490C15");
    /*is_ambiguous_... S3490C8::S3490C3 */ AMB_check_base_class_offset(lv, (S3490C5*)(S3490C3*)(S3490C8*), ABISELECT(5488,3884), "S3490C15");
    /*is_ambiguous_... S3490C15::S3490C3 */ AMB_check_base_class_offset(lv, (S3490C5*)(S3490C3*), ABISELECT(5488,3884), "S3490C15");
    /*is_ambiguous_... S3490C15::S3490C3 */ AMB_check_base_class_offset(lv, (S3490C5*)(S3490C3*), ABISELECT(5488,3884), "S3490C15");
    /*is_ambiguous_... S3490C8::S3490C3 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C3*)(S3490C8*), ABISELECT(6000,4244), "S3490C15");
    /*is_ambiguous_... S3490C15::S3490C7 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C7*), ABISELECT(6000,4244), "S3490C15");
    /*is_ambiguous_... S3490C9::S3490C7 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C7*)(S3490C9*)(S3490C8*), ABISELECT(6000,4244), "S3490C15");
    /*is_ambiguous_... S3490C15::S3490C3 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C3*), ABISELECT(6000,4244), "S3490C15");
    /*is_ambiguous_... S3490C15::S3490C7 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C7*), ABISELECT(6000,4244), "S3490C15");
    /*is_ambiguous_... S3490C15::S3490C3 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C3*), ABISELECT(6000,4244), "S3490C15");
    /*is_ambiguous_... S3490C8::S3490C3 */ AMB_check_base_class_offset(lv, (S3490C7*)(S3490C3*)(S3490C8*), ABISELECT(6096,4296), "S3490C15");
    /*is_ambiguous_... S3490C15::S3490C3 */ AMB_check_base_class_offset(lv, (S3490C7*)(S3490C3*), ABISELECT(6096,4296), "S3490C15");
    /*is_ambiguous_... S3490C15::S3490C3 */ AMB_check_base_class_offset(lv, (S3490C7*)(S3490C3*), ABISELECT(6096,4296), "S3490C15");
    /*is_ambiguous_... S3490C8::S3490C3 */ AMB_check_base_class_offset(lv, (S3490C3*)(S3490C8*), ABISELECT(832,604), "S3490C15");
    /*is_ambiguous_... S3490C9::S3490C6 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C9*)(S3490C8*), ABISELECT(848,612), "S3490C15");
    /*is_ambiguous_... S3490C9::S3490C5 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C5*)(S3490C9*)(S3490C8*), ABISELECT(944,664), "S3490C15");
    /*is_ambiguous_... S3490C9::S3490C5 */ AMB_check_base_class_offset(lv, (S3490C5*)(S3490C9*)(S3490C8*), ABISELECT(944,664), "S3490C15");
    /*is_ambiguous_... S3490C9::S3490C7 */ AMB_check_base_class_offset(lv, (S3490C7*)(S3490C9*)(S3490C8*), ABISELECT(1456,1024), "S3490C15");
    check_base_class_offset(lv, (S3490C3*)(S3490C9*)(S3490C8*), ABISELECT(6384,4528), "S3490C15");
    check_base_class_offset(lv, (S3490C9*)(S3490C8*), ABISELECT(848,612), "S3490C15");
    /*is_ambiguous_... S3490C8::S3490C5 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C5*)(S3490C8*), ABISELECT(3552,2552), "S3490C15");
    /*is_ambiguous_... S3490C8::S3490C5 */ AMB_check_base_class_offset(lv, (S3490C5*)(S3490C8*), ABISELECT(3552,2552), "S3490C15");
    /*is_ambiguous_... S3490C8::S3490C6 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C8*), ABISELECT(4064,2912), "S3490C15");
    check_base_class_offset(lv, (S3490C8*), ABISELECT(832,604), "S3490C15");
    /*is_ambiguous_... S3490C15::S3490C5 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C5*), 0, "S3490C15");
    /*is_ambiguous_... S3490C15::S3490C5 */ AMB_check_base_class_offset(lv, (S3490C5*), 0, "S3490C15");
    /*is_ambiguous_... S3490C15::S3490C7 */ AMB_check_base_class_offset(lv, (S3490C7*), ABISELECT(512,360), "S3490C15");
    /*is_ambiguous_... S3490C15::S3490C3 */ AMB_check_base_class_offset(lv, (S3490C3*), ABISELECT(800,592), "S3490C15");
    check_field_offset(lv, s3490c15f0, ABISELECT(816,600), "S3490C15.s3490c15f0");
    test_class_info(&lv, &cd_S3490C15);
    dp->~S3490C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3490C15(Test_S3490C15, "S3490C15", ABISELECT(6400,4536));

#else // __cplusplus

extern void _ZN8S3490C15C1Ev();
extern void _ZN8S3490C15D1Ev();
Name_Map name_map_S3490C15[] = {
  NSPAIR(_ZN8S3490C15C1Ev),
  NSPAIR(_ZN8S3490C15D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3490C4;
extern VTBL_ENTRY _ZTI7S3490C4[];
extern Class_Descriptor cd_S3490C6;
extern VTBL_ENTRY _ZTI7S3490C6[];
extern  VTBL_ENTRY _ZTV7S3490C6[];
extern Class_Descriptor cd_S3490C5;
extern VTBL_ENTRY _ZTI7S3490C5[];
extern  VTBL_ENTRY _ZTV7S3490C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C5[];
extern Class_Descriptor cd_S3490C6;
extern VTBL_ENTRY _ZTI7S3490C6[];
extern  VTBL_ENTRY _ZTV7S3490C6[];
extern Class_Descriptor cd_S3490C7;
extern VTBL_ENTRY _ZTI7S3490C7[];
extern  VTBL_ENTRY _ZTV7S3490C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C7[];
extern Class_Descriptor cd_S3490C3;
extern VTBL_ENTRY _ZTI7S3490C3[];
extern  VTBL_ENTRY _ZTV7S3490C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C3[];
extern Class_Descriptor cd_S3490C6;
extern VTBL_ENTRY _ZTI7S3490C6[];
extern  VTBL_ENTRY _ZTV7S3490C6[];
extern Class_Descriptor cd_S3490C6;
extern VTBL_ENTRY _ZTI7S3490C6[];
extern  VTBL_ENTRY _ZTV7S3490C6[];
extern Class_Descriptor cd_S3490C5;
extern VTBL_ENTRY _ZTI7S3490C5[];
extern  VTBL_ENTRY _ZTV7S3490C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C5[];
extern Class_Descriptor cd_S3490C7;
extern VTBL_ENTRY _ZTI7S3490C7[];
extern  VTBL_ENTRY _ZTV7S3490C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C7[];
extern Class_Descriptor cd_S3490C3;
extern VTBL_ENTRY _ZTI7S3490C3[];
extern  VTBL_ENTRY _ZTV7S3490C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C3[];
extern Class_Descriptor cd_S3490C9;
extern VTBL_ENTRY _ZTI7S3490C9[];
extern  VTBL_ENTRY _ZTV7S3490C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C9[];
extern Class_Descriptor cd_S3490C6;
extern VTBL_ENTRY _ZTI7S3490C6[];
extern  VTBL_ENTRY _ZTV7S3490C6[];
extern Class_Descriptor cd_S3490C5;
extern VTBL_ENTRY _ZTI7S3490C5[];
extern  VTBL_ENTRY _ZTV7S3490C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C5[];
extern Class_Descriptor cd_S3490C6;
extern VTBL_ENTRY _ZTI7S3490C6[];
extern  VTBL_ENTRY _ZTV7S3490C6[];
extern Class_Descriptor cd_S3490C8;
extern VTBL_ENTRY _ZTI7S3490C8[];
extern  VTBL_ENTRY _ZTV7S3490C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C8[];
extern Class_Descriptor cd_S3490C6;
extern VTBL_ENTRY _ZTI7S3490C6[];
extern  VTBL_ENTRY _ZTV7S3490C6[];
extern Class_Descriptor cd_S3490C5;
extern VTBL_ENTRY _ZTI7S3490C5[];
extern  VTBL_ENTRY _ZTV7S3490C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C5[];
extern Class_Descriptor cd_S3490C7;
extern VTBL_ENTRY _ZTI7S3490C7[];
extern  VTBL_ENTRY _ZTV7S3490C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C7[];
extern Class_Descriptor cd_S3490C3;
extern VTBL_ENTRY _ZTI7S3490C3[];
extern  VTBL_ENTRY _ZTV7S3490C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C3[];
static Base_Class bases_S3490C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3490C4,    ABISELECT(5472,3868), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3490C6,    ABISELECT(5488,3884), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3490C5,    ABISELECT(5488,3884), //bcp->offset
    60, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S3490C6,    ABISELECT(6000,4244), //bcp->offset
    65, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S3490C7,    ABISELECT(6096,4296), //bcp->offset
    69, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    46, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S3490C3,    ABISELECT(832,604), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S3490C6,    ABISELECT(848,612), //bcp->offset
    -1, //bcp->virtual_function_table_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_S3490C6,    ABISELECT(944,664), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S3490C5,    ABISELECT(944,664), //bcp->offset
    45, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S3490C7,    ABISELECT(1456,1024), //bcp->offset
    49, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S3490C3,    ABISELECT(6384,4528), //bcp->offset
    74, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    48, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S3490C9,    ABISELECT(848,612), //bcp->offset
    35, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S3490C6,    ABISELECT(3552,2552), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S3490C5,    ABISELECT(3552,2552), //bcp->offset
    53, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S3490C6,    ABISELECT(4064,2912), //bcp->offset
    57, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S3490C8,    ABISELECT(832,604), //bcp->offset
    21, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3490C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    17, //immediately_derived
  0, 0},
  {&cd_S3490C5,    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
    17, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3490C7,    ABISELECT(512,360), //bcp->offset
    11, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3490C3,    ABISELECT(800,592), //bcp->offset
    15, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S3490C15[];
extern void _ZN7S3490C62v2Ev();
extern void _ZN8S3490C15D1Ev();
extern void _ZN8S3490C15D0Ev();
extern void _ZN7S3490C72v3Ev();
extern void _ZN7S3490C82v4Ev();
extern void ABISELECT(_ZTv0_n72_N8S3490C15D1Ev,_ZTv0_n36_N8S3490C15D1Ev)();
extern void ABISELECT(_ZThn832_N8S3490C15D1Ev,_ZThn604_N8S3490C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S3490C15D0Ev,_ZTv0_n36_N8S3490C15D0Ev)();
extern void ABISELECT(_ZThn832_N8S3490C15D0Ev,_ZThn604_N8S3490C15D0Ev)() __attribute__((weak));
extern void _ZN7S3490C62v2Ev();
extern void ABISELECT(_ZTvn16_n72_N8S3490C15D1Ev,_ZTvn8_n36_N8S3490C15D1Ev)();
extern void ABISELECT(_ZTvn16_n72_N8S3490C15D0Ev,_ZTvn8_n36_N8S3490C15D0Ev)();
extern void _ZN7S3490C62v2Ev();
extern void _ZN7S3490C72v3Ev();
extern void _ZN7S3490C62v2Ev();
extern void _ZN7S3490C62v2Ev();
extern void _ZN7S3490C62v2Ev();
extern void _ZN7S3490C62v2Ev();
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY vtc_S3490C15[] = {
  ABISELECT(6384,4528),
  ABISELECT(6096,4296),
  ABISELECT(6000,4244),
  ABISELECT(5488,3884),
  ABISELECT(832,604),
  ABISELECT(5472,3868),
  0,
  (VTBL_ENTRY)&(_ZTI8S3490C15[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  (VTBL_ENTRY)&_ZN8S3490C15D1Ev,
  (VTBL_ENTRY)&_ZN8S3490C15D0Ev,
  ABISELECT(5488,3884),
  ABISELECT(-512,-360),
  (VTBL_ENTRY)&(_ZTI8S3490C15[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
  ABISELECT(5296,3704),
  ABISELECT(5200,3652),
  ABISELECT(4688,3292),
  ABISELECT(4672,3276),
  ABISELECT(-800,-592),
  (VTBL_ENTRY)&(_ZTI8S3490C15[0]),
  ABISELECT(624,420),
  ABISELECT(16,8),
  ABISELECT(-832,-604),
  0,
  ABISELECT(5552,3924),
  ABISELECT(5264,3692),
  ABISELECT(5168,3640),
  ABISELECT(4656,3280),
  ABISELECT(4640,3264),
  ABISELECT(-832,-604),
  (VTBL_ENTRY)&(_ZTI8S3490C15[0]),
  (VTBL_ENTRY)&_ZN7S3490C82v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S3490C15D1Ev,_ZTv0_n36_N8S3490C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S3490C15D0Ev,_ZTv0_n36_N8S3490C15D0Ev),
  ABISELECT(5248,3684),
  ABISELECT(4640,3272),
  ABISELECT(5536,3916),
  ABISELECT(5152,3632),
  ABISELECT(4624,3256),
  ABISELECT(-848,-612),
  (VTBL_ENTRY)&(_ZTI8S3490C15[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n72_N8S3490C15D1Ev,_ZTvn8_n36_N8S3490C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n72_N8S3490C15D0Ev,_ZTvn8_n36_N8S3490C15D0Ev),
  ABISELECT(4528,3204),
  ABISELECT(-944,-664),
  (VTBL_ENTRY)&(_ZTI8S3490C15[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  ABISELECT(4544,3220),
  ABISELECT(-1456,-1024),
  (VTBL_ENTRY)&(_ZTI8S3490C15[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
  ABISELECT(1920,1316),
  ABISELECT(-3552,-2552),
  (VTBL_ENTRY)&(_ZTI8S3490C15[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  ABISELECT(-4064,-2912),
  (VTBL_ENTRY)&(_ZTI8S3490C15[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  0,
  -16,
  ABISELECT(-5488,-3884),
  (VTBL_ENTRY)&(_ZTI8S3490C15[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  0,
  ABISELECT(-6000,-4244),
  (VTBL_ENTRY)&(_ZTI8S3490C15[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  0,
  ABISELECT(-96,-52),
  ABISELECT(-6096,-4296),
  (VTBL_ENTRY)&(_ZTI8S3490C15[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
  ABISELECT(-288,-232),
  ABISELECT(-384,-284),
  ABISELECT(-896,-644),
  ABISELECT(-912,-660),
  ABISELECT(-6384,-4528),
  (VTBL_ENTRY)&(_ZTI8S3490C15[0]),
};
extern VTBL_ENTRY _ZTV8S3490C15[];
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C5__A__8S3490C15[] = {
  ABISELECT(5472,3868),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C5[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C7__A__8S3490C15[] = {
  ABISELECT(5488,3884),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C7[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C6__7S3490C7__A__8S3490C15[] = {
  0,
  ABISELECT(-5488,-3884),
  (VTBL_ENTRY)&(_ZTI7S3490C7[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3490C3__A__8S3490C15[] = {
  ABISELECT(5296,3704),
  ABISELECT(5200,3652),
  ABISELECT(4688,3292),
  ABISELECT(4672,3276),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C3[0]),
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C5__7S3490C3__A__8S3490C15[] = {
  0,
  -16,
  ABISELECT(-4688,-3292),
  (VTBL_ENTRY)&(_ZTI7S3490C3[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C6__A1__7S3490C3__A__8S3490C15[] = {
  0,
  ABISELECT(-5200,-3652),
  (VTBL_ENTRY)&(_ZTI7S3490C3[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C7__7S3490C3__A__8S3490C15[] = {
  0,
  ABISELECT(-96,-52),
  ABISELECT(-5296,-3704),
  (VTBL_ENTRY)&(_ZTI7S3490C3[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C82v4Ev();
extern void _ZN7S3490C8D1Ev();
extern void _ZN7S3490C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C8__8S3490C15[] = {
  ABISELECT(5552,3924),
  ABISELECT(5264,3692),
  ABISELECT(5168,3640),
  ABISELECT(4656,3280),
  ABISELECT(4640,3264),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C8[0]),
  (VTBL_ENTRY)&_ZN7S3490C82v4Ev,
  (VTBL_ENTRY)&_ZN7S3490C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3490C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3490C37S3490C8__8S3490C15[] = {
  ABISELECT(5264,3692),
  ABISELECT(5168,3640),
  ABISELECT(4656,3280),
  ABISELECT(4640,3264),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C3[0]),
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C5__7S3490C37S3490C8__8S3490C15[] = {
  0,
  -16,
  ABISELECT(-4656,-3280),
  (VTBL_ENTRY)&(_ZTI7S3490C3[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C6__A1__7S3490C37S3490C8__8S3490C15[] = {
  0,
  ABISELECT(-5168,-3640),
  (VTBL_ENTRY)&(_ZTI7S3490C3[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C7__7S3490C37S3490C8__8S3490C15[] = {
  0,
  ABISELECT(-96,-52),
  ABISELECT(-5264,-3692),
  (VTBL_ENTRY)&(_ZTI7S3490C3[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C62v2Ev();
extern void _ZN7S3490C9D1Ev();
extern void _ZN7S3490C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C97S3490C8__8S3490C15[] = {
  ABISELECT(5248,3684),
  ABISELECT(4640,3272),
  ABISELECT(5536,3916),
  ABISELECT(5152,3632),
  ABISELECT(4624,3256),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3490C9D1Ev,
  (VTBL_ENTRY)&_ZN7S3490C9D0Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C57S3490C97S3490C8__A1__8S3490C15[] = {
  ABISELECT(4528,3204),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C5[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C77S3490C97S3490C8__A1__8S3490C15[] = {
  ABISELECT(4544,3220),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C7[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C6__7S3490C77S3490C97S3490C8__A1__8S3490C15[] = {
  0,
  ABISELECT(-4544,-3220),
  (VTBL_ENTRY)&(_ZTI7S3490C7[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C5__A__7S3490C97S3490C8__8S3490C15[] = {
  ABISELECT(4528,3204),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C7__A__7S3490C97S3490C8__8S3490C15[] = {
  ABISELECT(4544,3220),
  ABISELECT(-608,-412),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C6__A2__7S3490C97S3490C8__8S3490C15[] = {
  0,
  ABISELECT(-5152,-3632),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3490C3__7S3490C97S3490C8__8S3490C15[] = {
  ABISELECT(-288,-232),
  ABISELECT(-384,-284),
  ABISELECT(-896,-644),
  ABISELECT(-912,-660),
  ABISELECT(-5536,-3916),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C5__A1__7S3490C97S3490C8__8S3490C15[] = {
  0,
  -16,
  ABISELECT(-4640,-3272),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C7__A1__7S3490C97S3490C8__8S3490C15[] = {
  0,
  ABISELECT(-96,-52),
  ABISELECT(-5248,-3684),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C57S3490C8__A2__8S3490C15[] = {
  ABISELECT(1920,1316),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C5[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C5__7S3490C8__8S3490C15[] = {
  0,
  -16,
  ABISELECT(-4656,-3280),
  (VTBL_ENTRY)&(_ZTI7S3490C8[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C6__A1__7S3490C8__8S3490C15[] = {
  0,
  ABISELECT(-5168,-3640),
  (VTBL_ENTRY)&(_ZTI7S3490C8[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C7__7S3490C8__8S3490C15[] = {
  0,
  ABISELECT(-96,-52),
  ABISELECT(-5264,-3692),
  (VTBL_ENTRY)&(_ZTI7S3490C8[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C62v2Ev();
extern void ABISELECT(_ZThn16_N7S3490C8D1Ev,_ZThn8_N7S3490C8D1Ev)();
extern void ABISELECT(_ZThn16_N7S3490C8D0Ev,_ZThn8_N7S3490C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3490C9__7S3490C8__8S3490C15[] = {
  ABISELECT(5248,3684),
  ABISELECT(4640,3272),
  ABISELECT(5536,3916),
  ABISELECT(5152,3632),
  ABISELECT(4624,3256),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S3490C8[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S3490C8D1Ev,_ZThn8_N7S3490C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S3490C8D0Ev,_ZThn8_N7S3490C8D0Ev),
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C57S3490C9__A1__7S3490C8__8S3490C15[] = {
  ABISELECT(4528,3204),
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI7S3490C8[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C77S3490C9__A1__7S3490C8__8S3490C15[] = {
  ABISELECT(4544,3220),
  ABISELECT(-624,-420),
  (VTBL_ENTRY)&(_ZTI7S3490C8[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3490C3__A1__7S3490C8__8S3490C15[] = {
  ABISELECT(-288,-232),
  ABISELECT(-384,-284),
  ABISELECT(-896,-644),
  ABISELECT(-912,-660),
  ABISELECT(-5552,-3924),
  (VTBL_ENTRY)&(_ZTI7S3490C8[0]),
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C5__A__7S3490C8__8S3490C15[] = {
  ABISELECT(1920,1316),
  ABISELECT(-2720,-1948),
  (VTBL_ENTRY)&(_ZTI7S3490C8[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C5__8S3490C15[] = {
  -16,
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C5[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C7__8S3490C15[] = {
  ABISELECT(-96,-52),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C7[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C6__7S3490C7__8S3490C15[] = {
  0,
  ABISELECT(96,52),
  (VTBL_ENTRY)&(_ZTI7S3490C7[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3490C3__A1__8S3490C15[] = {
  ABISELECT(-288,-232),
  ABISELECT(-384,-284),
  ABISELECT(-896,-644),
  ABISELECT(-912,-660),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C3[0]),
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C5__7S3490C3__A1__8S3490C15[] = {
  0,
  -16,
  ABISELECT(896,644),
  (VTBL_ENTRY)&(_ZTI7S3490C3[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C6__A1__7S3490C3__A1__8S3490C15[] = {
  0,
  ABISELECT(384,284),
  (VTBL_ENTRY)&(_ZTI7S3490C3[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C7__7S3490C3__A1__8S3490C15[] = {
  0,
  ABISELECT(-96,-52),
  ABISELECT(288,232),
  (VTBL_ENTRY)&(_ZTI7S3490C3[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
static  VTT_ENTRY vtt_S3490C15[] = {
  {&(_ZTV8S3490C15[8]),  8,80},
  {&(_tg__ZTV7S3490C5__A__8S3490C15[3]),  3,4},
  {&(_tg__ZTV7S3490C7__A__8S3490C15[3]),  3,4},
  {&(_tg__ZTV7S3490C6__7S3490C7__A__8S3490C15[3]),  3,4},
  {&(_tg__ZTV7S3490C3__A__8S3490C15[6]),  6,6},
  {&(_tg__ZTV7S3490C5__7S3490C3__A__8S3490C15[4]),  4,5},
  {&(_tg__ZTV7S3490C6__A1__7S3490C3__A__8S3490C15[3]),  3,4},
  {&(_tg__ZTV7S3490C7__7S3490C3__A__8S3490C15[4]),  4,5},
  {&(_ZTV8S3490C15[32]),  32,80},
  {&(_ZTV8S3490C15[64]),  64,80},
  {&(_ZTV8S3490C15[68]),  68,80},
  {&(_ZTV8S3490C15[73]),  73,80},
  {&(_ZTV8S3490C15[42]),  42,80},
  {&(_ZTV8S3490C15[48]),  48,80},
  {&(_ZTV8S3490C15[52]),  52,80},
  {&(_ZTV8S3490C15[80]),  80,80},
  {&(_ZTV8S3490C15[56]),  56,80},
  {&(_ZTV8S3490C15[59]),  59,80},
  {&(_ZTV8S3490C15[14]),  14,80},
  {&(_ZTV8S3490C15[21]),  21,80},
  {&(_tg__ZTV7S3490C8__8S3490C15[7]),  7,10},
  {&(_tg__ZTV7S3490C37S3490C8__8S3490C15[6]),  6,6},
  {&(_tg__ZTV7S3490C5__7S3490C37S3490C8__8S3490C15[4]),  4,5},
  {&(_tg__ZTV7S3490C6__A1__7S3490C37S3490C8__8S3490C15[3]),  3,4},
  {&(_tg__ZTV7S3490C7__7S3490C37S3490C8__8S3490C15[4]),  4,5},
  {&(_tg__ZTV7S3490C97S3490C8__8S3490C15[7]),  7,10},
  {&(_tg__ZTV7S3490C57S3490C97S3490C8__A1__8S3490C15[3]),  3,4},
  {&(_tg__ZTV7S3490C77S3490C97S3490C8__A1__8S3490C15[3]),  3,4},
  {&(_tg__ZTV7S3490C6__7S3490C77S3490C97S3490C8__A1__8S3490C15[3]),  3,4},
  {&(_tg__ZTV7S3490C5__A__7S3490C97S3490C8__8S3490C15[3]),  3,4},
  {&(_tg__ZTV7S3490C7__A__7S3490C97S3490C8__8S3490C15[3]),  3,4},
  {&(_tg__ZTV7S3490C6__A2__7S3490C97S3490C8__8S3490C15[3]),  3,4},
  {&(_tg__ZTV7S3490C3__7S3490C97S3490C8__8S3490C15[6]),  6,6},
  {&(_tg__ZTV7S3490C5__A1__7S3490C97S3490C8__8S3490C15[4]),  4,5},
  {&(_tg__ZTV7S3490C7__A1__7S3490C97S3490C8__8S3490C15[4]),  4,5},
  {&(_tg__ZTV7S3490C57S3490C8__A2__8S3490C15[3]),  3,4},
  {&(_tg__ZTV7S3490C5__7S3490C8__8S3490C15[4]),  4,5},
  {&(_tg__ZTV7S3490C6__A1__7S3490C8__8S3490C15[3]),  3,4},
  {&(_tg__ZTV7S3490C7__7S3490C8__8S3490C15[4]),  4,5},
  {&(_tg__ZTV7S3490C9__7S3490C8__8S3490C15[7]),  7,10},
  {&(_tg__ZTV7S3490C57S3490C9__A1__7S3490C8__8S3490C15[3]),  3,4},
  {&(_tg__ZTV7S3490C77S3490C9__A1__7S3490C8__8S3490C15[3]),  3,4},
  {&(_tg__ZTV7S3490C3__A1__7S3490C8__8S3490C15[6]),  6,6},
  {&(_tg__ZTV7S3490C5__A__7S3490C8__8S3490C15[3]),  3,4},
  {&(_tg__ZTV7S3490C5__8S3490C15[3]),  3,4},
  {&(_tg__ZTV7S3490C7__8S3490C15[3]),  3,4},
  {&(_tg__ZTV7S3490C6__7S3490C7__8S3490C15[3]),  3,4},
  {&(_tg__ZTV7S3490C3__A1__8S3490C15[6]),  6,6},
  {&(_tg__ZTV7S3490C5__7S3490C3__A1__8S3490C15[4]),  4,5},
  {&(_tg__ZTV7S3490C6__A1__7S3490C3__A1__8S3490C15[3]),  3,4},
  {&(_tg__ZTV7S3490C7__7S3490C3__A1__8S3490C15[4]),  4,5},
};
extern VTBL_ENTRY _ZTI8S3490C15[];
extern  VTBL_ENTRY _ZTV8S3490C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3490C15[];
static VTBL_ENTRY alt_thunk_names2[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S3490C15D0Ev,_ZTv0_n36_N8S3490C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn832_N8S3490C15D0Ev,_ZThn604_N8S3490C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S3490C15D1Ev,_ZTv0_n36_N8S3490C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn832_N8S3490C15D1Ev,_ZThn604_N8S3490C15D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3490C15 = {  "S3490C15", // class name
  bases_S3490C15, 20,
  &(vtc_S3490C15[0]), // expected_vtbl_contents
  &(vtt_S3490C15[0]), // expected_vtt_contents
  ABISELECT(6400,4536), // object size
  NSPAIRA(_ZTI8S3490C15),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S3490C15),80, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3490C15),51, //virtual table table var
  19, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names2,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3490C1  : S3490C2 , S3490C10 , virtual S3490C15 {
  short s3490c1f0:16;
  void *s3490c1f1;
  short s3490c1f2[5];
  void *s3490c1f3[2];
  int s3490c1f4;
  ::S3490C10 s3490c1f5;
  void *s3490c1f6;
  ::S3490C4 s3490c1f7;
  int s3490c1f8[2];
  char s3490c1f9;
  virtual void  v1(); // _ZN7S3490C12v1Ev
  ~S3490C1(); // tgen
  S3490C1(); // tgen
};
//SIG(1 S3490C1) C1{ BC2{ BC3{ VBC4{ m FL Fi Fc} VBC5{ BC6{ v2 FD Fi:3 Fc:8 FD[2] FL} VBC4 Fc[10] Fi FC7{ VBC6 v3 FC4 FL FC4[7] Fp FL FC4 Fp Fc Fs Fi FC6} FL} VBC6 VBC7 Fp} BC8{ BC3 BC9{ BC6 VBC4 BC5 BC7 VBC3 vd FC7 FC3 Fp Fi FC6 FC7} BC5 BC6 v4 FC5[2] FC6 Fi FC4 Fp[10] Fi[2] FL FD FL Fi} vd v5 v6 Fp[2] Fi Fc FC5 FC8 FD} BC10{ VBC9 BC11{ VBC4 VBC3 BC12{ BC9 vd v7 v8 Fp Fs:6 FC6 FD Fi FC4 FC7 Fp Fi Fp[2]} BC8 FC13{} FC12 FL} BC2 Fi[10] FD Fp[9] Fl[8] Fi Fp FC14{ VBC3 BC9 BC12 v9 Fi Fc Fp Fl} Fp} VBC15{ VBC8 BC5 BC7 BC3 Fp} v1 Fs:16 Fp Fs[5] Fp[2] Fi FC10 Fp FC4 Fi[2] Fc}


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

static void Test_S3490C1()
{
  extern Class_Descriptor cd_S3490C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(5244,14842)];
    init_test(&cd_S3490C1, buf);
    S3490C1 *dp, &lv = *(dp=new (buf) S3490C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(83888,59364), "sizeof(S3490C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3490C1)");
    /*is_ambiguous_... S3490C1::S3490C2 */ AMB_check_base_class_offset(lv, (S3490C4*)(S3490C3*)(S3490C2*), ABISELECT(74776,52888), "S3490C1");
    /*is_ambiguous_... S3490C1::S3490C5 */ AMB_check_base_class_offset(lv, (S3490C4*)(S3490C5*), ABISELECT(74776,52888), "S3490C1");
    /*is_ambiguous_... S3490C1::S3490C2 */ AMB_check_base_class_offset(lv, (S3490C4*)(S3490C3*)(S3490C8*)(S3490C2*), ABISELECT(74776,52888), "S3490C1");
    /*is_ambiguous_... S3490C1::S3490C2 */ AMB_check_base_class_offset(lv, (S3490C4*)(S3490C9*)(S3490C8*)(S3490C2*), ABISELECT(74776,52888), "S3490C1");
    /*is_ambiguous_... S3490C1::S3490C2 */ AMB_check_base_class_offset(lv, (S3490C4*)(S3490C5*)(S3490C9*)(S3490C8*)(S3490C2*), ABISELECT(74776,52888), "S3490C1");
    /*is_ambiguous_... S3490C1::S3490C3 */ AMB_check_base_class_offset(lv, (S3490C4*)(S3490C3*), ABISELECT(74776,52888), "S3490C1");
    /*is_ambiguous_... S3490C1::S3490C2 */ AMB_check_base_class_offset(lv, (S3490C4*)(S3490C5*)(S3490C8*)(S3490C2*), ABISELECT(74776,52888), "S3490C1");
    /*is_ambiguous_... S3490C1::S3490C9 */ AMB_check_base_class_offset(lv, (S3490C4*)(S3490C9*), ABISELECT(74776,52888), "S3490C1");
    /*is_ambiguous_... S3490C1::S3490C9 */ AMB_check_base_class_offset(lv, (S3490C4*)(S3490C5*)(S3490C9*), ABISELECT(74776,52888), "S3490C1");
    check_base_class_offset(lv, (S3490C4*)(S3490C11*)(S3490C10*), ABISELECT(74776,52888), "S3490C1");
    check_base_class_offset(lv, (S3490C4*)(S3490C9*)(S3490C12*)(S3490C11*)(S3490C10*), ABISELECT(74776,52888), "S3490C1");
    /*is_ambiguous_... S3490C9::S3490C5 */ AMB_check_base_class_offset(lv, (S3490C4*)(S3490C5*)(S3490C9*)(S3490C12*)(S3490C11*)(S3490C10*), ABISELECT(74776,52888), "S3490C1");
    /*is_ambiguous_... S3490C8::S3490C3 */ AMB_check_base_class_offset(lv, (S3490C4*)(S3490C3*)(S3490C8*)(S3490C11*)(S3490C10*), ABISELECT(74776,52888), "S3490C1");
    check_base_class_offset(lv, (S3490C4*)(S3490C9*)(S3490C8*)(S3490C11*)(S3490C10*), ABISELECT(74776,52888), "S3490C1");
    /*is_ambiguous_... S3490C9::S3490C5 */ AMB_check_base_class_offset(lv, (S3490C4*)(S3490C5*)(S3490C9*)(S3490C8*)(S3490C11*)(S3490C10*), ABISELECT(74776,52888), "S3490C1");
    /*is_ambiguous_... S3490C8::S3490C5 */ AMB_check_base_class_offset(lv, (S3490C4*)(S3490C5*)(S3490C8*)(S3490C11*)(S3490C10*), ABISELECT(74776,52888), "S3490C1");
    /*is_ambiguous_... S3490C2::S3490C3 */ AMB_check_base_class_offset(lv, (S3490C4*)(S3490C3*)(S3490C2*)(S3490C10*), ABISELECT(74776,52888), "S3490C1");
    /*is_ambiguous_... S3490C8::S3490C3 */ AMB_check_base_class_offset(lv, (S3490C4*)(S3490C3*)(S3490C8*)(S3490C2*)(S3490C10*), ABISELECT(74776,52888), "S3490C1");
    check_base_class_offset(lv, (S3490C4*)(S3490C9*)(S3490C8*)(S3490C2*)(S3490C10*), ABISELECT(74776,52888), "S3490C1");
    /*is_ambiguous_... S3490C9::S3490C5 */ AMB_check_base_class_offset(lv, (S3490C4*)(S3490C5*)(S3490C9*)(S3490C8*)(S3490C2*)(S3490C10*), ABISELECT(74776,52888), "S3490C1");
    /*is_ambiguous_... S3490C8::S3490C5 */ AMB_check_base_class_offset(lv, (S3490C4*)(S3490C5*)(S3490C8*)(S3490C2*)(S3490C10*), ABISELECT(74776,52888), "S3490C1");
    /*is_ambiguous_... S3490C1::S3490C8 */ AMB_check_base_class_offset(lv, (S3490C4*)(S3490C3*)(S3490C8*), ABISELECT(74776,52888), "S3490C1");
    /*is_ambiguous_... S3490C1::S3490C8 */ AMB_check_base_class_offset(lv, (S3490C4*)(S3490C9*)(S3490C8*), ABISELECT(74776,52888), "S3490C1");
    /*is_ambiguous_... S3490C1::S3490C8 */ AMB_check_base_class_offset(lv, (S3490C4*)(S3490C5*)(S3490C9*)(S3490C8*), ABISELECT(74776,52888), "S3490C1");
    /*is_ambiguous_... S3490C1::S3490C8 */ AMB_check_base_class_offset(lv, (S3490C4*)(S3490C5*)(S3490C8*), ABISELECT(74776,52888), "S3490C1");
    /*is_ambiguous_... S3490C15::S3490C5 */ AMB_check_base_class_offset(lv, (S3490C4*)(S3490C5*)(S3490C15*), ABISELECT(74776,52888), "S3490C1");
    /*is_ambiguous_... S3490C15::S3490C3 */ AMB_check_base_class_offset(lv, (S3490C4*)(S3490C3*)(S3490C15*), ABISELECT(74776,52888), "S3490C1");
    /*is_ambiguous_... S3490C1::S3490C5 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C5*), ABISELECT(74800,52904), "S3490C1");
    /*is_ambiguous_... S3490C1::S3490C2 */ AMB_check_base_class_offset(lv, (S3490C5*)(S3490C3*)(S3490C2*), ABISELECT(74800,52904), "S3490C1");
    /*is_ambiguous_... S3490C1::S3490C2 */ AMB_check_base_class_offset(lv, (S3490C5*)(S3490C3*)(S3490C8*)(S3490C2*), ABISELECT(74800,52904), "S3490C1");
    /*is_ambiguous_... S3490C1::S3490C3 */ AMB_check_base_class_offset(lv, (S3490C5*)(S3490C3*), ABISELECT(74800,52904), "S3490C1");
    /*is_ambiguous_... S3490C8::S3490C3 */ AMB_check_base_class_offset(lv, (S3490C5*)(S3490C3*)(S3490C8*)(S3490C11*)(S3490C10*), ABISELECT(74800,52904), "S3490C1");
    /*is_ambiguous_... S3490C2::S3490C3 */ AMB_check_base_class_offset(lv, (S3490C5*)(S3490C3*)(S3490C2*)(S3490C10*), ABISELECT(74800,52904), "S3490C1");
    /*is_ambiguous_... S3490C8::S3490C3 */ AMB_check_base_class_offset(lv, (S3490C5*)(S3490C3*)(S3490C8*)(S3490C2*)(S3490C10*), ABISELECT(74800,52904), "S3490C1");
    /*is_ambiguous_... S3490C1::S3490C8 */ AMB_check_base_class_offset(lv, (S3490C5*)(S3490C3*)(S3490C8*), ABISELECT(74800,52904), "S3490C1");
    /*is_ambiguous_... S3490C15::S3490C3 */ AMB_check_base_class_offset(lv, (S3490C5*)(S3490C3*)(S3490C15*), ABISELECT(74800,52904), "S3490C1");
    /*is_ambiguous_... S3490C1::S3490C2 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C3*)(S3490C2*), ABISELECT(75312,53264), "S3490C1");
    /*is_ambiguous_... S3490C1::S3490C7 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C7*), ABISELECT(75312,53264), "S3490C1");
    /*is_ambiguous_... S3490C1::S3490C2 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C3*)(S3490C8*)(S3490C2*), ABISELECT(75312,53264), "S3490C1");
    /*is_ambiguous_... S3490C1::S3490C2 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C7*)(S3490C9*)(S3490C8*)(S3490C2*), ABISELECT(75312,53264), "S3490C1");
    /*is_ambiguous_... S3490C1::S3490C3 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C3*), ABISELECT(75312,53264), "S3490C1");
    /*is_ambiguous_... S3490C1::S3490C9 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C7*)(S3490C9*), ABISELECT(75312,53264), "S3490C1");
    /*is_ambiguous_... S3490C9::S3490C7 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C7*)(S3490C9*)(S3490C12*)(S3490C11*)(S3490C10*), ABISELECT(75312,53264), "S3490C1");
    /*is_ambiguous_... S3490C8::S3490C3 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C3*)(S3490C8*)(S3490C11*)(S3490C10*), ABISELECT(75312,53264), "S3490C1");
    /*is_ambiguous_... S3490C9::S3490C7 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C7*)(S3490C9*)(S3490C8*)(S3490C11*)(S3490C10*), ABISELECT(75312,53264), "S3490C1");
    /*is_ambiguous_... S3490C2::S3490C3 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C3*)(S3490C2*)(S3490C10*), ABISELECT(75312,53264), "S3490C1");
    /*is_ambiguous_... S3490C8::S3490C3 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C3*)(S3490C8*)(S3490C2*)(S3490C10*), ABISELECT(75312,53264), "S3490C1");
    /*is_ambiguous_... S3490C9::S3490C7 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C7*)(S3490C9*)(S3490C8*)(S3490C2*)(S3490C10*), ABISELECT(75312,53264), "S3490C1");
    /*is_ambiguous_... S3490C1::S3490C8 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C3*)(S3490C8*), ABISELECT(75312,53264), "S3490C1");
    /*is_ambiguous_... S3490C1::S3490C8 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C7*)(S3490C9*)(S3490C8*), ABISELECT(75312,53264), "S3490C1");
    /*is_ambiguous_... S3490C15::S3490C7 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C7*)(S3490C15*), ABISELECT(75312,53264), "S3490C1");
    /*is_ambiguous_... S3490C15::S3490C3 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C3*)(S3490C15*), ABISELECT(75312,53264), "S3490C1");
    /*is_ambiguous_... S3490C1::S3490C2 */ AMB_check_base_class_offset(lv, (S3490C7*)(S3490C3*)(S3490C2*), ABISELECT(75408,53316), "S3490C1");
    /*is_ambiguous_... S3490C1::S3490C2 */ AMB_check_base_class_offset(lv, (S3490C7*)(S3490C3*)(S3490C8*)(S3490C2*), ABISELECT(75408,53316), "S3490C1");
    /*is_ambiguous_... S3490C1::S3490C3 */ AMB_check_base_class_offset(lv, (S3490C7*)(S3490C3*), ABISELECT(75408,53316), "S3490C1");
    /*is_ambiguous_... S3490C8::S3490C3 */ AMB_check_base_class_offset(lv, (S3490C7*)(S3490C3*)(S3490C8*)(S3490C11*)(S3490C10*), ABISELECT(75408,53316), "S3490C1");
    /*is_ambiguous_... S3490C2::S3490C3 */ AMB_check_base_class_offset(lv, (S3490C7*)(S3490C3*)(S3490C2*)(S3490C10*), ABISELECT(75408,53316), "S3490C1");
    /*is_ambiguous_... S3490C8::S3490C3 */ AMB_check_base_class_offset(lv, (S3490C7*)(S3490C3*)(S3490C8*)(S3490C2*)(S3490C10*), ABISELECT(75408,53316), "S3490C1");
    /*is_ambiguous_... S3490C1::S3490C8 */ AMB_check_base_class_offset(lv, (S3490C7*)(S3490C3*)(S3490C8*), ABISELECT(75408,53316), "S3490C1");
    /*is_ambiguous_... S3490C15::S3490C3 */ AMB_check_base_class_offset(lv, (S3490C7*)(S3490C3*)(S3490C15*), ABISELECT(75408,53316), "S3490C1");
    /*is_ambiguous_... S3490C1::S3490C2 */ AMB_check_base_class_offset(lv, (S3490C3*)(S3490C2*), 0, "S3490C1");
    /*is_ambiguous_... S3490C1::S3490C2 */ AMB_check_base_class_offset(lv, (S3490C3*)(S3490C8*)(S3490C2*), ABISELECT(16,8), "S3490C1");
    /*is_ambiguous_... S3490C1::S3490C2 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C9*)(S3490C8*)(S3490C2*), ABISELECT(32,16), "S3490C1");
    /*is_ambiguous_... S3490C1::S3490C2 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C5*)(S3490C9*)(S3490C8*)(S3490C2*), ABISELECT(128,68), "S3490C1");
    /*is_ambiguous_... S3490C1::S3490C2 */ AMB_check_base_class_offset(lv, (S3490C5*)(S3490C9*)(S3490C8*)(S3490C2*), ABISELECT(128,68), "S3490C1");
    /*is_ambiguous_... S3490C1::S3490C2 */ AMB_check_base_class_offset(lv, (S3490C7*)(S3490C9*)(S3490C8*)(S3490C2*), ABISELECT(640,428), "S3490C1");
    /*is_ambiguous_... S3490C1::S3490C2 */ AMB_check_base_class_offset(lv, (S3490C3*)(S3490C9*)(S3490C8*)(S3490C2*), ABISELECT(75696,53548), "S3490C1");
    /*is_ambiguous_... S3490C1::S3490C9 */ AMB_check_base_class_offset(lv, (S3490C3*)(S3490C9*), ABISELECT(75696,53548), "S3490C1");
    /*is_ambiguous_... S3490C11::S3490C3 */ AMB_check_base_class_offset(lv, (S3490C3*)(S3490C11*)(S3490C10*), ABISELECT(75696,53548), "S3490C1");
    check_base_class_offset(lv, (S3490C3*)(S3490C9*)(S3490C12*)(S3490C11*)(S3490C10*), ABISELECT(75696,53548), "S3490C1");
    check_base_class_offset(lv, (S3490C3*)(S3490C9*)(S3490C8*)(S3490C11*)(S3490C10*), ABISELECT(75696,53548), "S3490C1");
    check_base_class_offset(lv, (S3490C3*)(S3490C9*)(S3490C8*)(S3490C2*)(S3490C10*), ABISELECT(75696,53548), "S3490C1");
    /*is_ambiguous_... S3490C1::S3490C8 */ AMB_check_base_class_offset(lv, (S3490C3*)(S3490C9*)(S3490C8*), ABISELECT(75696,53548), "S3490C1");
    /*is_ambiguous_... S3490C1::S3490C2 */ AMB_check_base_class_offset(lv, (S3490C9*)(S3490C8*)(S3490C2*), ABISELECT(32,16), "S3490C1");
    /*is_ambiguous_... S3490C1::S3490C2 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C5*)(S3490C8*)(S3490C2*), ABISELECT(2736,1956), "S3490C1");
    /*is_ambiguous_... S3490C1::S3490C2 */ AMB_check_base_class_offset(lv, (S3490C5*)(S3490C8*)(S3490C2*), ABISELECT(2736,1956), "S3490C1");
    /*is_ambiguous_... S3490C1::S3490C2 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C8*)(S3490C2*), ABISELECT(3248,2316), "S3490C1");
    /*is_ambiguous_... S3490C1::S3490C2 */ AMB_check_base_class_offset(lv, (S3490C8*)(S3490C2*), ABISELECT(16,8), "S3490C1");
    /*is_ambiguous_... S3490C1::S3490C2 */ AMB_check_base_class_offset(lv, (S3490C2*), 0, "S3490C1");
    /*is_ambiguous_... S3490C1::S3490C9 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C9*), ABISELECT(75712,53556), "S3490C1");
    /*is_ambiguous_... S3490C1::S3490C9 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C5*)(S3490C9*), ABISELECT(75808,53608), "S3490C1");
    /*is_ambiguous_... S3490C1::S3490C9 */ AMB_check_base_class_offset(lv, (S3490C5*)(S3490C9*), ABISELECT(75808,53608), "S3490C1");
    /*is_ambiguous_... S3490C1::S3490C9 */ AMB_check_base_class_offset(lv, (S3490C7*)(S3490C9*), ABISELECT(76320,53968), "S3490C1");
    /*is_ambiguous_... S3490C10::S3490C9 */ AMB_check_base_class_offset(lv, (S3490C9*)(S3490C10*), ABISELECT(75712,53556), "S3490C1");
    /*is_ambiguous_... S3490C9::S3490C6 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C9*)(S3490C12*)(S3490C11*)(S3490C10*), ABISELECT(10800,7608), "S3490C1");
    /*is_ambiguous_... S3490C9::S3490C5 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C5*)(S3490C9*)(S3490C12*)(S3490C11*)(S3490C10*), ABISELECT(10896,7660), "S3490C1");
    /*is_ambiguous_... S3490C9::S3490C5 */ AMB_check_base_class_offset(lv, (S3490C5*)(S3490C9*)(S3490C12*)(S3490C11*)(S3490C10*), ABISELECT(10896,7660), "S3490C1");
    /*is_ambiguous_... S3490C9::S3490C7 */ AMB_check_base_class_offset(lv, (S3490C7*)(S3490C9*)(S3490C12*)(S3490C11*)(S3490C10*), ABISELECT(11408,8020), "S3490C1");
    check_base_class_offset(lv, (S3490C9*)(S3490C12*)(S3490C11*)(S3490C10*), ABISELECT(10800,7608), "S3490C1");
    check_base_class_offset(lv, (S3490C12*)(S3490C11*)(S3490C10*), ABISELECT(10800,7608), "S3490C1");
    /*is_ambiguous_... S3490C8::S3490C3 */ AMB_check_base_class_offset(lv, (S3490C3*)(S3490C8*)(S3490C11*)(S3490C10*), ABISELECT(14080,9940), "S3490C1");
    /*is_ambiguous_... S3490C9::S3490C6 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C9*)(S3490C8*)(S3490C11*)(S3490C10*), ABISELECT(14096,9948), "S3490C1");
    /*is_ambiguous_... S3490C9::S3490C5 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C5*)(S3490C9*)(S3490C8*)(S3490C11*)(S3490C10*), ABISELECT(14192,10000), "S3490C1");
    /*is_ambiguous_... S3490C9::S3490C5 */ AMB_check_base_class_offset(lv, (S3490C5*)(S3490C9*)(S3490C8*)(S3490C11*)(S3490C10*), ABISELECT(14192,10000), "S3490C1");
    /*is_ambiguous_... S3490C9::S3490C7 */ AMB_check_base_class_offset(lv, (S3490C7*)(S3490C9*)(S3490C8*)(S3490C11*)(S3490C10*), ABISELECT(14704,10360), "S3490C1");
    check_base_class_offset(lv, (S3490C9*)(S3490C8*)(S3490C11*)(S3490C10*), ABISELECT(14096,9948), "S3490C1");
    /*is_ambiguous_... S3490C8::S3490C5 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C5*)(S3490C8*)(S3490C11*)(S3490C10*), ABISELECT(16800,11888), "S3490C1");
    /*is_ambiguous_... S3490C8::S3490C5 */ AMB_check_base_class_offset(lv, (S3490C5*)(S3490C8*)(S3490C11*)(S3490C10*), ABISELECT(16800,11888), "S3490C1");
    /*is_ambiguous_... S3490C8::S3490C6 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C8*)(S3490C11*)(S3490C10*), ABISELECT(17312,12248), "S3490C1");
    check_base_class_offset(lv, (S3490C8*)(S3490C11*)(S3490C10*), ABISELECT(14080,9940), "S3490C1");
    check_base_class_offset(lv, (S3490C11*)(S3490C10*), ABISELECT(10800,7608), "S3490C1");
    /*is_ambiguous_... S3490C2::S3490C3 */ AMB_check_base_class_offset(lv, (S3490C3*)(S3490C2*)(S3490C10*), ABISELECT(22944,16216), "S3490C1");
    /*is_ambiguous_... S3490C8::S3490C3 */ AMB_check_base_class_offset(lv, (S3490C3*)(S3490C8*)(S3490C2*)(S3490C10*), ABISELECT(22960,16224), "S3490C1");
    /*is_ambiguous_... S3490C9::S3490C6 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C9*)(S3490C8*)(S3490C2*)(S3490C10*), ABISELECT(22976,16232), "S3490C1");
    /*is_ambiguous_... S3490C9::S3490C5 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C5*)(S3490C9*)(S3490C8*)(S3490C2*)(S3490C10*), ABISELECT(23072,16284), "S3490C1");
    /*is_ambiguous_... S3490C9::S3490C5 */ AMB_check_base_class_offset(lv, (S3490C5*)(S3490C9*)(S3490C8*)(S3490C2*)(S3490C10*), ABISELECT(23072,16284), "S3490C1");
    /*is_ambiguous_... S3490C9::S3490C7 */ AMB_check_base_class_offset(lv, (S3490C7*)(S3490C9*)(S3490C8*)(S3490C2*)(S3490C10*), ABISELECT(23584,16644), "S3490C1");
    check_base_class_offset(lv, (S3490C9*)(S3490C8*)(S3490C2*)(S3490C10*), ABISELECT(22976,16232), "S3490C1");
    /*is_ambiguous_... S3490C8::S3490C5 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C5*)(S3490C8*)(S3490C2*)(S3490C10*), ABISELECT(25680,18172), "S3490C1");
    /*is_ambiguous_... S3490C8::S3490C5 */ AMB_check_base_class_offset(lv, (S3490C5*)(S3490C8*)(S3490C2*)(S3490C10*), ABISELECT(25680,18172), "S3490C1");
    /*is_ambiguous_... S3490C8::S3490C6 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C8*)(S3490C2*)(S3490C10*), ABISELECT(26192,18532), "S3490C1");
    check_base_class_offset(lv, (S3490C8*)(S3490C2*)(S3490C10*), ABISELECT(22960,16224), "S3490C1");
    check_base_class_offset(lv, (S3490C2*)(S3490C10*), ABISELECT(22944,16216), "S3490C1");
    check_base_class_offset(lv, (S3490C10*), ABISELECT(10800,7608), "S3490C1");
    /*is_ambiguous_... S3490C1::S3490C8 */ AMB_check_base_class_offset(lv, (S3490C3*)(S3490C8*), ABISELECT(79248,56100), "S3490C1");
    /*is_ambiguous_... S3490C1::S3490C8 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C9*)(S3490C8*), ABISELECT(79264,56108), "S3490C1");
    /*is_ambiguous_... S3490C1::S3490C8 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C5*)(S3490C9*)(S3490C8*), ABISELECT(79360,56160), "S3490C1");
    /*is_ambiguous_... S3490C1::S3490C8 */ AMB_check_base_class_offset(lv, (S3490C5*)(S3490C9*)(S3490C8*), ABISELECT(79360,56160), "S3490C1");
    /*is_ambiguous_... S3490C1::S3490C8 */ AMB_check_base_class_offset(lv, (S3490C7*)(S3490C9*)(S3490C8*), ABISELECT(79872,56520), "S3490C1");
    /*is_ambiguous_... S3490C1::S3490C8 */ AMB_check_base_class_offset(lv, (S3490C9*)(S3490C8*), ABISELECT(79264,56108), "S3490C1");
    /*is_ambiguous_... S3490C1::S3490C8 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C5*)(S3490C8*), ABISELECT(81968,58048), "S3490C1");
    /*is_ambiguous_... S3490C1::S3490C8 */ AMB_check_base_class_offset(lv, (S3490C5*)(S3490C8*), ABISELECT(81968,58048), "S3490C1");
    /*is_ambiguous_... S3490C1::S3490C8 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C8*), ABISELECT(82480,58408), "S3490C1");
    check_base_class_offset(lv, (S3490C8*)(S3490C15*), ABISELECT(79248,56100), "S3490C1");
    /*is_ambiguous_... S3490C15::S3490C5 */ AMB_check_base_class_offset(lv, (S3490C6*)(S3490C5*)(S3490C15*), ABISELECT(78416,55496), "S3490C1");
    /*is_ambiguous_... S3490C15::S3490C5 */ AMB_check_base_class_offset(lv, (S3490C5*)(S3490C15*), ABISELECT(78416,55496), "S3490C1");
    /*is_ambiguous_... S3490C15::S3490C7 */ AMB_check_base_class_offset(lv, (S3490C7*)(S3490C15*), ABISELECT(78928,55856), "S3490C1");
    /*is_ambiguous_... S3490C15::S3490C3 */ AMB_check_base_class_offset(lv, (S3490C3*)(S3490C15*), ABISELECT(79216,56088), "S3490C1");
    check_base_class_offset(lv, (S3490C15*), ABISELECT(78416,55496), "S3490C1");
    set_bf_and_test(lv, s3490c1f0, ABISELECT(40920,28912), 0, 16, 1, "S3490C1");
    set_bf_and_test(lv, s3490c1f0, ABISELECT(40920,28912), 0, 16, hide_sll(1LL<<15), "S3490C1");
    check_field_offset(lv, s3490c1f1, ABISELECT(40928,28916), "S3490C1.s3490c1f1");
    check_field_offset(lv, s3490c1f2, ABISELECT(40936,28920), "S3490C1.s3490c1f2");
    check_field_offset(lv, s3490c1f3, ABISELECT(40952,28932), "S3490C1.s3490c1f3");
    check_field_offset(lv, s3490c1f4, ABISELECT(40968,28940), "S3490C1.s3490c1f4");
    check_field_offset(lv, s3490c1f5, ABISELECT(40976,28944), "S3490C1.s3490c1f5");
    check_field_offset(lv, s3490c1f6, ABISELECT(74736,52856), "S3490C1.s3490c1f6");
    check_field_offset(lv, s3490c1f7, ABISELECT(74744,52860), "S3490C1.s3490c1f7");
    check_field_offset(lv, s3490c1f8, ABISELECT(74760,52876), "S3490C1.s3490c1f8");
    check_field_offset(lv, s3490c1f9, ABISELECT(74768,52884), "S3490C1.s3490c1f9");
    test_class_info(&lv, &cd_S3490C1);
    dp->~S3490C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3490C1(Test_S3490C1, "S3490C1", ABISELECT(83888,59364));

#else // __cplusplus

extern void _ZN7S3490C1C1Ev();
extern void _ZN7S3490C1D1Ev();
Name_Map name_map_S3490C1[] = {
  NSPAIR(_ZN7S3490C1C1Ev),
  NSPAIR(_ZN7S3490C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3490C4;
extern VTBL_ENTRY _ZTI7S3490C4[];
extern Class_Descriptor cd_S3490C6;
extern VTBL_ENTRY _ZTI7S3490C6[];
extern  VTBL_ENTRY _ZTV7S3490C6[];
extern Class_Descriptor cd_S3490C5;
extern VTBL_ENTRY _ZTI7S3490C5[];
extern  VTBL_ENTRY _ZTV7S3490C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C5[];
extern Class_Descriptor cd_S3490C6;
extern VTBL_ENTRY _ZTI7S3490C6[];
extern  VTBL_ENTRY _ZTV7S3490C6[];
extern Class_Descriptor cd_S3490C7;
extern VTBL_ENTRY _ZTI7S3490C7[];
extern  VTBL_ENTRY _ZTV7S3490C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C7[];
extern Class_Descriptor cd_S3490C3;
extern VTBL_ENTRY _ZTI7S3490C3[];
extern  VTBL_ENTRY _ZTV7S3490C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C3[];
extern Class_Descriptor cd_S3490C3;
extern VTBL_ENTRY _ZTI7S3490C3[];
extern  VTBL_ENTRY _ZTV7S3490C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C3[];
extern Class_Descriptor cd_S3490C6;
extern VTBL_ENTRY _ZTI7S3490C6[];
extern  VTBL_ENTRY _ZTV7S3490C6[];
extern Class_Descriptor cd_S3490C6;
extern VTBL_ENTRY _ZTI7S3490C6[];
extern  VTBL_ENTRY _ZTV7S3490C6[];
extern Class_Descriptor cd_S3490C5;
extern VTBL_ENTRY _ZTI7S3490C5[];
extern  VTBL_ENTRY _ZTV7S3490C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C5[];
extern Class_Descriptor cd_S3490C7;
extern VTBL_ENTRY _ZTI7S3490C7[];
extern  VTBL_ENTRY _ZTV7S3490C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C7[];
extern Class_Descriptor cd_S3490C3;
extern VTBL_ENTRY _ZTI7S3490C3[];
extern  VTBL_ENTRY _ZTV7S3490C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C3[];
extern Class_Descriptor cd_S3490C9;
extern VTBL_ENTRY _ZTI7S3490C9[];
extern  VTBL_ENTRY _ZTV7S3490C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C9[];
extern Class_Descriptor cd_S3490C6;
extern VTBL_ENTRY _ZTI7S3490C6[];
extern  VTBL_ENTRY _ZTV7S3490C6[];
extern Class_Descriptor cd_S3490C5;
extern VTBL_ENTRY _ZTI7S3490C5[];
extern  VTBL_ENTRY _ZTV7S3490C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C5[];
extern Class_Descriptor cd_S3490C6;
extern VTBL_ENTRY _ZTI7S3490C6[];
extern  VTBL_ENTRY _ZTV7S3490C6[];
extern Class_Descriptor cd_S3490C8;
extern VTBL_ENTRY _ZTI7S3490C8[];
extern  VTBL_ENTRY _ZTV7S3490C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C8[];
extern Class_Descriptor cd_S3490C2;
extern VTBL_ENTRY _ZTI7S3490C2[];
extern  VTBL_ENTRY _ZTV7S3490C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C2[];
extern Class_Descriptor cd_S3490C6;
extern VTBL_ENTRY _ZTI7S3490C6[];
extern  VTBL_ENTRY _ZTV7S3490C6[];
extern Class_Descriptor cd_S3490C6;
extern VTBL_ENTRY _ZTI7S3490C6[];
extern  VTBL_ENTRY _ZTV7S3490C6[];
extern Class_Descriptor cd_S3490C5;
extern VTBL_ENTRY _ZTI7S3490C5[];
extern  VTBL_ENTRY _ZTV7S3490C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C5[];
extern Class_Descriptor cd_S3490C7;
extern VTBL_ENTRY _ZTI7S3490C7[];
extern  VTBL_ENTRY _ZTV7S3490C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C7[];
extern Class_Descriptor cd_S3490C9;
extern VTBL_ENTRY _ZTI7S3490C9[];
extern  VTBL_ENTRY _ZTV7S3490C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C9[];
extern Class_Descriptor cd_S3490C6;
extern VTBL_ENTRY _ZTI7S3490C6[];
extern  VTBL_ENTRY _ZTV7S3490C6[];
extern Class_Descriptor cd_S3490C6;
extern VTBL_ENTRY _ZTI7S3490C6[];
extern  VTBL_ENTRY _ZTV7S3490C6[];
extern Class_Descriptor cd_S3490C5;
extern VTBL_ENTRY _ZTI7S3490C5[];
extern  VTBL_ENTRY _ZTV7S3490C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C5[];
extern Class_Descriptor cd_S3490C7;
extern VTBL_ENTRY _ZTI7S3490C7[];
extern  VTBL_ENTRY _ZTV7S3490C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C7[];
extern Class_Descriptor cd_S3490C9;
extern VTBL_ENTRY _ZTI7S3490C9[];
extern  VTBL_ENTRY _ZTV7S3490C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C9[];
extern Class_Descriptor cd_S3490C12;
extern VTBL_ENTRY _ZTI8S3490C12[];
extern  VTBL_ENTRY _ZTV8S3490C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3490C12[];
extern Class_Descriptor cd_S3490C3;
extern VTBL_ENTRY _ZTI7S3490C3[];
extern  VTBL_ENTRY _ZTV7S3490C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C3[];
extern Class_Descriptor cd_S3490C6;
extern VTBL_ENTRY _ZTI7S3490C6[];
extern  VTBL_ENTRY _ZTV7S3490C6[];
extern Class_Descriptor cd_S3490C6;
extern VTBL_ENTRY _ZTI7S3490C6[];
extern  VTBL_ENTRY _ZTV7S3490C6[];
extern Class_Descriptor cd_S3490C5;
extern VTBL_ENTRY _ZTI7S3490C5[];
extern  VTBL_ENTRY _ZTV7S3490C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C5[];
extern Class_Descriptor cd_S3490C7;
extern VTBL_ENTRY _ZTI7S3490C7[];
extern  VTBL_ENTRY _ZTV7S3490C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C7[];
extern Class_Descriptor cd_S3490C9;
extern VTBL_ENTRY _ZTI7S3490C9[];
extern  VTBL_ENTRY _ZTV7S3490C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C9[];
extern Class_Descriptor cd_S3490C6;
extern VTBL_ENTRY _ZTI7S3490C6[];
extern  VTBL_ENTRY _ZTV7S3490C6[];
extern Class_Descriptor cd_S3490C5;
extern VTBL_ENTRY _ZTI7S3490C5[];
extern  VTBL_ENTRY _ZTV7S3490C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C5[];
extern Class_Descriptor cd_S3490C6;
extern VTBL_ENTRY _ZTI7S3490C6[];
extern  VTBL_ENTRY _ZTV7S3490C6[];
extern Class_Descriptor cd_S3490C8;
extern VTBL_ENTRY _ZTI7S3490C8[];
extern  VTBL_ENTRY _ZTV7S3490C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C8[];
extern Class_Descriptor cd_S3490C11;
extern VTBL_ENTRY _ZTI8S3490C11[];
extern  VTBL_ENTRY _ZTV8S3490C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3490C11[];
extern Class_Descriptor cd_S3490C3;
extern VTBL_ENTRY _ZTI7S3490C3[];
extern  VTBL_ENTRY _ZTV7S3490C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C3[];
extern Class_Descriptor cd_S3490C3;
extern VTBL_ENTRY _ZTI7S3490C3[];
extern  VTBL_ENTRY _ZTV7S3490C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C3[];
extern Class_Descriptor cd_S3490C6;
extern VTBL_ENTRY _ZTI7S3490C6[];
extern  VTBL_ENTRY _ZTV7S3490C6[];
extern Class_Descriptor cd_S3490C6;
extern VTBL_ENTRY _ZTI7S3490C6[];
extern  VTBL_ENTRY _ZTV7S3490C6[];
extern Class_Descriptor cd_S3490C5;
extern VTBL_ENTRY _ZTI7S3490C5[];
extern  VTBL_ENTRY _ZTV7S3490C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C5[];
extern Class_Descriptor cd_S3490C7;
extern VTBL_ENTRY _ZTI7S3490C7[];
extern  VTBL_ENTRY _ZTV7S3490C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C7[];
extern Class_Descriptor cd_S3490C9;
extern VTBL_ENTRY _ZTI7S3490C9[];
extern  VTBL_ENTRY _ZTV7S3490C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C9[];
extern Class_Descriptor cd_S3490C6;
extern VTBL_ENTRY _ZTI7S3490C6[];
extern  VTBL_ENTRY _ZTV7S3490C6[];
extern Class_Descriptor cd_S3490C5;
extern VTBL_ENTRY _ZTI7S3490C5[];
extern  VTBL_ENTRY _ZTV7S3490C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C5[];
extern Class_Descriptor cd_S3490C6;
extern VTBL_ENTRY _ZTI7S3490C6[];
extern  VTBL_ENTRY _ZTV7S3490C6[];
extern Class_Descriptor cd_S3490C8;
extern VTBL_ENTRY _ZTI7S3490C8[];
extern  VTBL_ENTRY _ZTV7S3490C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C8[];
extern Class_Descriptor cd_S3490C2;
extern VTBL_ENTRY _ZTI7S3490C2[];
extern  VTBL_ENTRY _ZTV7S3490C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C2[];
extern Class_Descriptor cd_S3490C10;
extern VTBL_ENTRY _ZTI8S3490C10[];
extern  VTBL_ENTRY _ZTV8S3490C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3490C10[];
extern Class_Descriptor cd_S3490C3;
extern VTBL_ENTRY _ZTI7S3490C3[];
extern  VTBL_ENTRY _ZTV7S3490C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C3[];
extern Class_Descriptor cd_S3490C6;
extern VTBL_ENTRY _ZTI7S3490C6[];
extern  VTBL_ENTRY _ZTV7S3490C6[];
extern Class_Descriptor cd_S3490C6;
extern VTBL_ENTRY _ZTI7S3490C6[];
extern  VTBL_ENTRY _ZTV7S3490C6[];
extern Class_Descriptor cd_S3490C5;
extern VTBL_ENTRY _ZTI7S3490C5[];
extern  VTBL_ENTRY _ZTV7S3490C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C5[];
extern Class_Descriptor cd_S3490C7;
extern VTBL_ENTRY _ZTI7S3490C7[];
extern  VTBL_ENTRY _ZTV7S3490C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C7[];
extern Class_Descriptor cd_S3490C9;
extern VTBL_ENTRY _ZTI7S3490C9[];
extern  VTBL_ENTRY _ZTV7S3490C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C9[];
extern Class_Descriptor cd_S3490C6;
extern VTBL_ENTRY _ZTI7S3490C6[];
extern  VTBL_ENTRY _ZTV7S3490C6[];
extern Class_Descriptor cd_S3490C5;
extern VTBL_ENTRY _ZTI7S3490C5[];
extern  VTBL_ENTRY _ZTV7S3490C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C5[];
extern Class_Descriptor cd_S3490C6;
extern VTBL_ENTRY _ZTI7S3490C6[];
extern  VTBL_ENTRY _ZTV7S3490C6[];
extern Class_Descriptor cd_S3490C8;
extern VTBL_ENTRY _ZTI7S3490C8[];
extern  VTBL_ENTRY _ZTV7S3490C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C8[];
extern Class_Descriptor cd_S3490C6;
extern VTBL_ENTRY _ZTI7S3490C6[];
extern  VTBL_ENTRY _ZTV7S3490C6[];
extern Class_Descriptor cd_S3490C5;
extern VTBL_ENTRY _ZTI7S3490C5[];
extern  VTBL_ENTRY _ZTV7S3490C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C5[];
extern Class_Descriptor cd_S3490C7;
extern VTBL_ENTRY _ZTI7S3490C7[];
extern  VTBL_ENTRY _ZTV7S3490C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C7[];
extern Class_Descriptor cd_S3490C3;
extern VTBL_ENTRY _ZTI7S3490C3[];
extern  VTBL_ENTRY _ZTV7S3490C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C3[];
extern Class_Descriptor cd_S3490C15;
extern VTBL_ENTRY _ZTI8S3490C15[];
extern  VTBL_ENTRY _ZTV8S3490C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3490C15[];
static Base_Class bases_S3490C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3490C4,    ABISELECT(74776,52888), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3490C6,    ABISELECT(74800,52904), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3490C5,    ABISELECT(74800,52904), //bcp->offset
    152, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    152, //bcp->index_in_construction_vtbl_array
    187, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S3490C6,    ABISELECT(75312,53264), //bcp->offset
    157, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    153, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S3490C7,    ABISELECT(75408,53316), //bcp->offset
    161, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    154, //bcp->index_in_construction_vtbl_array
    188, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S3490C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S3490C3,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    27, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S3490C6,    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
    28, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S3490C6,    ABISELECT(128,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
    29, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3490C5,    ABISELECT(128,68), //bcp->offset
    35, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    157, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    30, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S3490C7,    ABISELECT(640,428), //bcp->offset
    39, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    158, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    31, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S3490C3,    ABISELECT(75696,53548), //bcp->offset
    166, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    159, //bcp->index_in_construction_vtbl_array
    190, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S3490C9,    ABISELECT(32,16), //bcp->offset
    25, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    156, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    32, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S3490C6,    ABISELECT(2736,1956), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    33, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S3490C5,    ABISELECT(2736,1956), //bcp->offset
    43, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    160, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    34, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S3490C6,    ABISELECT(3248,2316), //bcp->offset
    47, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    35, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S3490C8,    ABISELECT(16,8), //bcp->offset
    15, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    155, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    36, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S3490C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    37, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3490C6,    ABISELECT(75712,53556), //bcp->offset
    -1, //bcp->virtual_function_table_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
    22, //immediately_derived
  0, 0},
  {&cd_S3490C6,    ABISELECT(75808,53608), //bcp->offset
    -1, //bcp->virtual_function_table_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
    20, //immediately_derived
  0, 0},
  {&cd_S3490C5,    ABISELECT(75808,53608), //bcp->offset
    185, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    163, //bcp->index_in_construction_vtbl_array
    195, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S3490C7,    ABISELECT(76320,53968), //bcp->offset
    189, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    164, //bcp->index_in_construction_vtbl_array
    196, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S3490C9,    ABISELECT(75712,53556), //bcp->offset
    172, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    162, //bcp->index_in_construction_vtbl_array
    194, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    52, //immediately_derived
  0, 1},
  {&cd_S3490C6,    ABISELECT(10800,7608), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    38, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S3490C6,    ABISELECT(10896,7660), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    39, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S3490C5,    ABISELECT(10896,7660), //bcp->offset
    63, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    165, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    40, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S3490C7,    ABISELECT(11408,8020), //bcp->offset
    67, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    166, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    41, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S3490C9,    ABISELECT(10800,7608), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    42, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S3490C12,    ABISELECT(10800,7608), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    43, //init_seq
    39, //immediately_derived
  0, 0},
  {&cd_S3490C3,    ABISELECT(14080,9940), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    60, //bcp->base_subarray_index_in_construction_vtbl_array
    44, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S3490C6,    ABISELECT(14096,9948), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    45, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S3490C6,    ABISELECT(14192,10000), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    46, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S3490C5,    ABISELECT(14192,10000), //bcp->offset
    91, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    169, //bcp->index_in_construction_vtbl_array
    65, //bcp->base_subarray_index_in_construction_vtbl_array
    47, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S3490C7,    ABISELECT(14704,10360), //bcp->offset
    95, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    170, //bcp->index_in_construction_vtbl_array
    66, //bcp->base_subarray_index_in_construction_vtbl_array
    48, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S3490C9,    ABISELECT(14096,9948), //bcp->offset
    81, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    168, //bcp->index_in_construction_vtbl_array
    64, //bcp->base_subarray_index_in_construction_vtbl_array
    49, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S3490C6,    ABISELECT(16800,11888), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    50, //init_seq
    36, //immediately_derived
  0, 0},
  {&cd_S3490C5,    ABISELECT(16800,11888), //bcp->offset
    99, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    171, //bcp->index_in_construction_vtbl_array
    74, //bcp->base_subarray_index_in_construction_vtbl_array
    51, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S3490C6,    ABISELECT(17312,12248), //bcp->offset
    103, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    52, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S3490C8,    ABISELECT(14080,9940), //bcp->offset
    71, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    167, //bcp->index_in_construction_vtbl_array
    59, //bcp->base_subarray_index_in_construction_vtbl_array
    53, //init_seq
    39, //immediately_derived
  0, 0},
  {&cd_S3490C11,    ABISELECT(10800,7608), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    41, //bcp->base_subarray_index_in_construction_vtbl_array
    54, //init_seq
    52, //immediately_derived
  0, 0},
  {&cd_S3490C3,    ABISELECT(22944,16216), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    95, //bcp->base_subarray_index_in_construction_vtbl_array
    55, //init_seq
    51, //immediately_derived
  0, 0},
  {&cd_S3490C3,    ABISELECT(22960,16224), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    100, //bcp->base_subarray_index_in_construction_vtbl_array
    56, //init_seq
    50, //immediately_derived
  0, 0},
  {&cd_S3490C6,    ABISELECT(22976,16232), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    57, //init_seq
    46, //immediately_derived
  0, 0},
  {&cd_S3490C6,    ABISELECT(23072,16284), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    58, //init_seq
    44, //immediately_derived
  0, 0},
  {&cd_S3490C5,    ABISELECT(23072,16284), //bcp->offset
    137, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    175, //bcp->index_in_construction_vtbl_array
    105, //bcp->base_subarray_index_in_construction_vtbl_array
    59, //init_seq
    46, //immediately_derived
  0, 0},
  {&cd_S3490C7,    ABISELECT(23584,16644), //bcp->offset
    141, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    176, //bcp->index_in_construction_vtbl_array
    106, //bcp->base_subarray_index_in_construction_vtbl_array
    60, //init_seq
    46, //immediately_derived
  0, 0},
  {&cd_S3490C9,    ABISELECT(22976,16232), //bcp->offset
    127, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    174, //bcp->index_in_construction_vtbl_array
    104, //bcp->base_subarray_index_in_construction_vtbl_array
    61, //init_seq
    50, //immediately_derived
  0, 0},
  {&cd_S3490C6,    ABISELECT(25680,18172), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    62, //init_seq
    48, //immediately_derived
  0, 0},
  {&cd_S3490C5,    ABISELECT(25680,18172), //bcp->offset
    145, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    177, //bcp->index_in_construction_vtbl_array
    114, //bcp->base_subarray_index_in_construction_vtbl_array
    63, //init_seq
    50, //immediately_derived
  0, 0},
  {&cd_S3490C6,    ABISELECT(26192,18532), //bcp->offset
    149, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    64, //init_seq
    50, //immediately_derived
  0, 0},
  {&cd_S3490C8,    ABISELECT(22960,16224), //bcp->offset
    117, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    173, //bcp->index_in_construction_vtbl_array
    99, //bcp->base_subarray_index_in_construction_vtbl_array
    65, //init_seq
    51, //immediately_derived
  0, 0},
  {&cd_S3490C2,    ABISELECT(22944,16216), //bcp->offset
    106, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    172, //bcp->index_in_construction_vtbl_array
    94, //bcp->base_subarray_index_in_construction_vtbl_array
    66, //init_seq
    52, //immediately_derived
  0, 0},
  {&cd_S3490C10,    ABISELECT(10800,7608), //bcp->offset
    50, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    161, //bcp->index_in_construction_vtbl_array
    40, //bcp->base_subarray_index_in_construction_vtbl_array
    67, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3490C3,    ABISELECT(79248,56100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    225, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    62, //immediately_derived
  0, 0},
  {&cd_S3490C6,    ABISELECT(79264,56108), //bcp->offset
    -1, //bcp->virtual_function_table_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
    58, //immediately_derived
  0, 0},
  {&cd_S3490C6,    ABISELECT(79360,56160), //bcp->offset
    -1, //bcp->virtual_function_table_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
    56, //immediately_derived
  0, 0},
  {&cd_S3490C5,    ABISELECT(79360,56160), //bcp->offset
    241, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    181, //bcp->index_in_construction_vtbl_array
    230, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    58, //immediately_derived
  0, 0},
  {&cd_S3490C7,    ABISELECT(79872,56520), //bcp->offset
    245, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    182, //bcp->index_in_construction_vtbl_array
    231, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    58, //immediately_derived
  0, 0},
  {&cd_S3490C9,    ABISELECT(79264,56108), //bcp->offset
    231, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    180, //bcp->index_in_construction_vtbl_array
    229, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    62, //immediately_derived
  0, 0},
  {&cd_S3490C6,    ABISELECT(81968,58048), //bcp->offset
    -1, //bcp->virtual_function_table_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
    60, //immediately_derived
  0, 0},
  {&cd_S3490C5,    ABISELECT(81968,58048), //bcp->offset
    249, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    183, //bcp->index_in_construction_vtbl_array
    239, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    62, //immediately_derived
  0, 0},
  {&cd_S3490C6,    ABISELECT(82480,58408), //bcp->offset
    253, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    184, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    62, //immediately_derived
  0, 0},
  {&cd_S3490C8,    ABISELECT(79248,56100), //bcp->offset
    217, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    179, //bcp->index_in_construction_vtbl_array
    224, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    67, //immediately_derived
  0, 1},
  {&cd_S3490C6,    ABISELECT(78416,55496), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    64, //immediately_derived
  0, 0},
  {&cd_S3490C5,    ABISELECT(78416,55496), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    205, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    67, //immediately_derived
  0, 0},
  {&cd_S3490C7,    ABISELECT(78928,55856), //bcp->offset
    207, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    185, //bcp->index_in_construction_vtbl_array
    206, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    67, //immediately_derived
  0, 0},
  {&cd_S3490C3,    ABISELECT(79216,56088), //bcp->offset
    211, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    186, //bcp->index_in_construction_vtbl_array
    208, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    67, //immediately_derived
  0, 0},
  {&cd_S3490C15,    ABISELECT(78416,55496), //bcp->offset
    193, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    178, //bcp->index_in_construction_vtbl_array
    204, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3490C1[];
extern void _ZN7S3490C1D1Ev();
extern void _ZN7S3490C1D0Ev();
extern void _ZN7S3490C22v5Ev();
extern void _ZN7S3490C22v6Ev();
extern void _ZN7S3490C12v1Ev();
extern void _ZN7S3490C82v4Ev();
extern void ABISELECT(_ZThn16_N7S3490C1D1Ev,_ZThn8_N7S3490C1D1Ev)();
extern void ABISELECT(_ZThn16_N7S3490C1D0Ev,_ZThn8_N7S3490C1D0Ev)();
extern void _ZN7S3490C62v2Ev();
extern void ABISELECT(_ZThn32_N7S3490C1D1Ev,_ZThn16_N7S3490C1D1Ev)();
extern void ABISELECT(_ZThn32_N7S3490C1D0Ev,_ZThn16_N7S3490C1D0Ev)();
extern void _ZN7S3490C62v2Ev();
extern void _ZN7S3490C72v3Ev();
extern void _ZN7S3490C62v2Ev();
extern void _ZN7S3490C62v2Ev();
extern void _ZN7S3490C62v2Ev();
extern void ABISELECT(_ZThn10800_N7S3490C1D1Ev,_ZThn7608_N7S3490C1D1Ev)();
extern void ABISELECT(_ZThn10800_N7S3490C1D0Ev,_ZThn7608_N7S3490C1D0Ev)();
extern void _ZN8S3490C122v7Ev();
extern void _ZN8S3490C122v8Ev();
extern void _ZN7S3490C62v2Ev();
extern void _ZN7S3490C72v3Ev();
extern void _ZN7S3490C82v4Ev();
extern void ABISELECT(_ZThn14080_N7S3490C1D1Ev,_ZThn9940_N7S3490C1D1Ev)();
extern void ABISELECT(_ZThn14080_N7S3490C1D0Ev,_ZThn9940_N7S3490C1D0Ev)();
extern void _ZN7S3490C62v2Ev();
extern void ABISELECT(_ZThn14096_N7S3490C1D1Ev,_ZThn9948_N7S3490C1D1Ev)();
extern void ABISELECT(_ZThn14096_N7S3490C1D0Ev,_ZThn9948_N7S3490C1D0Ev)();
extern void _ZN7S3490C62v2Ev();
extern void _ZN7S3490C72v3Ev();
extern void _ZN7S3490C62v2Ev();
extern void _ZN7S3490C62v2Ev();
extern void ABISELECT(_ZThn22944_N7S3490C1D1Ev,_ZThn16216_N7S3490C1D1Ev)();
extern void ABISELECT(_ZThn22944_N7S3490C1D0Ev,_ZThn16216_N7S3490C1D0Ev)();
extern void _ZN7S3490C22v5Ev();
extern void _ZN7S3490C22v6Ev();
extern void _ZN7S3490C82v4Ev();
extern void ABISELECT(_ZThn22960_N7S3490C1D1Ev,_ZThn16224_N7S3490C1D1Ev)();
extern void ABISELECT(_ZThn22960_N7S3490C1D0Ev,_ZThn16224_N7S3490C1D0Ev)();
extern void _ZN7S3490C62v2Ev();
extern void ABISELECT(_ZThn22976_N7S3490C1D1Ev,_ZThn16232_N7S3490C1D1Ev)();
extern void ABISELECT(_ZThn22976_N7S3490C1D0Ev,_ZThn16232_N7S3490C1D0Ev)();
extern void _ZN7S3490C62v2Ev();
extern void _ZN7S3490C72v3Ev();
extern void _ZN7S3490C62v2Ev();
extern void _ZN7S3490C62v2Ev();
extern void _ZN7S3490C62v2Ev();
extern void _ZN7S3490C62v2Ev();
extern void _ZN7S3490C72v3Ev();
extern void _ZN7S3490C62v2Ev();
extern void ABISELECT(_ZTv0_n72_N7S3490C1D1Ev,_ZTv0_n36_N7S3490C1D1Ev)();
extern void ABISELECT(_ZThn75712_N7S3490C1D1Ev,_ZThn53556_N7S3490C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S3490C1D0Ev,_ZTv0_n36_N7S3490C1D0Ev)();
extern void ABISELECT(_ZThn75712_N7S3490C1D0Ev,_ZThn53556_N7S3490C1D0Ev)() __attribute__((weak));
extern void _ZN7S3490C62v2Ev();
extern void _ZN7S3490C72v3Ev();
extern void _ZN7S3490C62v2Ev();
extern void ABISELECT(_ZTv0_n80_N7S3490C1D1Ev,_ZTv0_n40_N7S3490C1D1Ev)();
extern void ABISELECT(_ZThn78416_N7S3490C1D1Ev,_ZThn55496_N7S3490C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N7S3490C1D0Ev,_ZTv0_n40_N7S3490C1D0Ev)();
extern void ABISELECT(_ZThn78416_N7S3490C1D0Ev,_ZThn55496_N7S3490C1D0Ev)() __attribute__((weak));
extern void _ZN7S3490C72v3Ev();
extern void _ZN7S3490C82v4Ev();
extern void ABISELECT(_ZTv0_n72_N7S3490C1D1Ev,_ZTv0_n36_N7S3490C1D1Ev)();
extern void ABISELECT(_ZThn79248_N7S3490C1D1Ev,_ZThn56100_N7S3490C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S3490C1D0Ev,_ZTv0_n36_N7S3490C1D0Ev)();
extern void ABISELECT(_ZThn79248_N7S3490C1D0Ev,_ZThn56100_N7S3490C1D0Ev)() __attribute__((weak));
extern void _ZN7S3490C62v2Ev();
extern void ABISELECT(_ZTvn16_n72_N7S3490C1D1Ev,_ZTvn8_n36_N7S3490C1D1Ev)();
extern void ABISELECT(_ZTvn16_n72_N7S3490C1D0Ev,_ZTvn8_n36_N7S3490C1D0Ev)();
extern void _ZN7S3490C62v2Ev();
extern void _ZN7S3490C72v3Ev();
extern void _ZN7S3490C62v2Ev();
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY vtc_S3490C1[] = {
  ABISELECT(79248,56100),
  ABISELECT(78416,55496),
  ABISELECT(75712,53556),
  ABISELECT(75696,53548),
  ABISELECT(75408,53316),
  ABISELECT(75312,53264),
  ABISELECT(74800,52904),
  ABISELECT(74776,52888),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C1[0]),
  (VTBL_ENTRY)&_ZN7S3490C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3490C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3490C22v5Ev,
  (VTBL_ENTRY)&_ZN7S3490C22v6Ev,
  (VTBL_ENTRY)&_ZN7S3490C12v1Ev,
  ABISELECT(75680,53540),
  ABISELECT(75392,53308),
  ABISELECT(75296,53256),
  ABISELECT(74784,52896),
  ABISELECT(74760,52880),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S3490C1[0]),
  (VTBL_ENTRY)&_ZN7S3490C82v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S3490C1D1Ev,_ZThn8_N7S3490C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S3490C1D0Ev,_ZThn8_N7S3490C1D0Ev),
  ABISELECT(75376,53300),
  ABISELECT(74768,52888),
  ABISELECT(75664,53532),
  ABISELECT(75280,53248),
  ABISELECT(74744,52872),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S3490C1[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N7S3490C1D1Ev,_ZThn16_N7S3490C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N7S3490C1D0Ev,_ZThn16_N7S3490C1D0Ev),
  ABISELECT(74648,52820),
  ABISELECT(-128,-68),
  (VTBL_ENTRY)&(_ZTI7S3490C1[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  ABISELECT(74672,52836),
  ABISELECT(-640,-428),
  (VTBL_ENTRY)&(_ZTI7S3490C1[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
  ABISELECT(72040,50932),
  ABISELECT(-2736,-1956),
  (VTBL_ENTRY)&(_ZTI7S3490C1[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  ABISELECT(-3248,-2316),
  (VTBL_ENTRY)&(_ZTI7S3490C1[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  ABISELECT(64912,45948),
  ABISELECT(64608,45708),
  ABISELECT(64000,45296),
  ABISELECT(64896,45940),
  ABISELECT(64512,45656),
  ABISELECT(63976,45280),
  ABISELECT(-10800,-7608),
  (VTBL_ENTRY)&(_ZTI7S3490C1[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn10800_N7S3490C1D1Ev,_ZThn7608_N7S3490C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn10800_N7S3490C1D0Ev,_ZThn7608_N7S3490C1D0Ev),
  (VTBL_ENTRY)&_ZN8S3490C122v7Ev,
  (VTBL_ENTRY)&_ZN8S3490C122v8Ev,
  ABISELECT(63880,45228),
  ABISELECT(-10896,-7660),
  (VTBL_ENTRY)&(_ZTI7S3490C1[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  ABISELECT(63904,45244),
  ABISELECT(-11408,-8020),
  (VTBL_ENTRY)&(_ZTI7S3490C1[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
  ABISELECT(61616,43608),
  ABISELECT(61328,43376),
  ABISELECT(61232,43324),
  ABISELECT(60720,42964),
  ABISELECT(60696,42948),
  ABISELECT(-14080,-9940),
  (VTBL_ENTRY)&(_ZTI7S3490C1[0]),
  (VTBL_ENTRY)&_ZN7S3490C82v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn14080_N7S3490C1D1Ev,_ZThn9940_N7S3490C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn14080_N7S3490C1D0Ev,_ZThn9940_N7S3490C1D0Ev),
  ABISELECT(61312,43368),
  ABISELECT(60704,42956),
  ABISELECT(61600,43600),
  ABISELECT(61216,43316),
  ABISELECT(60680,42940),
  ABISELECT(-14096,-9948),
  (VTBL_ENTRY)&(_ZTI7S3490C1[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn14096_N7S3490C1D1Ev,_ZThn9948_N7S3490C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn14096_N7S3490C1D0Ev,_ZThn9948_N7S3490C1D0Ev),
  ABISELECT(60584,42888),
  ABISELECT(-14192,-10000),
  (VTBL_ENTRY)&(_ZTI7S3490C1[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  ABISELECT(60608,42904),
  ABISELECT(-14704,-10360),
  (VTBL_ENTRY)&(_ZTI7S3490C1[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
  ABISELECT(57976,41000),
  ABISELECT(-16800,-11888),
  (VTBL_ENTRY)&(_ZTI7S3490C1[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  ABISELECT(-17312,-12248),
  (VTBL_ENTRY)&(_ZTI7S3490C1[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  ABISELECT(52752,37332),
  ABISELECT(52464,37100),
  ABISELECT(52368,37048),
  ABISELECT(51856,36688),
  ABISELECT(51832,36672),
  ABISELECT(-22944,-16216),
  (VTBL_ENTRY)&(_ZTI7S3490C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn22944_N7S3490C1D1Ev,_ZThn16216_N7S3490C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn22944_N7S3490C1D0Ev,_ZThn16216_N7S3490C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3490C22v5Ev,
  (VTBL_ENTRY)&_ZN7S3490C22v6Ev,
  ABISELECT(52736,37324),
  ABISELECT(52448,37092),
  ABISELECT(52352,37040),
  ABISELECT(51840,36680),
  ABISELECT(51816,36664),
  ABISELECT(-22960,-16224),
  (VTBL_ENTRY)&(_ZTI7S3490C1[0]),
  (VTBL_ENTRY)&_ZN7S3490C82v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn22960_N7S3490C1D1Ev,_ZThn16224_N7S3490C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn22960_N7S3490C1D0Ev,_ZThn16224_N7S3490C1D0Ev),
  ABISELECT(52432,37084),
  ABISELECT(51824,36672),
  ABISELECT(52720,37316),
  ABISELECT(52336,37032),
  ABISELECT(51800,36656),
  ABISELECT(-22976,-16232),
  (VTBL_ENTRY)&(_ZTI7S3490C1[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn22976_N7S3490C1D1Ev,_ZThn16232_N7S3490C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn22976_N7S3490C1D0Ev,_ZThn16232_N7S3490C1D0Ev),
  ABISELECT(51704,36604),
  ABISELECT(-23072,-16284),
  (VTBL_ENTRY)&(_ZTI7S3490C1[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  ABISELECT(51728,36620),
  ABISELECT(-23584,-16644),
  (VTBL_ENTRY)&(_ZTI7S3490C1[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
  ABISELECT(49096,34716),
  ABISELECT(-25680,-18172),
  (VTBL_ENTRY)&(_ZTI7S3490C1[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  ABISELECT(-26192,-18532),
  (VTBL_ENTRY)&(_ZTI7S3490C1[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  0,
  ABISELECT(-24,-16),
  ABISELECT(-74800,-52904),
  (VTBL_ENTRY)&(_ZTI7S3490C1[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  0,
  ABISELECT(-75312,-53264),
  (VTBL_ENTRY)&(_ZTI7S3490C1[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  0,
  ABISELECT(-96,-52),
  ABISELECT(-75408,-53316),
  (VTBL_ENTRY)&(_ZTI7S3490C1[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
  ABISELECT(-288,-232),
  ABISELECT(-384,-284),
  ABISELECT(-896,-644),
  ABISELECT(-920,-660),
  ABISELECT(-75696,-53548),
  (VTBL_ENTRY)&(_ZTI7S3490C1[0]),
  ABISELECT(608,412),
  ABISELECT(-75712,-53556),
  0,
  ABISELECT(-304,-240),
  ABISELECT(-912,-652),
  ABISELECT(-16,-8),
  ABISELECT(-400,-292),
  ABISELECT(-936,-668),
  ABISELECT(-75712,-53556),
  (VTBL_ENTRY)&(_ZTI7S3490C1[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S3490C1D1Ev,_ZTv0_n36_N7S3490C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S3490C1D0Ev,_ZTv0_n36_N7S3490C1D0Ev),
  ABISELECT(-1032,-720),
  ABISELECT(-75808,-53608),
  (VTBL_ENTRY)&(_ZTI7S3490C1[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  ABISELECT(-1008,-704),
  ABISELECT(-76320,-53968),
  (VTBL_ENTRY)&(_ZTI7S3490C1[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
  ABISELECT(512,360),
  ABISELECT(-78416,-55496),
  0,
  ABISELECT(-2720,-1948),
  ABISELECT(-3008,-2180),
  ABISELECT(-3104,-2232),
  ABISELECT(-3616,-2592),
  ABISELECT(832,604),
  ABISELECT(-3640,-2608),
  ABISELECT(-78416,-55496),
  (VTBL_ENTRY)&(_ZTI7S3490C1[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S3490C1D1Ev,_ZTv0_n40_N7S3490C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S3490C1D0Ev,_ZTv0_n40_N7S3490C1D0Ev),
  ABISELECT(-3616,-2592),
  ABISELECT(-78928,-55856),
  (VTBL_ENTRY)&(_ZTI7S3490C1[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
  ABISELECT(-3808,-2772),
  ABISELECT(-3904,-2824),
  ABISELECT(-4416,-3184),
  ABISELECT(-4440,-3200),
  ABISELECT(-79216,-56088),
  (VTBL_ENTRY)&(_ZTI7S3490C1[0]),
  ABISELECT(624,420),
  ABISELECT(16,8),
  ABISELECT(-79248,-56100),
  0,
  ABISELECT(-3552,-2552),
  ABISELECT(-3840,-2784),
  ABISELECT(-3936,-2836),
  ABISELECT(-4448,-3196),
  ABISELECT(-4472,-3212),
  ABISELECT(-79248,-56100),
  (VTBL_ENTRY)&(_ZTI7S3490C1[0]),
  (VTBL_ENTRY)&_ZN7S3490C82v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S3490C1D1Ev,_ZTv0_n36_N7S3490C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S3490C1D0Ev,_ZTv0_n36_N7S3490C1D0Ev),
  ABISELECT(-3856,-2792),
  ABISELECT(-4464,-3204),
  ABISELECT(-3568,-2560),
  ABISELECT(-3952,-2844),
  ABISELECT(-4488,-3220),
  ABISELECT(-79264,-56108),
  (VTBL_ENTRY)&(_ZTI7S3490C1[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n72_N7S3490C1D1Ev,_ZTvn8_n36_N7S3490C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n72_N7S3490C1D0Ev,_ZTvn8_n36_N7S3490C1D0Ev),
  ABISELECT(-4584,-3272),
  ABISELECT(-79360,-56160),
  (VTBL_ENTRY)&(_ZTI7S3490C1[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  ABISELECT(-4560,-3256),
  ABISELECT(-79872,-56520),
  (VTBL_ENTRY)&(_ZTI7S3490C1[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
  ABISELECT(-7192,-5160),
  ABISELECT(-81968,-58048),
  (VTBL_ENTRY)&(_ZTI7S3490C1[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  ABISELECT(-82480,-58408),
  (VTBL_ENTRY)&(_ZTI7S3490C1[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern VTBL_ENTRY _ZTV7S3490C1[];
extern void _ZN7S3490C2D1Ev();
extern void _ZN7S3490C2D0Ev();
extern void _ZN7S3490C22v5Ev();
extern void _ZN7S3490C22v6Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C2__7S3490C1[] = {
  ABISELECT(75696,53548),
  ABISELECT(75408,53316),
  ABISELECT(75312,53264),
  ABISELECT(74800,52904),
  ABISELECT(74776,52888),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C2[0]),
  (VTBL_ENTRY)&_ZN7S3490C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3490C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3490C22v5Ev,
  (VTBL_ENTRY)&_ZN7S3490C22v6Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3490C37S3490C2__7S3490C1[] = {
  ABISELECT(75408,53316),
  ABISELECT(75312,53264),
  ABISELECT(74800,52904),
  ABISELECT(74776,52888),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C3[0]),
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C5__7S3490C37S3490C2__7S3490C1[] = {
  0,
  ABISELECT(-24,-16),
  ABISELECT(-74800,-52904),
  (VTBL_ENTRY)&(_ZTI7S3490C3[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C6__A1__7S3490C37S3490C2__7S3490C1[] = {
  0,
  ABISELECT(-75312,-53264),
  (VTBL_ENTRY)&(_ZTI7S3490C3[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C7__7S3490C37S3490C2__7S3490C1[] = {
  0,
  ABISELECT(-96,-52),
  ABISELECT(-75408,-53316),
  (VTBL_ENTRY)&(_ZTI7S3490C3[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C82v4Ev();
extern void _ZN7S3490C8D1Ev();
extern void _ZN7S3490C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C87S3490C2__7S3490C1[] = {
  ABISELECT(75680,53540),
  ABISELECT(75392,53308),
  ABISELECT(75296,53256),
  ABISELECT(74784,52896),
  ABISELECT(74760,52880),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C8[0]),
  (VTBL_ENTRY)&_ZN7S3490C82v4Ev,
  (VTBL_ENTRY)&_ZN7S3490C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3490C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3490C37S3490C87S3490C2__A1__7S3490C1[] = {
  ABISELECT(75392,53308),
  ABISELECT(75296,53256),
  ABISELECT(74784,52896),
  ABISELECT(74760,52880),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C3[0]),
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C5__7S3490C37S3490C87S3490C2__A1__7S3490C1[] = {
  0,
  ABISELECT(-24,-16),
  ABISELECT(-74784,-52896),
  (VTBL_ENTRY)&(_ZTI7S3490C3[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C6__A1__7S3490C37S3490C87S3490C2__A1__7S3490C1[] = {
  0,
  ABISELECT(-75296,-53256),
  (VTBL_ENTRY)&(_ZTI7S3490C3[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C7__7S3490C37S3490C87S3490C2__A1__7S3490C1[] = {
  0,
  ABISELECT(-96,-52),
  ABISELECT(-75392,-53308),
  (VTBL_ENTRY)&(_ZTI7S3490C3[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C62v2Ev();
extern void _ZN7S3490C9D1Ev();
extern void _ZN7S3490C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C97S3490C87S3490C2__7S3490C1[] = {
  ABISELECT(75376,53300),
  ABISELECT(74768,52888),
  ABISELECT(75664,53532),
  ABISELECT(75280,53248),
  ABISELECT(74744,52872),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3490C9D1Ev,
  (VTBL_ENTRY)&_ZN7S3490C9D0Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C57S3490C97S3490C87S3490C2__A1__7S3490C1[] = {
  ABISELECT(74648,52820),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C5[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C77S3490C97S3490C87S3490C2__A1__7S3490C1[] = {
  ABISELECT(74672,52836),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C7[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C6__7S3490C77S3490C97S3490C87S3490C2__A1__7S3490C1[] = {
  0,
  ABISELECT(-74672,-52836),
  (VTBL_ENTRY)&(_ZTI7S3490C7[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C5__A__7S3490C97S3490C87S3490C2__7S3490C1[] = {
  ABISELECT(74648,52820),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C7__A__7S3490C97S3490C87S3490C2__7S3490C1[] = {
  ABISELECT(74672,52836),
  ABISELECT(-608,-412),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C6__A2__7S3490C97S3490C87S3490C2__7S3490C1[] = {
  0,
  ABISELECT(-75280,-53248),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3490C3__7S3490C97S3490C87S3490C2__7S3490C1[] = {
  ABISELECT(-288,-232),
  ABISELECT(-384,-284),
  ABISELECT(-896,-644),
  ABISELECT(-920,-660),
  ABISELECT(-75664,-53532),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C5__A1__7S3490C97S3490C87S3490C2__7S3490C1[] = {
  0,
  ABISELECT(-24,-16),
  ABISELECT(-74768,-52888),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C7__A1__7S3490C97S3490C87S3490C2__7S3490C1[] = {
  0,
  ABISELECT(-96,-52),
  ABISELECT(-75376,-53300),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C57S3490C87S3490C2__A2__7S3490C1[] = {
  ABISELECT(72040,50932),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C5[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C5__7S3490C87S3490C2__7S3490C1[] = {
  0,
  ABISELECT(-24,-16),
  ABISELECT(-74784,-52896),
  (VTBL_ENTRY)&(_ZTI7S3490C8[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C6__A1__7S3490C87S3490C2__7S3490C1[] = {
  0,
  ABISELECT(-75296,-53256),
  (VTBL_ENTRY)&(_ZTI7S3490C8[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C7__7S3490C87S3490C2__7S3490C1[] = {
  0,
  ABISELECT(-96,-52),
  ABISELECT(-75392,-53308),
  (VTBL_ENTRY)&(_ZTI7S3490C8[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C62v2Ev();
extern void ABISELECT(_ZThn16_N7S3490C8D1Ev,_ZThn8_N7S3490C8D1Ev)();
extern void ABISELECT(_ZThn16_N7S3490C8D0Ev,_ZThn8_N7S3490C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3490C9__7S3490C87S3490C2__7S3490C1[] = {
  ABISELECT(75376,53300),
  ABISELECT(74768,52888),
  ABISELECT(75664,53532),
  ABISELECT(75280,53248),
  ABISELECT(74744,52872),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S3490C8[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S3490C8D1Ev,_ZThn8_N7S3490C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S3490C8D0Ev,_ZThn8_N7S3490C8D0Ev),
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C57S3490C9__A1__7S3490C87S3490C2__7S3490C1[] = {
  ABISELECT(74648,52820),
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI7S3490C8[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C77S3490C9__A1__7S3490C87S3490C2__7S3490C1[] = {
  ABISELECT(74672,52836),
  ABISELECT(-624,-420),
  (VTBL_ENTRY)&(_ZTI7S3490C8[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3490C3__A1__7S3490C87S3490C2__7S3490C1[] = {
  ABISELECT(-288,-232),
  ABISELECT(-384,-284),
  ABISELECT(-896,-644),
  ABISELECT(-920,-660),
  ABISELECT(-75680,-53540),
  (VTBL_ENTRY)&(_ZTI7S3490C8[0]),
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C5__A__7S3490C87S3490C2__7S3490C1[] = {
  ABISELECT(72040,50932),
  ABISELECT(-2720,-1948),
  (VTBL_ENTRY)&(_ZTI7S3490C8[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C5__7S3490C2__7S3490C1[] = {
  0,
  ABISELECT(-24,-16),
  ABISELECT(-74800,-52904),
  (VTBL_ENTRY)&(_ZTI7S3490C2[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C6__A1__7S3490C2__7S3490C1[] = {
  0,
  ABISELECT(-75312,-53264),
  (VTBL_ENTRY)&(_ZTI7S3490C2[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C7__7S3490C2__7S3490C1[] = {
  0,
  ABISELECT(-96,-52),
  ABISELECT(-75408,-53316),
  (VTBL_ENTRY)&(_ZTI7S3490C2[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C82v4Ev();
extern void ABISELECT(_ZThn16_N7S3490C2D1Ev,_ZThn8_N7S3490C2D1Ev)();
extern void ABISELECT(_ZThn16_N7S3490C2D0Ev,_ZThn8_N7S3490C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3490C8__7S3490C2__7S3490C1[] = {
  ABISELECT(75680,53540),
  ABISELECT(75392,53308),
  ABISELECT(75296,53256),
  ABISELECT(74784,52896),
  ABISELECT(74760,52880),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S3490C2[0]),
  (VTBL_ENTRY)&_ZN7S3490C82v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S3490C2D1Ev,_ZThn8_N7S3490C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S3490C2D0Ev,_ZThn8_N7S3490C2D0Ev),
};
extern void _ZN7S3490C62v2Ev();
extern void ABISELECT(_ZThn32_N7S3490C2D1Ev,_ZThn16_N7S3490C2D1Ev)();
extern void ABISELECT(_ZThn32_N7S3490C2D0Ev,_ZThn16_N7S3490C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3490C97S3490C8__7S3490C2__7S3490C1[] = {
  ABISELECT(75376,53300),
  ABISELECT(74768,52888),
  ABISELECT(75664,53532),
  ABISELECT(75280,53248),
  ABISELECT(74744,52872),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S3490C2[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N7S3490C2D1Ev,_ZThn16_N7S3490C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N7S3490C2D0Ev,_ZThn16_N7S3490C2D0Ev),
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C57S3490C97S3490C8__A1__7S3490C2__7S3490C1[] = {
  ABISELECT(74648,52820),
  ABISELECT(-128,-68),
  (VTBL_ENTRY)&(_ZTI7S3490C2[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C77S3490C97S3490C8__A1__7S3490C2__7S3490C1[] = {
  ABISELECT(74672,52836),
  ABISELECT(-640,-428),
  (VTBL_ENTRY)&(_ZTI7S3490C2[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3490C3__A2__7S3490C2__7S3490C1[] = {
  ABISELECT(-288,-232),
  ABISELECT(-384,-284),
  ABISELECT(-896,-644),
  ABISELECT(-920,-660),
  ABISELECT(-75696,-53548),
  (VTBL_ENTRY)&(_ZTI7S3490C2[0]),
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C57S3490C8__A2__7S3490C2__7S3490C1[] = {
  ABISELECT(72040,50932),
  ABISELECT(-2736,-1956),
  (VTBL_ENTRY)&(_ZTI7S3490C2[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C62v2Ev();
extern void _ZN8S3490C10D1Ev();
extern void _ZN8S3490C10D0Ev();
extern void _ZN8S3490C122v7Ev();
extern void _ZN8S3490C122v8Ev();
static  VTBL_ENTRY _tg__ZTV8S3490C10__7S3490C1[] = {
  ABISELECT(64912,45948),
  ABISELECT(64608,45708),
  ABISELECT(64000,45296),
  ABISELECT(64896,45940),
  ABISELECT(64512,45656),
  ABISELECT(63976,45280),
  0,
  (VTBL_ENTRY)&(_ZTI8S3490C10[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  (VTBL_ENTRY)&_ZN8S3490C10D1Ev,
  (VTBL_ENTRY)&_ZN8S3490C10D0Ev,
  (VTBL_ENTRY)&_ZN8S3490C122v7Ev,
  (VTBL_ENTRY)&_ZN8S3490C122v8Ev,
};
extern void _ZN7S3490C62v2Ev();
extern void _ZN8S3490C11D1Ev();
extern void _ZN8S3490C11D0Ev();
extern void _ZN8S3490C122v7Ev();
extern void _ZN8S3490C122v8Ev();
static  VTBL_ENTRY _tg__ZTV8S3490C118S3490C10__7S3490C1[] = {
  ABISELECT(64608,45708),
  ABISELECT(64000,45296),
  ABISELECT(64896,45940),
  ABISELECT(64512,45656),
  ABISELECT(63976,45280),
  0,
  (VTBL_ENTRY)&(_ZTI8S3490C11[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  (VTBL_ENTRY)&_ZN8S3490C11D1Ev,
  (VTBL_ENTRY)&_ZN8S3490C11D0Ev,
  (VTBL_ENTRY)&_ZN8S3490C122v7Ev,
  (VTBL_ENTRY)&_ZN8S3490C122v8Ev,
};
extern void _ZN7S3490C62v2Ev();
extern void _ZN8S3490C12D1Ev();
extern void _ZN8S3490C12D0Ev();
extern void _ZN8S3490C122v7Ev();
extern void _ZN8S3490C122v8Ev();
static  VTBL_ENTRY _tg__ZTV8S3490C128S3490C118S3490C10__7S3490C1[] = {
  ABISELECT(64608,45708),
  ABISELECT(64000,45296),
  ABISELECT(64896,45940),
  ABISELECT(64512,45656),
  ABISELECT(63976,45280),
  0,
  (VTBL_ENTRY)&(_ZTI8S3490C12[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  (VTBL_ENTRY)&_ZN8S3490C12D1Ev,
  (VTBL_ENTRY)&_ZN8S3490C12D0Ev,
  (VTBL_ENTRY)&_ZN8S3490C122v7Ev,
  (VTBL_ENTRY)&_ZN8S3490C122v8Ev,
};
extern void _ZN7S3490C62v2Ev();
extern void _ZN7S3490C9D1Ev();
extern void _ZN7S3490C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C98S3490C128S3490C118S3490C10__A2__7S3490C1[] = {
  ABISELECT(64608,45708),
  ABISELECT(64000,45296),
  ABISELECT(64896,45940),
  ABISELECT(64512,45656),
  ABISELECT(63976,45280),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3490C9D1Ev,
  (VTBL_ENTRY)&_ZN7S3490C9D0Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C57S3490C98S3490C128S3490C118S3490C10__A4__7S3490C1[] = {
  ABISELECT(63880,45228),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C5[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C77S3490C98S3490C128S3490C118S3490C10__A3__7S3490C1[] = {
  ABISELECT(63904,45244),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C7[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C6__7S3490C77S3490C98S3490C128S3490C118S3490C10__A3__7S3490C1[] = {
  0,
  ABISELECT(-63904,-45244),
  (VTBL_ENTRY)&(_ZTI7S3490C7[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C5__A__7S3490C98S3490C128S3490C118S3490C10__A2__7S3490C1[] = {
  ABISELECT(63880,45228),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C7__A__7S3490C98S3490C128S3490C118S3490C10__A2__7S3490C1[] = {
  ABISELECT(63904,45244),
  ABISELECT(-608,-412),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C6__A2__7S3490C98S3490C128S3490C118S3490C10__A2__7S3490C1[] = {
  0,
  ABISELECT(-64512,-45656),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3490C3__7S3490C98S3490C128S3490C118S3490C10__A2__7S3490C1[] = {
  ABISELECT(-288,-232),
  ABISELECT(-384,-284),
  ABISELECT(-896,-644),
  ABISELECT(-920,-660),
  ABISELECT(-64896,-45940),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C5__A1__7S3490C98S3490C128S3490C118S3490C10__A2__7S3490C1[] = {
  0,
  ABISELECT(-24,-16),
  ABISELECT(-64000,-45296),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C7__A1__7S3490C98S3490C128S3490C118S3490C10__A2__7S3490C1[] = {
  0,
  ABISELECT(-96,-52),
  ABISELECT(-64608,-45708),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C57S3490C9__8S3490C128S3490C118S3490C10__7S3490C1[] = {
  ABISELECT(63880,45228),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI8S3490C12[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C77S3490C9__8S3490C128S3490C118S3490C10__7S3490C1[] = {
  ABISELECT(63904,45244),
  ABISELECT(-608,-412),
  (VTBL_ENTRY)&(_ZTI8S3490C12[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C6__A2__8S3490C128S3490C118S3490C10__7S3490C1[] = {
  0,
  ABISELECT(-64512,-45656),
  (VTBL_ENTRY)&(_ZTI8S3490C12[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3490C3__8S3490C128S3490C118S3490C10__7S3490C1[] = {
  ABISELECT(-288,-232),
  ABISELECT(-384,-284),
  ABISELECT(-896,-644),
  ABISELECT(-920,-660),
  ABISELECT(-64896,-45940),
  (VTBL_ENTRY)&(_ZTI8S3490C12[0]),
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C5__A1__8S3490C128S3490C118S3490C10__7S3490C1[] = {
  0,
  ABISELECT(-24,-16),
  ABISELECT(-64000,-45296),
  (VTBL_ENTRY)&(_ZTI8S3490C12[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C7__A1__8S3490C128S3490C118S3490C10__7S3490C1[] = {
  0,
  ABISELECT(-96,-52),
  ABISELECT(-64608,-45708),
  (VTBL_ENTRY)&(_ZTI8S3490C12[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C82v4Ev();
extern void _ZN7S3490C8D1Ev();
extern void _ZN7S3490C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C88S3490C118S3490C10__A1__7S3490C1[] = {
  ABISELECT(61616,43608),
  ABISELECT(61328,43376),
  ABISELECT(61232,43324),
  ABISELECT(60720,42964),
  ABISELECT(60696,42948),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C8[0]),
  (VTBL_ENTRY)&_ZN7S3490C82v4Ev,
  (VTBL_ENTRY)&_ZN7S3490C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3490C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3490C37S3490C88S3490C118S3490C10__A3__7S3490C1[] = {
  ABISELECT(61328,43376),
  ABISELECT(61232,43324),
  ABISELECT(60720,42964),
  ABISELECT(60696,42948),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C3[0]),
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C5__7S3490C37S3490C88S3490C118S3490C10__A3__7S3490C1[] = {
  0,
  ABISELECT(-24,-16),
  ABISELECT(-60720,-42964),
  (VTBL_ENTRY)&(_ZTI7S3490C3[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C6__A1__7S3490C37S3490C88S3490C118S3490C10__A3__7S3490C1[] = {
  0,
  ABISELECT(-61232,-43324),
  (VTBL_ENTRY)&(_ZTI7S3490C3[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C7__7S3490C37S3490C88S3490C118S3490C10__A3__7S3490C1[] = {
  0,
  ABISELECT(-96,-52),
  ABISELECT(-61328,-43376),
  (VTBL_ENTRY)&(_ZTI7S3490C3[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C62v2Ev();
extern void _ZN7S3490C9D1Ev();
extern void _ZN7S3490C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C97S3490C88S3490C118S3490C10__A3__7S3490C1[] = {
  ABISELECT(61312,43368),
  ABISELECT(60704,42956),
  ABISELECT(61600,43600),
  ABISELECT(61216,43316),
  ABISELECT(60680,42940),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3490C9D1Ev,
  (VTBL_ENTRY)&_ZN7S3490C9D0Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C57S3490C97S3490C88S3490C118S3490C10__A5__7S3490C1[] = {
  ABISELECT(60584,42888),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C5[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C77S3490C97S3490C88S3490C118S3490C10__A4__7S3490C1[] = {
  ABISELECT(60608,42904),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C7[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C6__7S3490C77S3490C97S3490C88S3490C118S3490C10__A4__7S3490C1[] = {
  0,
  ABISELECT(-60608,-42904),
  (VTBL_ENTRY)&(_ZTI7S3490C7[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C5__A__7S3490C97S3490C88S3490C118S3490C10__A3__7S3490C1[] = {
  ABISELECT(60584,42888),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C7__A__7S3490C97S3490C88S3490C118S3490C10__A3__7S3490C1[] = {
  ABISELECT(60608,42904),
  ABISELECT(-608,-412),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C6__A2__7S3490C97S3490C88S3490C118S3490C10__A3__7S3490C1[] = {
  0,
  ABISELECT(-61216,-43316),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3490C3__7S3490C97S3490C88S3490C118S3490C10__A3__7S3490C1[] = {
  ABISELECT(-288,-232),
  ABISELECT(-384,-284),
  ABISELECT(-896,-644),
  ABISELECT(-920,-660),
  ABISELECT(-61600,-43600),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C5__A1__7S3490C97S3490C88S3490C118S3490C10__A3__7S3490C1[] = {
  0,
  ABISELECT(-24,-16),
  ABISELECT(-60704,-42956),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C7__A1__7S3490C97S3490C88S3490C118S3490C10__A3__7S3490C1[] = {
  0,
  ABISELECT(-96,-52),
  ABISELECT(-61312,-43368),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C57S3490C88S3490C118S3490C10__A6__7S3490C1[] = {
  ABISELECT(57976,41000),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C5[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C5__7S3490C88S3490C118S3490C10__A1__7S3490C1[] = {
  0,
  ABISELECT(-24,-16),
  ABISELECT(-60720,-42964),
  (VTBL_ENTRY)&(_ZTI7S3490C8[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C6__A1__7S3490C88S3490C118S3490C10__A1__7S3490C1[] = {
  0,
  ABISELECT(-61232,-43324),
  (VTBL_ENTRY)&(_ZTI7S3490C8[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C7__7S3490C88S3490C118S3490C10__A1__7S3490C1[] = {
  0,
  ABISELECT(-96,-52),
  ABISELECT(-61328,-43376),
  (VTBL_ENTRY)&(_ZTI7S3490C8[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C62v2Ev();
extern void ABISELECT(_ZThn16_N7S3490C8D1Ev,_ZThn8_N7S3490C8D1Ev)();
extern void ABISELECT(_ZThn16_N7S3490C8D0Ev,_ZThn8_N7S3490C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3490C9__7S3490C88S3490C118S3490C10__A1__7S3490C1[] = {
  ABISELECT(61312,43368),
  ABISELECT(60704,42956),
  ABISELECT(61600,43600),
  ABISELECT(61216,43316),
  ABISELECT(60680,42940),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S3490C8[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S3490C8D1Ev,_ZThn8_N7S3490C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S3490C8D0Ev,_ZThn8_N7S3490C8D0Ev),
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C57S3490C9__A1__7S3490C88S3490C118S3490C10__A1__7S3490C1[] = {
  ABISELECT(60584,42888),
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI7S3490C8[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C77S3490C9__A1__7S3490C88S3490C118S3490C10__A1__7S3490C1[] = {
  ABISELECT(60608,42904),
  ABISELECT(-624,-420),
  (VTBL_ENTRY)&(_ZTI7S3490C8[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3490C3__A1__7S3490C88S3490C118S3490C10__A1__7S3490C1[] = {
  ABISELECT(-288,-232),
  ABISELECT(-384,-284),
  ABISELECT(-896,-644),
  ABISELECT(-920,-660),
  ABISELECT(-61616,-43608),
  (VTBL_ENTRY)&(_ZTI7S3490C8[0]),
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C5__A__7S3490C88S3490C118S3490C10__A1__7S3490C1[] = {
  ABISELECT(57976,41000),
  ABISELECT(-2720,-1948),
  (VTBL_ENTRY)&(_ZTI7S3490C8[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3490C3__8S3490C118S3490C10__7S3490C1[] = {
  ABISELECT(-288,-232),
  ABISELECT(-384,-284),
  ABISELECT(-896,-644),
  ABISELECT(-920,-660),
  ABISELECT(-64896,-45940),
  (VTBL_ENTRY)&(_ZTI8S3490C11[0]),
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C5__8S3490C118S3490C10__7S3490C1[] = {
  0,
  ABISELECT(-24,-16),
  ABISELECT(-64000,-45296),
  (VTBL_ENTRY)&(_ZTI8S3490C11[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C6__A1__8S3490C118S3490C10__7S3490C1[] = {
  0,
  ABISELECT(-64512,-45656),
  (VTBL_ENTRY)&(_ZTI8S3490C11[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C7__8S3490C118S3490C10__7S3490C1[] = {
  0,
  ABISELECT(-96,-52),
  ABISELECT(-64608,-45708),
  (VTBL_ENTRY)&(_ZTI8S3490C11[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C57S3490C98S3490C12__A1__8S3490C118S3490C10__7S3490C1[] = {
  ABISELECT(63880,45228),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI8S3490C11[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C77S3490C98S3490C12__A1__8S3490C118S3490C10__7S3490C1[] = {
  ABISELECT(63904,45244),
  ABISELECT(-608,-412),
  (VTBL_ENTRY)&(_ZTI8S3490C11[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C82v4Ev();
extern void ABISELECT(_ZThn3280_N8S3490C11D1Ev,_ZThn2332_N8S3490C11D1Ev)();
extern void ABISELECT(_ZThn3280_N8S3490C11D0Ev,_ZThn2332_N8S3490C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3490C8__8S3490C118S3490C10__7S3490C1[] = {
  ABISELECT(61616,43608),
  ABISELECT(61328,43376),
  ABISELECT(61232,43324),
  ABISELECT(60720,42964),
  ABISELECT(60696,42948),
  ABISELECT(-3280,-2332),
  (VTBL_ENTRY)&(_ZTI8S3490C11[0]),
  (VTBL_ENTRY)&_ZN7S3490C82v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn3280_N8S3490C11D1Ev,_ZThn2332_N8S3490C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn3280_N8S3490C11D0Ev,_ZThn2332_N8S3490C11D0Ev),
};
extern void _ZN7S3490C62v2Ev();
extern void ABISELECT(_ZThn3296_N8S3490C11D1Ev,_ZThn2340_N8S3490C11D1Ev)();
extern void ABISELECT(_ZThn3296_N8S3490C11D0Ev,_ZThn2340_N8S3490C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3490C97S3490C8__A1__8S3490C118S3490C10__7S3490C1[] = {
  ABISELECT(61312,43368),
  ABISELECT(60704,42956),
  ABISELECT(61600,43600),
  ABISELECT(61216,43316),
  ABISELECT(60680,42940),
  ABISELECT(-3296,-2340),
  (VTBL_ENTRY)&(_ZTI8S3490C11[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn3296_N8S3490C11D1Ev,_ZThn2340_N8S3490C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn3296_N8S3490C11D0Ev,_ZThn2340_N8S3490C11D0Ev),
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C57S3490C97S3490C8__A2__8S3490C118S3490C10__7S3490C1[] = {
  ABISELECT(60584,42888),
  ABISELECT(-3392,-2392),
  (VTBL_ENTRY)&(_ZTI8S3490C11[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C77S3490C97S3490C8__A2__8S3490C118S3490C10__7S3490C1[] = {
  ABISELECT(60608,42904),
  ABISELECT(-3904,-2752),
  (VTBL_ENTRY)&(_ZTI8S3490C11[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C57S3490C8__A3__8S3490C118S3490C10__7S3490C1[] = {
  ABISELECT(57976,41000),
  ABISELECT(-6000,-4280),
  (VTBL_ENTRY)&(_ZTI8S3490C11[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C2D1Ev();
extern void _ZN7S3490C2D0Ev();
extern void _ZN7S3490C22v5Ev();
extern void _ZN7S3490C22v6Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C28S3490C10__A1__7S3490C1[] = {
  ABISELECT(52752,37332),
  ABISELECT(52464,37100),
  ABISELECT(52368,37048),
  ABISELECT(51856,36688),
  ABISELECT(51832,36672),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C2[0]),
  (VTBL_ENTRY)&_ZN7S3490C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3490C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3490C22v5Ev,
  (VTBL_ENTRY)&_ZN7S3490C22v6Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3490C37S3490C28S3490C10__A4__7S3490C1[] = {
  ABISELECT(52464,37100),
  ABISELECT(52368,37048),
  ABISELECT(51856,36688),
  ABISELECT(51832,36672),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C3[0]),
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C5__7S3490C37S3490C28S3490C10__A4__7S3490C1[] = {
  0,
  ABISELECT(-24,-16),
  ABISELECT(-51856,-36688),
  (VTBL_ENTRY)&(_ZTI7S3490C3[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C6__A1__7S3490C37S3490C28S3490C10__A4__7S3490C1[] = {
  0,
  ABISELECT(-52368,-37048),
  (VTBL_ENTRY)&(_ZTI7S3490C3[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C7__7S3490C37S3490C28S3490C10__A4__7S3490C1[] = {
  0,
  ABISELECT(-96,-52),
  ABISELECT(-52464,-37100),
  (VTBL_ENTRY)&(_ZTI7S3490C3[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C82v4Ev();
extern void _ZN7S3490C8D1Ev();
extern void _ZN7S3490C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C87S3490C28S3490C10__A2__7S3490C1[] = {
  ABISELECT(52736,37324),
  ABISELECT(52448,37092),
  ABISELECT(52352,37040),
  ABISELECT(51840,36680),
  ABISELECT(51816,36664),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C8[0]),
  (VTBL_ENTRY)&_ZN7S3490C82v4Ev,
  (VTBL_ENTRY)&_ZN7S3490C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3490C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3490C37S3490C87S3490C28S3490C10__A5__7S3490C1[] = {
  ABISELECT(52448,37092),
  ABISELECT(52352,37040),
  ABISELECT(51840,36680),
  ABISELECT(51816,36664),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C3[0]),
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C5__7S3490C37S3490C87S3490C28S3490C10__A5__7S3490C1[] = {
  0,
  ABISELECT(-24,-16),
  ABISELECT(-51840,-36680),
  (VTBL_ENTRY)&(_ZTI7S3490C3[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C6__A1__7S3490C37S3490C87S3490C28S3490C10__A5__7S3490C1[] = {
  0,
  ABISELECT(-52352,-37040),
  (VTBL_ENTRY)&(_ZTI7S3490C3[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C7__7S3490C37S3490C87S3490C28S3490C10__A5__7S3490C1[] = {
  0,
  ABISELECT(-96,-52),
  ABISELECT(-52448,-37092),
  (VTBL_ENTRY)&(_ZTI7S3490C3[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C62v2Ev();
extern void _ZN7S3490C9D1Ev();
extern void _ZN7S3490C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C97S3490C87S3490C28S3490C10__A4__7S3490C1[] = {
  ABISELECT(52432,37084),
  ABISELECT(51824,36672),
  ABISELECT(52720,37316),
  ABISELECT(52336,37032),
  ABISELECT(51800,36656),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3490C9D1Ev,
  (VTBL_ENTRY)&_ZN7S3490C9D0Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C57S3490C97S3490C87S3490C28S3490C10__A7__7S3490C1[] = {
  ABISELECT(51704,36604),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C5[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C77S3490C97S3490C87S3490C28S3490C10__A5__7S3490C1[] = {
  ABISELECT(51728,36620),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C7[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C6__7S3490C77S3490C97S3490C87S3490C28S3490C10__A5__7S3490C1[] = {
  0,
  ABISELECT(-51728,-36620),
  (VTBL_ENTRY)&(_ZTI7S3490C7[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C5__A__7S3490C97S3490C87S3490C28S3490C10__A4__7S3490C1[] = {
  ABISELECT(51704,36604),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C7__A__7S3490C97S3490C87S3490C28S3490C10__A4__7S3490C1[] = {
  ABISELECT(51728,36620),
  ABISELECT(-608,-412),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C6__A2__7S3490C97S3490C87S3490C28S3490C10__A4__7S3490C1[] = {
  0,
  ABISELECT(-52336,-37032),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3490C3__7S3490C97S3490C87S3490C28S3490C10__A4__7S3490C1[] = {
  ABISELECT(-288,-232),
  ABISELECT(-384,-284),
  ABISELECT(-896,-644),
  ABISELECT(-920,-660),
  ABISELECT(-52720,-37316),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C5__A1__7S3490C97S3490C87S3490C28S3490C10__A4__7S3490C1[] = {
  0,
  ABISELECT(-24,-16),
  ABISELECT(-51824,-36672),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C7__A1__7S3490C97S3490C87S3490C28S3490C10__A4__7S3490C1[] = {
  0,
  ABISELECT(-96,-52),
  ABISELECT(-52432,-37084),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C57S3490C87S3490C28S3490C10__A8__7S3490C1[] = {
  ABISELECT(49096,34716),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C5[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C5__7S3490C87S3490C28S3490C10__A2__7S3490C1[] = {
  0,
  ABISELECT(-24,-16),
  ABISELECT(-51840,-36680),
  (VTBL_ENTRY)&(_ZTI7S3490C8[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C6__A1__7S3490C87S3490C28S3490C10__A2__7S3490C1[] = {
  0,
  ABISELECT(-52352,-37040),
  (VTBL_ENTRY)&(_ZTI7S3490C8[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C7__7S3490C87S3490C28S3490C10__A2__7S3490C1[] = {
  0,
  ABISELECT(-96,-52),
  ABISELECT(-52448,-37092),
  (VTBL_ENTRY)&(_ZTI7S3490C8[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C62v2Ev();
extern void ABISELECT(_ZThn16_N7S3490C8D1Ev,_ZThn8_N7S3490C8D1Ev)();
extern void ABISELECT(_ZThn16_N7S3490C8D0Ev,_ZThn8_N7S3490C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3490C9__7S3490C87S3490C28S3490C10__A2__7S3490C1[] = {
  ABISELECT(52432,37084),
  ABISELECT(51824,36672),
  ABISELECT(52720,37316),
  ABISELECT(52336,37032),
  ABISELECT(51800,36656),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S3490C8[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S3490C8D1Ev,_ZThn8_N7S3490C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S3490C8D0Ev,_ZThn8_N7S3490C8D0Ev),
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C57S3490C9__A1__7S3490C87S3490C28S3490C10__A2__7S3490C1[] = {
  ABISELECT(51704,36604),
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI7S3490C8[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C77S3490C9__A1__7S3490C87S3490C28S3490C10__A2__7S3490C1[] = {
  ABISELECT(51728,36620),
  ABISELECT(-624,-420),
  (VTBL_ENTRY)&(_ZTI7S3490C8[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3490C3__A1__7S3490C87S3490C28S3490C10__A2__7S3490C1[] = {
  ABISELECT(-288,-232),
  ABISELECT(-384,-284),
  ABISELECT(-896,-644),
  ABISELECT(-920,-660),
  ABISELECT(-52736,-37324),
  (VTBL_ENTRY)&(_ZTI7S3490C8[0]),
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C5__A__7S3490C87S3490C28S3490C10__A2__7S3490C1[] = {
  ABISELECT(49096,34716),
  ABISELECT(-2720,-1948),
  (VTBL_ENTRY)&(_ZTI7S3490C8[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C5__7S3490C28S3490C10__A1__7S3490C1[] = {
  0,
  ABISELECT(-24,-16),
  ABISELECT(-51856,-36688),
  (VTBL_ENTRY)&(_ZTI7S3490C2[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C6__A1__7S3490C28S3490C10__A1__7S3490C1[] = {
  0,
  ABISELECT(-52368,-37048),
  (VTBL_ENTRY)&(_ZTI7S3490C2[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C7__7S3490C28S3490C10__A1__7S3490C1[] = {
  0,
  ABISELECT(-96,-52),
  ABISELECT(-52464,-37100),
  (VTBL_ENTRY)&(_ZTI7S3490C2[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C82v4Ev();
extern void ABISELECT(_ZThn16_N7S3490C2D1Ev,_ZThn8_N7S3490C2D1Ev)();
extern void ABISELECT(_ZThn16_N7S3490C2D0Ev,_ZThn8_N7S3490C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3490C8__7S3490C28S3490C10__A1__7S3490C1[] = {
  ABISELECT(52736,37324),
  ABISELECT(52448,37092),
  ABISELECT(52352,37040),
  ABISELECT(51840,36680),
  ABISELECT(51816,36664),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S3490C2[0]),
  (VTBL_ENTRY)&_ZN7S3490C82v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S3490C2D1Ev,_ZThn8_N7S3490C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S3490C2D0Ev,_ZThn8_N7S3490C2D0Ev),
};
extern void _ZN7S3490C62v2Ev();
extern void ABISELECT(_ZThn32_N7S3490C2D1Ev,_ZThn16_N7S3490C2D1Ev)();
extern void ABISELECT(_ZThn32_N7S3490C2D0Ev,_ZThn16_N7S3490C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3490C97S3490C8__7S3490C28S3490C10__A1__7S3490C1[] = {
  ABISELECT(52432,37084),
  ABISELECT(51824,36672),
  ABISELECT(52720,37316),
  ABISELECT(52336,37032),
  ABISELECT(51800,36656),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S3490C2[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N7S3490C2D1Ev,_ZThn16_N7S3490C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N7S3490C2D0Ev,_ZThn16_N7S3490C2D0Ev),
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C57S3490C97S3490C8__A1__7S3490C28S3490C10__A1__7S3490C1[] = {
  ABISELECT(51704,36604),
  ABISELECT(-128,-68),
  (VTBL_ENTRY)&(_ZTI7S3490C2[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C77S3490C97S3490C8__A1__7S3490C28S3490C10__A1__7S3490C1[] = {
  ABISELECT(51728,36620),
  ABISELECT(-640,-428),
  (VTBL_ENTRY)&(_ZTI7S3490C2[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3490C3__A2__7S3490C28S3490C10__A1__7S3490C1[] = {
  ABISELECT(-288,-232),
  ABISELECT(-384,-284),
  ABISELECT(-896,-644),
  ABISELECT(-920,-660),
  ABISELECT(-52752,-37332),
  (VTBL_ENTRY)&(_ZTI7S3490C2[0]),
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C57S3490C8__A2__7S3490C28S3490C10__A1__7S3490C1[] = {
  ABISELECT(49096,34716),
  ABISELECT(-2736,-1956),
  (VTBL_ENTRY)&(_ZTI7S3490C2[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C62v2Ev();
extern void ABISELECT(_ZTv0_n72_N8S3490C10D1Ev,_ZTv0_n36_N8S3490C10D1Ev)();
extern void ABISELECT(_ZThn64912_N8S3490C10D1Ev,_ZThn45948_N8S3490C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S3490C10D0Ev,_ZTv0_n36_N8S3490C10D0Ev)();
extern void ABISELECT(_ZThn64912_N8S3490C10D0Ev,_ZThn45948_N8S3490C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3490C9__8S3490C10__7S3490C1[] = {
  ABISELECT(608,412),
  ABISELECT(-64912,-45948),
  0,
  ABISELECT(-304,-240),
  ABISELECT(-912,-652),
  ABISELECT(-16,-8),
  ABISELECT(-400,-292),
  ABISELECT(-936,-668),
  ABISELECT(-64912,-45948),
  (VTBL_ENTRY)&(_ZTI8S3490C10[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S3490C10D1Ev,_ZTv0_n36_N8S3490C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S3490C10D0Ev,_ZTv0_n36_N8S3490C10D0Ev),
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C57S3490C9__8S3490C10__7S3490C1[] = {
  ABISELECT(-1032,-720),
  ABISELECT(-65008,-46000),
  (VTBL_ENTRY)&(_ZTI8S3490C10[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C77S3490C9__8S3490C10__7S3490C1[] = {
  ABISELECT(-1008,-704),
  ABISELECT(-65520,-46360),
  (VTBL_ENTRY)&(_ZTI8S3490C10[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C6__A2__8S3490C10__7S3490C1[] = {
  0,
  ABISELECT(-64512,-45656),
  (VTBL_ENTRY)&(_ZTI8S3490C10[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3490C3__8S3490C10__7S3490C1[] = {
  ABISELECT(-288,-232),
  ABISELECT(-384,-284),
  ABISELECT(-896,-644),
  ABISELECT(-920,-660),
  ABISELECT(-64896,-45940),
  (VTBL_ENTRY)&(_ZTI8S3490C10[0]),
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C5__A1__8S3490C10__7S3490C1[] = {
  0,
  ABISELECT(-24,-16),
  ABISELECT(-64000,-45296),
  (VTBL_ENTRY)&(_ZTI8S3490C10[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C7__A1__8S3490C10__7S3490C1[] = {
  0,
  ABISELECT(-96,-52),
  ABISELECT(-64608,-45708),
  (VTBL_ENTRY)&(_ZTI8S3490C10[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C57S3490C98S3490C128S3490C11__A2__8S3490C10__7S3490C1[] = {
  ABISELECT(63880,45228),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI8S3490C10[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C77S3490C98S3490C128S3490C11__A2__8S3490C10__7S3490C1[] = {
  ABISELECT(63904,45244),
  ABISELECT(-608,-412),
  (VTBL_ENTRY)&(_ZTI8S3490C10[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C82v4Ev();
extern void ABISELECT(_ZThn3280_N8S3490C10D1Ev,_ZThn2332_N8S3490C10D1Ev)();
extern void ABISELECT(_ZThn3280_N8S3490C10D0Ev,_ZThn2332_N8S3490C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3490C88S3490C11__8S3490C10__7S3490C1[] = {
  ABISELECT(61616,43608),
  ABISELECT(61328,43376),
  ABISELECT(61232,43324),
  ABISELECT(60720,42964),
  ABISELECT(60696,42948),
  ABISELECT(-3280,-2332),
  (VTBL_ENTRY)&(_ZTI8S3490C10[0]),
  (VTBL_ENTRY)&_ZN7S3490C82v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn3280_N8S3490C10D1Ev,_ZThn2332_N8S3490C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn3280_N8S3490C10D0Ev,_ZThn2332_N8S3490C10D0Ev),
};
extern void _ZN7S3490C62v2Ev();
extern void ABISELECT(_ZThn3296_N8S3490C10D1Ev,_ZThn2340_N8S3490C10D1Ev)();
extern void ABISELECT(_ZThn3296_N8S3490C10D0Ev,_ZThn2340_N8S3490C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3490C97S3490C88S3490C11__A2__8S3490C10__7S3490C1[] = {
  ABISELECT(61312,43368),
  ABISELECT(60704,42956),
  ABISELECT(61600,43600),
  ABISELECT(61216,43316),
  ABISELECT(60680,42940),
  ABISELECT(-3296,-2340),
  (VTBL_ENTRY)&(_ZTI8S3490C10[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn3296_N8S3490C10D1Ev,_ZThn2340_N8S3490C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn3296_N8S3490C10D0Ev,_ZThn2340_N8S3490C10D0Ev),
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C57S3490C97S3490C88S3490C11__A3__8S3490C10__7S3490C1[] = {
  ABISELECT(60584,42888),
  ABISELECT(-3392,-2392),
  (VTBL_ENTRY)&(_ZTI8S3490C10[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C77S3490C97S3490C88S3490C11__A3__8S3490C10__7S3490C1[] = {
  ABISELECT(60608,42904),
  ABISELECT(-3904,-2752),
  (VTBL_ENTRY)&(_ZTI8S3490C10[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C57S3490C88S3490C11__A4__8S3490C10__7S3490C1[] = {
  ABISELECT(57976,41000),
  ABISELECT(-6000,-4280),
  (VTBL_ENTRY)&(_ZTI8S3490C10[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void ABISELECT(_ZThn12144_N8S3490C10D1Ev,_ZThn8608_N8S3490C10D1Ev)();
extern void ABISELECT(_ZThn12144_N8S3490C10D0Ev,_ZThn8608_N8S3490C10D0Ev)();
extern void _ZN7S3490C22v5Ev();
extern void _ZN7S3490C22v6Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C2__8S3490C10__7S3490C1[] = {
  ABISELECT(52752,37332),
  ABISELECT(52464,37100),
  ABISELECT(52368,37048),
  ABISELECT(51856,36688),
  ABISELECT(51832,36672),
  ABISELECT(-12144,-8608),
  (VTBL_ENTRY)&(_ZTI8S3490C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn12144_N8S3490C10D1Ev,_ZThn8608_N8S3490C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn12144_N8S3490C10D0Ev,_ZThn8608_N8S3490C10D0Ev),
  (VTBL_ENTRY)&_ZN7S3490C22v5Ev,
  (VTBL_ENTRY)&_ZN7S3490C22v6Ev,
};
extern void _ZN7S3490C82v4Ev();
extern void ABISELECT(_ZThn12160_N8S3490C10D1Ev,_ZThn8616_N8S3490C10D1Ev)();
extern void ABISELECT(_ZThn12160_N8S3490C10D0Ev,_ZThn8616_N8S3490C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3490C87S3490C2__A1__8S3490C10__7S3490C1[] = {
  ABISELECT(52736,37324),
  ABISELECT(52448,37092),
  ABISELECT(52352,37040),
  ABISELECT(51840,36680),
  ABISELECT(51816,36664),
  ABISELECT(-12160,-8616),
  (VTBL_ENTRY)&(_ZTI8S3490C10[0]),
  (VTBL_ENTRY)&_ZN7S3490C82v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn12160_N8S3490C10D1Ev,_ZThn8616_N8S3490C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn12160_N8S3490C10D0Ev,_ZThn8616_N8S3490C10D0Ev),
};
extern void _ZN7S3490C62v2Ev();
extern void ABISELECT(_ZThn12176_N8S3490C10D1Ev,_ZThn8624_N8S3490C10D1Ev)();
extern void ABISELECT(_ZThn12176_N8S3490C10D0Ev,_ZThn8624_N8S3490C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3490C97S3490C87S3490C2__A3__8S3490C10__7S3490C1[] = {
  ABISELECT(52432,37084),
  ABISELECT(51824,36672),
  ABISELECT(52720,37316),
  ABISELECT(52336,37032),
  ABISELECT(51800,36656),
  ABISELECT(-12176,-8624),
  (VTBL_ENTRY)&(_ZTI8S3490C10[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn12176_N8S3490C10D1Ev,_ZThn8624_N8S3490C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn12176_N8S3490C10D0Ev,_ZThn8624_N8S3490C10D0Ev),
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C57S3490C97S3490C87S3490C2__A5__8S3490C10__7S3490C1[] = {
  ABISELECT(51704,36604),
  ABISELECT(-12272,-8676),
  (VTBL_ENTRY)&(_ZTI8S3490C10[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C77S3490C97S3490C87S3490C2__A4__8S3490C10__7S3490C1[] = {
  ABISELECT(51728,36620),
  ABISELECT(-12784,-9036),
  (VTBL_ENTRY)&(_ZTI8S3490C10[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C57S3490C87S3490C2__A6__8S3490C10__7S3490C1[] = {
  ABISELECT(49096,34716),
  ABISELECT(-14880,-10564),
  (VTBL_ENTRY)&(_ZTI8S3490C10[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C5__7S3490C1[] = {
  ABISELECT(-24,-16),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C5[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C7__7S3490C1[] = {
  ABISELECT(-96,-52),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C7[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C6__7S3490C7__7S3490C1[] = {
  0,
  ABISELECT(96,52),
  (VTBL_ENTRY)&(_ZTI7S3490C7[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3490C3__A2__7S3490C1[] = {
  ABISELECT(-288,-232),
  ABISELECT(-384,-284),
  ABISELECT(-896,-644),
  ABISELECT(-920,-660),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C3[0]),
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C5__7S3490C3__A2__7S3490C1[] = {
  0,
  ABISELECT(-24,-16),
  ABISELECT(896,644),
  (VTBL_ENTRY)&(_ZTI7S3490C3[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C6__A1__7S3490C3__A2__7S3490C1[] = {
  0,
  ABISELECT(384,284),
  (VTBL_ENTRY)&(_ZTI7S3490C3[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C7__7S3490C3__A2__7S3490C1[] = {
  0,
  ABISELECT(-96,-52),
  ABISELECT(288,232),
  (VTBL_ENTRY)&(_ZTI7S3490C3[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C62v2Ev();
extern void _ZN7S3490C9D1Ev();
extern void _ZN7S3490C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C9__A1__7S3490C1[] = {
  ABISELECT(-304,-240),
  ABISELECT(-912,-652),
  ABISELECT(-16,-8),
  ABISELECT(-400,-292),
  ABISELECT(-936,-668),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3490C9D1Ev,
  (VTBL_ENTRY)&_ZN7S3490C9D0Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C57S3490C9__A3__7S3490C1[] = {
  ABISELECT(-1032,-720),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C5[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C77S3490C9__A2__7S3490C1[] = {
  ABISELECT(-1008,-704),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C7[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C6__7S3490C77S3490C9__A2__7S3490C1[] = {
  0,
  ABISELECT(1008,704),
  (VTBL_ENTRY)&(_ZTI7S3490C7[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C5__A__7S3490C9__A1__7S3490C1[] = {
  ABISELECT(-1032,-720),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C7__A__7S3490C9__A1__7S3490C1[] = {
  ABISELECT(-1008,-704),
  ABISELECT(-608,-412),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C6__A2__7S3490C9__A1__7S3490C1[] = {
  0,
  ABISELECT(400,292),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3490C3__7S3490C9__A1__7S3490C1[] = {
  ABISELECT(-288,-232),
  ABISELECT(-384,-284),
  ABISELECT(-896,-644),
  ABISELECT(-920,-660),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C5__A1__7S3490C9__A1__7S3490C1[] = {
  0,
  ABISELECT(-24,-16),
  ABISELECT(912,652),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C7__A1__7S3490C9__A1__7S3490C1[] = {
  0,
  ABISELECT(-96,-52),
  ABISELECT(304,240),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C62v2Ev();
extern void _ZN8S3490C15D1Ev();
extern void _ZN8S3490C15D0Ev();
static  VTBL_ENTRY _tg__ZTV8S3490C15__7S3490C1[] = {
  ABISELECT(-2720,-1948),
  ABISELECT(-3008,-2180),
  ABISELECT(-3104,-2232),
  ABISELECT(-3616,-2592),
  ABISELECT(832,604),
  ABISELECT(-3640,-2608),
  0,
  (VTBL_ENTRY)&(_ZTI8S3490C15[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  (VTBL_ENTRY)&_ZN8S3490C15D1Ev,
  (VTBL_ENTRY)&_ZN8S3490C15D0Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C58S3490C15__A11__7S3490C1[] = {
  ABISELECT(-3640,-2608),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C5[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C78S3490C15__A7__7S3490C1[] = {
  ABISELECT(-3616,-2592),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C7[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C6__7S3490C78S3490C15__A7__7S3490C1[] = {
  0,
  ABISELECT(3616,2592),
  (VTBL_ENTRY)&(_ZTI7S3490C7[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3490C38S3490C15__A7__7S3490C1[] = {
  ABISELECT(-3808,-2772),
  ABISELECT(-3904,-2824),
  ABISELECT(-4416,-3184),
  ABISELECT(-4440,-3200),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C3[0]),
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C5__7S3490C38S3490C15__A7__7S3490C1[] = {
  0,
  ABISELECT(-24,-16),
  ABISELECT(4416,3184),
  (VTBL_ENTRY)&(_ZTI7S3490C3[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C6__A1__7S3490C38S3490C15__A7__7S3490C1[] = {
  0,
  ABISELECT(3904,2824),
  (VTBL_ENTRY)&(_ZTI7S3490C3[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C7__7S3490C38S3490C15__A7__7S3490C1[] = {
  0,
  ABISELECT(-96,-52),
  ABISELECT(3808,2772),
  (VTBL_ENTRY)&(_ZTI7S3490C3[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C82v4Ev();
extern void ABISELECT(_ZTv0_n72_N8S3490C15D1Ev,_ZTv0_n36_N8S3490C15D1Ev)();
extern void ABISELECT(_ZThn832_N8S3490C15D1Ev,_ZThn604_N8S3490C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S3490C15D0Ev,_ZTv0_n36_N8S3490C15D0Ev)();
extern void ABISELECT(_ZThn832_N8S3490C15D0Ev,_ZThn604_N8S3490C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3490C8__8S3490C15__7S3490C1[] = {
  ABISELECT(624,420),
  ABISELECT(16,8),
  ABISELECT(-832,-604),
  0,
  ABISELECT(-3552,-2552),
  ABISELECT(-3840,-2784),
  ABISELECT(-3936,-2836),
  ABISELECT(-4448,-3196),
  ABISELECT(-4472,-3212),
  ABISELECT(-832,-604),
  (VTBL_ENTRY)&(_ZTI8S3490C15[0]),
  (VTBL_ENTRY)&_ZN7S3490C82v4Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S3490C15D1Ev,_ZTv0_n36_N8S3490C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S3490C15D0Ev,_ZTv0_n36_N8S3490C15D0Ev),
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C5__8S3490C15__7S3490C1[] = {
  0,
  ABISELECT(-24,-16),
  ABISELECT(3616,2592),
  (VTBL_ENTRY)&(_ZTI8S3490C15[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C6__A1__8S3490C15__7S3490C1[] = {
  0,
  ABISELECT(3104,2232),
  (VTBL_ENTRY)&(_ZTI8S3490C15[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C7__8S3490C15__7S3490C1[] = {
  0,
  ABISELECT(-96,-52),
  ABISELECT(3008,2180),
  (VTBL_ENTRY)&(_ZTI8S3490C15[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C62v2Ev();
extern void ABISELECT(_ZTvn16_n72_N8S3490C15D1Ev,_ZTvn8_n36_N8S3490C15D1Ev)();
extern void ABISELECT(_ZTvn16_n72_N8S3490C15D0Ev,_ZTvn8_n36_N8S3490C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3490C97S3490C8__8S3490C15__7S3490C1[] = {
  ABISELECT(-3856,-2792),
  ABISELECT(-4464,-3204),
  ABISELECT(-3568,-2560),
  ABISELECT(-3952,-2844),
  ABISELECT(-4488,-3220),
  ABISELECT(-848,-612),
  (VTBL_ENTRY)&(_ZTI8S3490C15[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n72_N8S3490C15D1Ev,_ZTvn8_n36_N8S3490C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n72_N8S3490C15D0Ev,_ZTvn8_n36_N8S3490C15D0Ev),
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C57S3490C97S3490C8__A1__8S3490C15__7S3490C1[] = {
  ABISELECT(-4584,-3272),
  ABISELECT(-944,-664),
  (VTBL_ENTRY)&(_ZTI8S3490C15[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C77S3490C97S3490C8__A1__8S3490C15__7S3490C1[] = {
  ABISELECT(-4560,-3256),
  ABISELECT(-1456,-1024),
  (VTBL_ENTRY)&(_ZTI8S3490C15[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3490C3__A1__8S3490C15__7S3490C1[] = {
  ABISELECT(-288,-232),
  ABISELECT(-384,-284),
  ABISELECT(-896,-644),
  ABISELECT(-920,-660),
  ABISELECT(2720,1948),
  (VTBL_ENTRY)&(_ZTI8S3490C15[0]),
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C57S3490C8__A2__8S3490C15__7S3490C1[] = {
  ABISELECT(-7192,-5160),
  ABISELECT(-3552,-2552),
  (VTBL_ENTRY)&(_ZTI8S3490C15[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C67S3490C8__A5__8S3490C15__7S3490C1[] = {
  ABISELECT(-4064,-2912),
  (VTBL_ENTRY)&(_ZTI8S3490C15[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C7__A__8S3490C15__7S3490C1[] = {
  ABISELECT(-3616,-2592),
  ABISELECT(-512,-360),
  (VTBL_ENTRY)&(_ZTI8S3490C15[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3490C3__A__8S3490C15__7S3490C1[] = {
  ABISELECT(-3808,-2772),
  ABISELECT(-3904,-2824),
  ABISELECT(-4416,-3184),
  ABISELECT(-4440,-3200),
  ABISELECT(-800,-592),
  (VTBL_ENTRY)&(_ZTI8S3490C15[0]),
};
extern void _ZN7S3490C82v4Ev();
extern void _ZN7S3490C8D1Ev();
extern void _ZN7S3490C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C8__A3__7S3490C1[] = {
  ABISELECT(-3552,-2552),
  ABISELECT(-3840,-2784),
  ABISELECT(-3936,-2836),
  ABISELECT(-4448,-3196),
  ABISELECT(-4472,-3212),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C8[0]),
  (VTBL_ENTRY)&_ZN7S3490C82v4Ev,
  (VTBL_ENTRY)&_ZN7S3490C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3490C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3490C37S3490C8__A6__7S3490C1[] = {
  ABISELECT(-3840,-2784),
  ABISELECT(-3936,-2836),
  ABISELECT(-4448,-3196),
  ABISELECT(-4472,-3212),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C3[0]),
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C5__7S3490C37S3490C8__A6__7S3490C1[] = {
  0,
  ABISELECT(-24,-16),
  ABISELECT(4448,3196),
  (VTBL_ENTRY)&(_ZTI7S3490C3[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C6__A1__7S3490C37S3490C8__A6__7S3490C1[] = {
  0,
  ABISELECT(3936,2836),
  (VTBL_ENTRY)&(_ZTI7S3490C3[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C7__7S3490C37S3490C8__A6__7S3490C1[] = {
  0,
  ABISELECT(-96,-52),
  ABISELECT(3840,2784),
  (VTBL_ENTRY)&(_ZTI7S3490C3[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C62v2Ev();
extern void _ZN7S3490C9D1Ev();
extern void _ZN7S3490C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C97S3490C8__A5__7S3490C1[] = {
  ABISELECT(-3856,-2792),
  ABISELECT(-4464,-3204),
  ABISELECT(-3568,-2560),
  ABISELECT(-3952,-2844),
  ABISELECT(-4488,-3220),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  (VTBL_ENTRY)&_ZN7S3490C9D1Ev,
  (VTBL_ENTRY)&_ZN7S3490C9D0Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C57S3490C97S3490C8__A9__7S3490C1[] = {
  ABISELECT(-4584,-3272),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C5[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C77S3490C97S3490C8__A6__7S3490C1[] = {
  ABISELECT(-4560,-3256),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C7[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C6__7S3490C77S3490C97S3490C8__A6__7S3490C1[] = {
  0,
  ABISELECT(4560,3256),
  (VTBL_ENTRY)&(_ZTI7S3490C7[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C5__A__7S3490C97S3490C8__A5__7S3490C1[] = {
  ABISELECT(-4584,-3272),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C7__A__7S3490C97S3490C8__A5__7S3490C1[] = {
  ABISELECT(-4560,-3256),
  ABISELECT(-608,-412),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C6__A2__7S3490C97S3490C8__A5__7S3490C1[] = {
  0,
  ABISELECT(3952,2844),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3490C3__7S3490C97S3490C8__A5__7S3490C1[] = {
  ABISELECT(-288,-232),
  ABISELECT(-384,-284),
  ABISELECT(-896,-644),
  ABISELECT(-920,-660),
  ABISELECT(3568,2560),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C5__A1__7S3490C97S3490C8__A5__7S3490C1[] = {
  0,
  ABISELECT(-24,-16),
  ABISELECT(4464,3204),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C7__A1__7S3490C97S3490C8__A5__7S3490C1[] = {
  0,
  ABISELECT(-96,-52),
  ABISELECT(3856,2792),
  (VTBL_ENTRY)&(_ZTI7S3490C9[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C57S3490C8__A10__7S3490C1[] = {
  ABISELECT(-7192,-5160),
  0,
  (VTBL_ENTRY)&(_ZTI7S3490C5[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C5__7S3490C8__A3__7S3490C1[] = {
  0,
  ABISELECT(-24,-16),
  ABISELECT(4448,3196),
  (VTBL_ENTRY)&(_ZTI7S3490C8[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C6__A1__7S3490C8__A3__7S3490C1[] = {
  0,
  ABISELECT(3936,2836),
  (VTBL_ENTRY)&(_ZTI7S3490C8[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C7__7S3490C8__A3__7S3490C1[] = {
  0,
  ABISELECT(-96,-52),
  ABISELECT(3840,2784),
  (VTBL_ENTRY)&(_ZTI7S3490C8[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
extern void _ZN7S3490C62v2Ev();
extern void ABISELECT(_ZThn16_N7S3490C8D1Ev,_ZThn8_N7S3490C8D1Ev)();
extern void ABISELECT(_ZThn16_N7S3490C8D0Ev,_ZThn8_N7S3490C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3490C9__7S3490C8__A3__7S3490C1[] = {
  ABISELECT(-3856,-2792),
  ABISELECT(-4464,-3204),
  ABISELECT(-3568,-2560),
  ABISELECT(-3952,-2844),
  ABISELECT(-4488,-3220),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S3490C8[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S3490C8D1Ev,_ZThn8_N7S3490C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S3490C8D0Ev,_ZThn8_N7S3490C8D0Ev),
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C57S3490C9__A1__7S3490C8__A3__7S3490C1[] = {
  ABISELECT(-4584,-3272),
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI7S3490C8[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
extern void _ZN7S3490C72v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C77S3490C9__A1__7S3490C8__A3__7S3490C1[] = {
  ABISELECT(-4560,-3256),
  ABISELECT(-624,-420),
  (VTBL_ENTRY)&(_ZTI7S3490C8[0]),
  (VTBL_ENTRY)&_ZN7S3490C72v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S3490C3__A1__7S3490C8__A3__7S3490C1[] = {
  ABISELECT(-288,-232),
  ABISELECT(-384,-284),
  ABISELECT(-896,-644),
  ABISELECT(-920,-660),
  ABISELECT(3552,2552),
  (VTBL_ENTRY)&(_ZTI7S3490C8[0]),
};
extern void _ZN7S3490C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S3490C5__A__7S3490C8__A3__7S3490C1[] = {
  ABISELECT(-7192,-5160),
  ABISELECT(-2720,-1948),
  (VTBL_ENTRY)&(_ZTI7S3490C8[0]),
  (VTBL_ENTRY)&_ZN7S3490C62v2Ev,
};
static  VTT_ENTRY vtt_S3490C1[] = {
  {&(_ZTV7S3490C1[10]),  10,256},
  {&(_tg__ZTV7S3490C2__7S3490C1[7]),  7,11},
  {&(_tg__ZTV7S3490C37S3490C2__7S3490C1[6]),  6,6},
  {&(_tg__ZTV7S3490C5__7S3490C37S3490C2__7S3490C1[4]),  4,5},
  {&(_tg__ZTV7S3490C6__A1__7S3490C37S3490C2__7S3490C1[3]),  3,4},
  {&(_tg__ZTV7S3490C7__7S3490C37S3490C2__7S3490C1[4]),  4,5},
  {&(_tg__ZTV7S3490C87S3490C2__7S3490C1[7]),  7,10},
  {&(_tg__ZTV7S3490C37S3490C87S3490C2__A1__7S3490C1[6]),  6,6},
  {&(_tg__ZTV7S3490C5__7S3490C37S3490C87S3490C2__A1__7S3490C1[4]),  4,5},
  {&(_tg__ZTV7S3490C6__A1__7S3490C37S3490C87S3490C2__A1__7S3490C1[3]),  3,4},
  {&(_tg__ZTV7S3490C7__7S3490C37S3490C87S3490C2__A1__7S3490C1[4]),  4,5},
  {&(_tg__ZTV7S3490C97S3490C87S3490C2__7S3490C1[7]),  7,10},
  {&(_tg__ZTV7S3490C57S3490C97S3490C87S3490C2__A1__7S3490C1[3]),  3,4},
  {&(_tg__ZTV7S3490C77S3490C97S3490C87S3490C2__A1__7S3490C1[3]),  3,4},
  {&(_tg__ZTV7S3490C6__7S3490C77S3490C97S3490C87S3490C2__A1__7S3490C1[3]),  3,4},
  {&(_tg__ZTV7S3490C5__A__7S3490C97S3490C87S3490C2__7S3490C1[3]),  3,4},
  {&(_tg__ZTV7S3490C7__A__7S3490C97S3490C87S3490C2__7S3490C1[3]),  3,4},
  {&(_tg__ZTV7S3490C6__A2__7S3490C97S3490C87S3490C2__7S3490C1[3]),  3,4},
  {&(_tg__ZTV7S3490C3__7S3490C97S3490C87S3490C2__7S3490C1[6]),  6,6},
  {&(_tg__ZTV7S3490C5__A1__7S3490C97S3490C87S3490C2__7S3490C1[4]),  4,5},
  {&(_tg__ZTV7S3490C7__A1__7S3490C97S3490C87S3490C2__7S3490C1[4]),  4,5},
  {&(_tg__ZTV7S3490C57S3490C87S3490C2__A2__7S3490C1[3]),  3,4},
  {&(_tg__ZTV7S3490C5__7S3490C87S3490C2__7S3490C1[4]),  4,5},
  {&(_tg__ZTV7S3490C6__A1__7S3490C87S3490C2__7S3490C1[3]),  3,4},
  {&(_tg__ZTV7S3490C7__7S3490C87S3490C2__7S3490C1[4]),  4,5},
  {&(_tg__ZTV7S3490C9__7S3490C87S3490C2__7S3490C1[7]),  7,10},
  {&(_tg__ZTV7S3490C57S3490C9__A1__7S3490C87S3490C2__7S3490C1[3]),  3,4},
  {&(_tg__ZTV7S3490C77S3490C9__A1__7S3490C87S3490C2__7S3490C1[3]),  3,4},
  {&(_tg__ZTV7S3490C3__A1__7S3490C87S3490C2__7S3490C1[6]),  6,6},
  {&(_tg__ZTV7S3490C5__A__7S3490C87S3490C2__7S3490C1[3]),  3,4},
  {&(_tg__ZTV7S3490C5__7S3490C2__7S3490C1[4]),  4,5},
  {&(_tg__ZTV7S3490C6__A1__7S3490C2__7S3490C1[3]),  3,4},
  {&(_tg__ZTV7S3490C7__7S3490C2__7S3490C1[4]),  4,5},
  {&(_tg__ZTV7S3490C8__7S3490C2__7S3490C1[7]),  7,10},
  {&(_tg__ZTV7S3490C97S3490C8__7S3490C2__7S3490C1[7]),  7,10},
  {&(_tg__ZTV7S3490C57S3490C97S3490C8__A1__7S3490C2__7S3490C1[3]),  3,4},
  {&(_tg__ZTV7S3490C77S3490C97S3490C8__A1__7S3490C2__7S3490C1[3]),  3,4},
  {&(_tg__ZTV7S3490C3__A2__7S3490C2__7S3490C1[6]),  6,6},
  {&(_tg__ZTV7S3490C57S3490C8__A2__7S3490C2__7S3490C1[3]),  3,4},
  {&(_tg__ZTV8S3490C10__7S3490C1[8]),  8,13},
  {&(_tg__ZTV8S3490C118S3490C10__7S3490C1[7]),  7,12},
  {&(_tg__ZTV8S3490C128S3490C118S3490C10__7S3490C1[7]),  7,12},
  {&(_tg__ZTV7S3490C98S3490C128S3490C118S3490C10__A2__7S3490C1[7]),  7,10},
  {&(_tg__ZTV7S3490C57S3490C98S3490C128S3490C118S3490C10__A4__7S3490C1[3]),  3,4},
  {&(_tg__ZTV7S3490C77S3490C98S3490C128S3490C118S3490C10__A3__7S3490C1[3]),  3,4},
  {&(_tg__ZTV7S3490C6__7S3490C77S3490C98S3490C128S3490C118S3490C10__A3__7S3490C1[3]),  3,4},
  {&(_tg__ZTV7S3490C5__A__7S3490C98S3490C128S3490C118S3490C10__A2__7S3490C1[3]),  3,4},
  {&(_tg__ZTV7S3490C7__A__7S3490C98S3490C128S3490C118S3490C10__A2__7S3490C1[3]),  3,4},
  {&(_tg__ZTV7S3490C6__A2__7S3490C98S3490C128S3490C118S3490C10__A2__7S3490C1[3]),  3,4},
  {&(_tg__ZTV7S3490C3__7S3490C98S3490C128S3490C118S3490C10__A2__7S3490C1[6]),  6,6},
  {&(_tg__ZTV7S3490C5__A1__7S3490C98S3490C128S3490C118S3490C10__A2__7S3490C1[4]),  4,5},
  {&(_tg__ZTV7S3490C7__A1__7S3490C98S3490C128S3490C118S3490C10__A2__7S3490C1[4]),  4,5},
  {&(_tg__ZTV7S3490C57S3490C9__8S3490C128S3490C118S3490C10__7S3490C1[3]),  3,4},
  {&(_tg__ZTV7S3490C77S3490C9__8S3490C128S3490C118S3490C10__7S3490C1[3]),  3,4},
  {&(_tg__ZTV7S3490C6__A2__8S3490C128S3490C118S3490C10__7S3490C1[3]),  3,4},
  {&(_tg__ZTV7S3490C3__8S3490C128S3490C118S3490C10__7S3490C1[6]),  6,6},
  {&(_tg__ZTV7S3490C5__A1__8S3490C128S3490C118S3490C10__7S3490C1[4]),  4,5},
  {&(_tg__ZTV7S3490C7__A1__8S3490C128S3490C118S3490C10__7S3490C1[4]),  4,5},
  {&(_tg__ZTV7S3490C88S3490C118S3490C10__A1__7S3490C1[7]),  7,10},
  {&(_tg__ZTV7S3490C37S3490C88S3490C118S3490C10__A3__7S3490C1[6]),  6,6},
  {&(_tg__ZTV7S3490C5__7S3490C37S3490C88S3490C118S3490C10__A3__7S3490C1[4]),  4,5},
  {&(_tg__ZTV7S3490C6__A1__7S3490C37S3490C88S3490C118S3490C10__A3__7S3490C1[3]),  3,4},
  {&(_tg__ZTV7S3490C7__7S3490C37S3490C88S3490C118S3490C10__A3__7S3490C1[4]),  4,5},
  {&(_tg__ZTV7S3490C97S3490C88S3490C118S3490C10__A3__7S3490C1[7]),  7,10},
  {&(_tg__ZTV7S3490C57S3490C97S3490C88S3490C118S3490C10__A5__7S3490C1[3]),  3,4},
  {&(_tg__ZTV7S3490C77S3490C97S3490C88S3490C118S3490C10__A4__7S3490C1[3]),  3,4},
  {&(_tg__ZTV7S3490C6__7S3490C77S3490C97S3490C88S3490C118S3490C10__A4__7S3490C1[3]),  3,4},
  {&(_tg__ZTV7S3490C5__A__7S3490C97S3490C88S3490C118S3490C10__A3__7S3490C1[3]),  3,4},
  {&(_tg__ZTV7S3490C7__A__7S3490C97S3490C88S3490C118S3490C10__A3__7S3490C1[3]),  3,4},
  {&(_tg__ZTV7S3490C6__A2__7S3490C97S3490C88S3490C118S3490C10__A3__7S3490C1[3]),  3,4},
  {&(_tg__ZTV7S3490C3__7S3490C97S3490C88S3490C118S3490C10__A3__7S3490C1[6]),  6,6},
  {&(_tg__ZTV7S3490C5__A1__7S3490C97S3490C88S3490C118S3490C10__A3__7S3490C1[4]),  4,5},
  {&(_tg__ZTV7S3490C7__A1__7S3490C97S3490C88S3490C118S3490C10__A3__7S3490C1[4]),  4,5},
  {&(_tg__ZTV7S3490C57S3490C88S3490C118S3490C10__A6__7S3490C1[3]),  3,4},
  {&(_tg__ZTV7S3490C5__7S3490C88S3490C118S3490C10__A1__7S3490C1[4]),  4,5},
  {&(_tg__ZTV7S3490C6__A1__7S3490C88S3490C118S3490C10__A1__7S3490C1[3]),  3,4},
  {&(_tg__ZTV7S3490C7__7S3490C88S3490C118S3490C10__A1__7S3490C1[4]),  4,5},
  {&(_tg__ZTV7S3490C9__7S3490C88S3490C118S3490C10__A1__7S3490C1[7]),  7,10},
  {&(_tg__ZTV7S3490C57S3490C9__A1__7S3490C88S3490C118S3490C10__A1__7S3490C1[3]),  3,4},
  {&(_tg__ZTV7S3490C77S3490C9__A1__7S3490C88S3490C118S3490C10__A1__7S3490C1[3]),  3,4},
  {&(_tg__ZTV7S3490C3__A1__7S3490C88S3490C118S3490C10__A1__7S3490C1[6]),  6,6},
  {&(_tg__ZTV7S3490C5__A__7S3490C88S3490C118S3490C10__A1__7S3490C1[3]),  3,4},
  {&(_tg__ZTV7S3490C3__8S3490C118S3490C10__7S3490C1[6]),  6,6},
  {&(_tg__ZTV7S3490C5__8S3490C118S3490C10__7S3490C1[4]),  4,5},
  {&(_tg__ZTV7S3490C6__A1__8S3490C118S3490C10__7S3490C1[3]),  3,4},
  {&(_tg__ZTV7S3490C7__8S3490C118S3490C10__7S3490C1[4]),  4,5},
  {&(_tg__ZTV7S3490C57S3490C98S3490C12__A1__8S3490C118S3490C10__7S3490C1[3]),  3,4},
  {&(_tg__ZTV7S3490C77S3490C98S3490C12__A1__8S3490C118S3490C10__7S3490C1[3]),  3,4},
  {&(_tg__ZTV7S3490C8__8S3490C118S3490C10__7S3490C1[7]),  7,10},
  {&(_tg__ZTV7S3490C97S3490C8__A1__8S3490C118S3490C10__7S3490C1[7]),  7,10},
  {&(_tg__ZTV7S3490C57S3490C97S3490C8__A2__8S3490C118S3490C10__7S3490C1[3]),  3,4},
  {&(_tg__ZTV7S3490C77S3490C97S3490C8__A2__8S3490C118S3490C10__7S3490C1[3]),  3,4},
  {&(_tg__ZTV7S3490C57S3490C8__A3__8S3490C118S3490C10__7S3490C1[3]),  3,4},
  {&(_tg__ZTV7S3490C28S3490C10__A1__7S3490C1[7]),  7,11},
  {&(_tg__ZTV7S3490C37S3490C28S3490C10__A4__7S3490C1[6]),  6,6},
  {&(_tg__ZTV7S3490C5__7S3490C37S3490C28S3490C10__A4__7S3490C1[4]),  4,5},
  {&(_tg__ZTV7S3490C6__A1__7S3490C37S3490C28S3490C10__A4__7S3490C1[3]),  3,4},
  {&(_tg__ZTV7S3490C7__7S3490C37S3490C28S3490C10__A4__7S3490C1[4]),  4,5},
  {&(_tg__ZTV7S3490C87S3490C28S3490C10__A2__7S3490C1[7]),  7,10},
  {&(_tg__ZTV7S3490C37S3490C87S3490C28S3490C10__A5__7S3490C1[6]),  6,6},
  {&(_tg__ZTV7S3490C5__7S3490C37S3490C87S3490C28S3490C10__A5__7S3490C1[4]),  4,5},
  {&(_tg__ZTV7S3490C6__A1__7S3490C37S3490C87S3490C28S3490C10__A5__7S3490C1[3]),  3,4},
  {&(_tg__ZTV7S3490C7__7S3490C37S3490C87S3490C28S3490C10__A5__7S3490C1[4]),  4,5},
  {&(_tg__ZTV7S3490C97S3490C87S3490C28S3490C10__A4__7S3490C1[7]),  7,10},
  {&(_tg__ZTV7S3490C57S3490C97S3490C87S3490C28S3490C10__A7__7S3490C1[3]),  3,4},
  {&(_tg__ZTV7S3490C77S3490C97S3490C87S3490C28S3490C10__A5__7S3490C1[3]),  3,4},
  {&(_tg__ZTV7S3490C6__7S3490C77S3490C97S3490C87S3490C28S3490C10__A5__7S3490C1[3]),  3,4},
  {&(_tg__ZTV7S3490C5__A__7S3490C97S3490C87S3490C28S3490C10__A4__7S3490C1[3]),  3,4},
  {&(_tg__ZTV7S3490C7__A__7S3490C97S3490C87S3490C28S3490C10__A4__7S3490C1[3]),  3,4},
  {&(_tg__ZTV7S3490C6__A2__7S3490C97S3490C87S3490C28S3490C10__A4__7S3490C1[3]),  3,4},
  {&(_tg__ZTV7S3490C3__7S3490C97S3490C87S3490C28S3490C10__A4__7S3490C1[6]),  6,6},
  {&(_tg__ZTV7S3490C5__A1__7S3490C97S3490C87S3490C28S3490C10__A4__7S3490C1[4]),  4,5},
  {&(_tg__ZTV7S3490C7__A1__7S3490C97S3490C87S3490C28S3490C10__A4__7S3490C1[4]),  4,5},
  {&(_tg__ZTV7S3490C57S3490C87S3490C28S3490C10__A8__7S3490C1[3]),  3,4},
  {&(_tg__ZTV7S3490C5__7S3490C87S3490C28S3490C10__A2__7S3490C1[4]),  4,5},
  {&(_tg__ZTV7S3490C6__A1__7S3490C87S3490C28S3490C10__A2__7S3490C1[3]),  3,4},
  {&(_tg__ZTV7S3490C7__7S3490C87S3490C28S3490C10__A2__7S3490C1[4]),  4,5},
  {&(_tg__ZTV7S3490C9__7S3490C87S3490C28S3490C10__A2__7S3490C1[7]),  7,10},
  {&(_tg__ZTV7S3490C57S3490C9__A1__7S3490C87S3490C28S3490C10__A2__7S3490C1[3]),  3,4},
  {&(_tg__ZTV7S3490C77S3490C9__A1__7S3490C87S3490C28S3490C10__A2__7S3490C1[3]),  3,4},
  {&(_tg__ZTV7S3490C3__A1__7S3490C87S3490C28S3490C10__A2__7S3490C1[6]),  6,6},
  {&(_tg__ZTV7S3490C5__A__7S3490C87S3490C28S3490C10__A2__7S3490C1[3]),  3,4},
  {&(_tg__ZTV7S3490C5__7S3490C28S3490C10__A1__7S3490C1[4]),  4,5},
  {&(_tg__ZTV7S3490C6__A1__7S3490C28S3490C10__A1__7S3490C1[3]),  3,4},
  {&(_tg__ZTV7S3490C7__7S3490C28S3490C10__A1__7S3490C1[4]),  4,5},
  {&(_tg__ZTV7S3490C8__7S3490C28S3490C10__A1__7S3490C1[7]),  7,10},
  {&(_tg__ZTV7S3490C97S3490C8__7S3490C28S3490C10__A1__7S3490C1[7]),  7,10},
  {&(_tg__ZTV7S3490C57S3490C97S3490C8__A1__7S3490C28S3490C10__A1__7S3490C1[3]),  3,4},
  {&(_tg__ZTV7S3490C77S3490C97S3490C8__A1__7S3490C28S3490C10__A1__7S3490C1[3]),  3,4},
  {&(_tg__ZTV7S3490C3__A2__7S3490C28S3490C10__A1__7S3490C1[6]),  6,6},
  {&(_tg__ZTV7S3490C57S3490C8__A2__7S3490C28S3490C10__A1__7S3490C1[3]),  3,4},
  {&(_tg__ZTV7S3490C9__8S3490C10__7S3490C1[10]),  10,13},
  {&(_tg__ZTV7S3490C57S3490C9__8S3490C10__7S3490C1[3]),  3,4},
  {&(_tg__ZTV7S3490C77S3490C9__8S3490C10__7S3490C1[3]),  3,4},
  {&(_tg__ZTV7S3490C6__A2__8S3490C10__7S3490C1[3]),  3,4},
  {&(_tg__ZTV7S3490C3__8S3490C10__7S3490C1[6]),  6,6},
  {&(_tg__ZTV7S3490C5__A1__8S3490C10__7S3490C1[4]),  4,5},
  {&(_tg__ZTV7S3490C7__A1__8S3490C10__7S3490C1[4]),  4,5},
  {&(_tg__ZTV7S3490C57S3490C98S3490C128S3490C11__A2__8S3490C10__7S3490C1[3]),  3,4},
  {&(_tg__ZTV7S3490C77S3490C98S3490C128S3490C11__A2__8S3490C10__7S3490C1[3]),  3,4},
  {&(_tg__ZTV7S3490C88S3490C11__8S3490C10__7S3490C1[7]),  7,10},
  {&(_tg__ZTV7S3490C97S3490C88S3490C11__A2__8S3490C10__7S3490C1[7]),  7,10},
  {&(_tg__ZTV7S3490C57S3490C97S3490C88S3490C11__A3__8S3490C10__7S3490C1[3]),  3,4},
  {&(_tg__ZTV7S3490C77S3490C97S3490C88S3490C11__A3__8S3490C10__7S3490C1[3]),  3,4},
  {&(_tg__ZTV7S3490C57S3490C88S3490C11__A4__8S3490C10__7S3490C1[3]),  3,4},
  {&(_tg__ZTV7S3490C2__8S3490C10__7S3490C1[7]),  7,11},
  {&(_tg__ZTV7S3490C87S3490C2__A1__8S3490C10__7S3490C1[7]),  7,10},
  {&(_tg__ZTV7S3490C97S3490C87S3490C2__A3__8S3490C10__7S3490C1[7]),  7,10},
  {&(_tg__ZTV7S3490C57S3490C97S3490C87S3490C2__A5__8S3490C10__7S3490C1[3]),  3,4},
  {&(_tg__ZTV7S3490C77S3490C97S3490C87S3490C2__A4__8S3490C10__7S3490C1[3]),  3,4},
  {&(_tg__ZTV7S3490C57S3490C87S3490C2__A6__8S3490C10__7S3490C1[3]),  3,4},
  {&(_ZTV7S3490C1[156]),  156,256},
  {&(_ZTV7S3490C1[160]),  160,256},
  {&(_ZTV7S3490C1[165]),  165,256},
  {&(_ZTV7S3490C1[22]),  22,256},
  {&(_ZTV7S3490C1[32]),  32,256},
  {&(_ZTV7S3490C1[38]),  38,256},
  {&(_ZTV7S3490C1[42]),  42,256},
  {&(_ZTV7S3490C1[172]),  172,256},
  {&(_ZTV7S3490C1[46]),  46,256},
  {&(_ZTV7S3490C1[58]),  58,256},
  {&(_ZTV7S3490C1[182]),  182,256},
  {&(_ZTV7S3490C1[188]),  188,256},
  {&(_ZTV7S3490C1[192]),  192,256},
  {&(_ZTV7S3490C1[66]),  66,256},
  {&(_ZTV7S3490C1[70]),  70,256},
  {&(_ZTV7S3490C1[78]),  78,256},
  {&(_ZTV7S3490C1[88]),  88,256},
  {&(_ZTV7S3490C1[94]),  94,256},
  {&(_ZTV7S3490C1[98]),  98,256},
  {&(_ZTV7S3490C1[102]),  102,256},
  {&(_ZTV7S3490C1[113]),  113,256},
  {&(_ZTV7S3490C1[124]),  124,256},
  {&(_ZTV7S3490C1[134]),  134,256},
  {&(_ZTV7S3490C1[140]),  140,256},
  {&(_ZTV7S3490C1[144]),  144,256},
  {&(_ZTV7S3490C1[148]),  148,256},
  {&(_ZTV7S3490C1[204]),  204,256},
  {&(_ZTV7S3490C1[228]),  228,256},
  {&(_ZTV7S3490C1[238]),  238,256},
  {&(_ZTV7S3490C1[244]),  244,256},
  {&(_ZTV7S3490C1[248]),  248,256},
  {&(_ZTV7S3490C1[252]),  252,256},
  {&(_ZTV7S3490C1[255]),  255,256},
  {&(_ZTV7S3490C1[210]),  210,256},
  {&(_ZTV7S3490C1[217]),  217,256},
  {&(_tg__ZTV7S3490C5__7S3490C1[3]),  3,4},
  {&(_tg__ZTV7S3490C7__7S3490C1[3]),  3,4},
  {&(_tg__ZTV7S3490C6__7S3490C7__7S3490C1[3]),  3,4},
  {&(_tg__ZTV7S3490C3__A2__7S3490C1[6]),  6,6},
  {&(_tg__ZTV7S3490C5__7S3490C3__A2__7S3490C1[4]),  4,5},
  {&(_tg__ZTV7S3490C6__A1__7S3490C3__A2__7S3490C1[3]),  3,4},
  {&(_tg__ZTV7S3490C7__7S3490C3__A2__7S3490C1[4]),  4,5},
  {&(_tg__ZTV7S3490C9__A1__7S3490C1[7]),  7,10},
  {&(_tg__ZTV7S3490C57S3490C9__A3__7S3490C1[3]),  3,4},
  {&(_tg__ZTV7S3490C77S3490C9__A2__7S3490C1[3]),  3,4},
  {&(_tg__ZTV7S3490C6__7S3490C77S3490C9__A2__7S3490C1[3]),  3,4},
  {&(_tg__ZTV7S3490C5__A__7S3490C9__A1__7S3490C1[3]),  3,4},
  {&(_tg__ZTV7S3490C7__A__7S3490C9__A1__7S3490C1[3]),  3,4},
  {&(_tg__ZTV7S3490C6__A2__7S3490C9__A1__7S3490C1[3]),  3,4},
  {&(_tg__ZTV7S3490C3__7S3490C9__A1__7S3490C1[6]),  6,6},
  {&(_tg__ZTV7S3490C5__A1__7S3490C9__A1__7S3490C1[4]),  4,5},
  {&(_tg__ZTV7S3490C7__A1__7S3490C9__A1__7S3490C1[4]),  4,5},
  {&(_tg__ZTV8S3490C15__7S3490C1[8]),  8,11},
  {&(_tg__ZTV7S3490C58S3490C15__A11__7S3490C1[3]),  3,4},
  {&(_tg__ZTV7S3490C78S3490C15__A7__7S3490C1[3]),  3,4},
  {&(_tg__ZTV7S3490C6__7S3490C78S3490C15__A7__7S3490C1[3]),  3,4},
  {&(_tg__ZTV7S3490C38S3490C15__A7__7S3490C1[6]),  6,6},
  {&(_tg__ZTV7S3490C5__7S3490C38S3490C15__A7__7S3490C1[4]),  4,5},
  {&(_tg__ZTV7S3490C6__A1__7S3490C38S3490C15__A7__7S3490C1[3]),  3,4},
  {&(_tg__ZTV7S3490C7__7S3490C38S3490C15__A7__7S3490C1[4]),  4,5},
  {&(_tg__ZTV7S3490C8__8S3490C15__7S3490C1[11]),  11,14},
  {&(_tg__ZTV7S3490C5__8S3490C15__7S3490C1[4]),  4,5},
  {&(_tg__ZTV7S3490C6__A1__8S3490C15__7S3490C1[3]),  3,4},
  {&(_tg__ZTV7S3490C7__8S3490C15__7S3490C1[4]),  4,5},
  {&(_tg__ZTV7S3490C97S3490C8__8S3490C15__7S3490C1[7]),  7,10},
  {&(_tg__ZTV7S3490C57S3490C97S3490C8__A1__8S3490C15__7S3490C1[3]),  3,4},
  {&(_tg__ZTV7S3490C77S3490C97S3490C8__A1__8S3490C15__7S3490C1[3]),  3,4},
  {&(_tg__ZTV7S3490C3__A1__8S3490C15__7S3490C1[6]),  6,6},
  {&(_tg__ZTV7S3490C57S3490C8__A2__8S3490C15__7S3490C1[3]),  3,4},
  {&(_tg__ZTV7S3490C67S3490C8__A5__8S3490C15__7S3490C1[2]),  2,3},
  {&(_tg__ZTV7S3490C7__A__8S3490C15__7S3490C1[3]),  3,4},
  {&(_tg__ZTV7S3490C3__A__8S3490C15__7S3490C1[6]),  6,6},
  {&(_tg__ZTV7S3490C8__A3__7S3490C1[7]),  7,10},
  {&(_tg__ZTV7S3490C37S3490C8__A6__7S3490C1[6]),  6,6},
  {&(_tg__ZTV7S3490C5__7S3490C37S3490C8__A6__7S3490C1[4]),  4,5},
  {&(_tg__ZTV7S3490C6__A1__7S3490C37S3490C8__A6__7S3490C1[3]),  3,4},
  {&(_tg__ZTV7S3490C7__7S3490C37S3490C8__A6__7S3490C1[4]),  4,5},
  {&(_tg__ZTV7S3490C97S3490C8__A5__7S3490C1[7]),  7,10},
  {&(_tg__ZTV7S3490C57S3490C97S3490C8__A9__7S3490C1[3]),  3,4},
  {&(_tg__ZTV7S3490C77S3490C97S3490C8__A6__7S3490C1[3]),  3,4},
  {&(_tg__ZTV7S3490C6__7S3490C77S3490C97S3490C8__A6__7S3490C1[3]),  3,4},
  {&(_tg__ZTV7S3490C5__A__7S3490C97S3490C8__A5__7S3490C1[3]),  3,4},
  {&(_tg__ZTV7S3490C7__A__7S3490C97S3490C8__A5__7S3490C1[3]),  3,4},
  {&(_tg__ZTV7S3490C6__A2__7S3490C97S3490C8__A5__7S3490C1[3]),  3,4},
  {&(_tg__ZTV7S3490C3__7S3490C97S3490C8__A5__7S3490C1[6]),  6,6},
  {&(_tg__ZTV7S3490C5__A1__7S3490C97S3490C8__A5__7S3490C1[4]),  4,5},
  {&(_tg__ZTV7S3490C7__A1__7S3490C97S3490C8__A5__7S3490C1[4]),  4,5},
  {&(_tg__ZTV7S3490C57S3490C8__A10__7S3490C1[3]),  3,4},
  {&(_tg__ZTV7S3490C5__7S3490C8__A3__7S3490C1[4]),  4,5},
  {&(_tg__ZTV7S3490C6__A1__7S3490C8__A3__7S3490C1[3]),  3,4},
  {&(_tg__ZTV7S3490C7__7S3490C8__A3__7S3490C1[4]),  4,5},
  {&(_tg__ZTV7S3490C9__7S3490C8__A3__7S3490C1[7]),  7,10},
  {&(_tg__ZTV7S3490C57S3490C9__A1__7S3490C8__A3__7S3490C1[3]),  3,4},
  {&(_tg__ZTV7S3490C77S3490C9__A1__7S3490C8__A3__7S3490C1[3]),  3,4},
  {&(_tg__ZTV7S3490C3__A1__7S3490C8__A3__7S3490C1[6]),  6,6},
  {&(_tg__ZTV7S3490C5__A__7S3490C8__A3__7S3490C1[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S3490C1[];
extern  VTBL_ENTRY _ZTV7S3490C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3490C1[];
static VTBL_ENTRY alt_thunk_names3[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S3490C15D0Ev,_ZTv0_n36_N8S3490C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn832_N8S3490C15D0Ev,_ZThn604_N8S3490C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S3490C15D1Ev,_ZTv0_n36_N8S3490C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn832_N8S3490C15D1Ev,_ZThn604_N8S3490C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S3490C10D0Ev,_ZTv0_n36_N8S3490C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64912_N8S3490C10D0Ev,_ZThn45948_N8S3490C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S3490C10D1Ev,_ZTv0_n36_N8S3490C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64912_N8S3490C10D1Ev,_ZThn45948_N8S3490C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S3490C1D0Ev,_ZTv0_n40_N7S3490C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn78416_N7S3490C1D0Ev,_ZThn55496_N7S3490C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S3490C1D1Ev,_ZTv0_n40_N7S3490C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn78416_N7S3490C1D1Ev,_ZThn55496_N7S3490C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S3490C1D0Ev,_ZTv0_n36_N7S3490C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn79248_N7S3490C1D0Ev,_ZThn56100_N7S3490C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn75712_N7S3490C1D0Ev,_ZThn53556_N7S3490C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S3490C1D1Ev,_ZTv0_n36_N7S3490C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn79248_N7S3490C1D1Ev,_ZThn56100_N7S3490C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn75712_N7S3490C1D1Ev,_ZThn53556_N7S3490C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3490C1 = {  "S3490C1", // class name
  bases_S3490C1, 68,
  &(vtc_S3490C1[0]), // expected_vtbl_contents
  &(vtt_S3490C1[0]), // expected_vtt_contents
  ABISELECT(83888,59364), // object size
  NSPAIRA(_ZTI7S3490C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S3490C1),256, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3490C1),247, //virtual table table var
  67, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names3,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S698C5  {
  int s698c5f0;
  __tsi64 s698c5f1;
  void *s698c5f2[4];
  int s698c5f3[2];
  void *s698c5f4;
  ::S3352C4_nt s698c5f5;
  void *s698c5f6[2];
  virtual  ~S698C5(); // _ZN6S698C5D1Ev
  virtual void  v7(); // _ZN6S698C52v7Ev
  virtual void  v8(); // _ZN6S698C52v8Ev
  virtual void  v9(); // _ZN6S698C52v9Ev
  virtual void  v10(); // _ZN6S698C53v10Ev
  virtual void  v11(); // _ZN6S698C53v11Ev
  virtual void  v12(); // _ZN6S698C53v12Ev
  virtual void  v13(); // _ZN6S698C53v13Ev
  virtual void  v14(); // _ZN6S698C53v14Ev
  virtual void  v15(); // _ZN6S698C53v15Ev
  virtual void  v16(); // _ZN6S698C53v16Ev
  virtual void  v17(); // _ZN6S698C53v17Ev
  virtual void  v18(); // _ZN6S698C53v18Ev
  virtual void  v19(); // _ZN6S698C53v19Ev
  virtual void  v20(); // _ZN6S698C53v20Ev
  virtual void  v21(); // _ZN6S698C53v21Ev
  virtual void  v22(); // _ZN6S698C53v22Ev
  virtual void  v23(); // _ZN6S698C53v23Ev
  virtual void  v24(); // _ZN6S698C53v24Ev
  virtual void  v25(); // _ZN6S698C53v25Ev
  virtual void  v26(); // _ZN6S698C53v26Ev
  virtual void  v27(); // _ZN6S698C53v27Ev
  virtual void  v28(); // _ZN6S698C53v28Ev
  virtual void  v29(); // _ZN6S698C53v29Ev
  virtual void  v30(); // _ZN6S698C53v30Ev
  virtual void  v31(); // _ZN6S698C53v31Ev
  virtual void  v32(); // _ZN6S698C53v32Ev
  virtual void  v33(); // _ZN6S698C53v33Ev
  virtual void  v34(); // _ZN6S698C53v34Ev
  virtual void  v35(); // _ZN6S698C53v35Ev
  virtual void  v36(); // _ZN6S698C53v36Ev
  virtual void  v37(); // _ZN6S698C53v37Ev
  virtual void  v38(); // _ZN6S698C53v38Ev
  virtual void  v39(); // _ZN6S698C53v39Ev
  virtual void  v40(); // _ZN6S698C53v40Ev
  virtual void  v41(); // _ZN6S698C53v41Ev
  virtual void  v42(); // _ZN6S698C53v42Ev
  virtual void  v43(); // _ZN6S698C53v43Ev
  virtual void  v44(); // _ZN6S698C53v44Ev
  virtual void  v45(); // _ZN6S698C53v45Ev
  virtual void  v46(); // _ZN6S698C53v46Ev
  virtual void  v47(); // _ZN6S698C53v47Ev
  virtual void  v48(); // _ZN6S698C53v48Ev
  virtual void  v49(); // _ZN6S698C53v49Ev
  virtual void  v50(); // _ZN6S698C53v50Ev
  virtual void  v51(); // _ZN6S698C53v51Ev
  virtual void  v52(); // _ZN6S698C53v52Ev
  virtual void  v53(); // _ZN6S698C53v53Ev
  virtual void  v54(); // _ZN6S698C53v54Ev
  virtual void  v55(); // _ZN6S698C53v55Ev
  virtual void  v56(); // _ZN6S698C53v56Ev
  virtual void  v57(); // _ZN6S698C53v57Ev
  virtual void  v58(); // _ZN6S698C53v58Ev
  virtual void  v59(); // _ZN6S698C53v59Ev
  virtual void  v60(); // _ZN6S698C53v60Ev
  virtual void  v61(); // _ZN6S698C53v61Ev
  virtual void  v62(); // _ZN6S698C53v62Ev
  virtual void  v63(); // _ZN6S698C53v63Ev
  virtual void  v64(); // _ZN6S698C53v64Ev
  virtual void  v65(); // _ZN6S698C53v65Ev
  virtual void  v66(); // _ZN6S698C53v66Ev
  virtual void  v67(); // _ZN6S698C53v67Ev
  virtual void  v68(); // _ZN6S698C53v68Ev
  virtual void  v69(); // _ZN6S698C53v69Ev
  virtual void  v70(); // _ZN6S698C53v70Ev
  S698C5(); // tgen
};
//SIG(-1 S698C5) 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]}


 S698C5 ::~S698C5(){ note_dtor("S698C5", this);}
void  S698C5 ::v7(){vfunc_called(this, "_ZN6S698C52v7Ev");}
void  S698C5 ::v8(){vfunc_called(this, "_ZN6S698C52v8Ev");}
void  S698C5 ::v9(){vfunc_called(this, "_ZN6S698C52v9Ev");}
void  S698C5 ::v10(){vfunc_called(this, "_ZN6S698C53v10Ev");}
void  S698C5 ::v11(){vfunc_called(this, "_ZN6S698C53v11Ev");}
void  S698C5 ::v12(){vfunc_called(this, "_ZN6S698C53v12Ev");}
void  S698C5 ::v13(){vfunc_called(this, "_ZN6S698C53v13Ev");}
void  S698C5 ::v14(){vfunc_called(this, "_ZN6S698C53v14Ev");}
void  S698C5 ::v15(){vfunc_called(this, "_ZN6S698C53v15Ev");}
void  S698C5 ::v16(){vfunc_called(this, "_ZN6S698C53v16Ev");}
void  S698C5 ::v17(){vfunc_called(this, "_ZN6S698C53v17Ev");}
void  S698C5 ::v18(){vfunc_called(this, "_ZN6S698C53v18Ev");}
void  S698C5 ::v19(){vfunc_called(this, "_ZN6S698C53v19Ev");}
void  S698C5 ::v20(){vfunc_called(this, "_ZN6S698C53v20Ev");}
void  S698C5 ::v21(){vfunc_called(this, "_ZN6S698C53v21Ev");}
void  S698C5 ::v22(){vfunc_called(this, "_ZN6S698C53v22Ev");}
void  S698C5 ::v23(){vfunc_called(this, "_ZN6S698C53v23Ev");}
void  S698C5 ::v24(){vfunc_called(this, "_ZN6S698C53v24Ev");}
void  S698C5 ::v25(){vfunc_called(this, "_ZN6S698C53v25Ev");}
void  S698C5 ::v26(){vfunc_called(this, "_ZN6S698C53v26Ev");}
void  S698C5 ::v27(){vfunc_called(this, "_ZN6S698C53v27Ev");}
void  S698C5 ::v28(){vfunc_called(this, "_ZN6S698C53v28Ev");}
void  S698C5 ::v29(){vfunc_called(this, "_ZN6S698C53v29Ev");}
void  S698C5 ::v30(){vfunc_called(this, "_ZN6S698C53v30Ev");}
void  S698C5 ::v31(){vfunc_called(this, "_ZN6S698C53v31Ev");}
void  S698C5 ::v32(){vfunc_called(this, "_ZN6S698C53v32Ev");}
void  S698C5 ::v33(){vfunc_called(this, "_ZN6S698C53v33Ev");}
void  S698C5 ::v34(){vfunc_called(this, "_ZN6S698C53v34Ev");}
void  S698C5 ::v35(){vfunc_called(this, "_ZN6S698C53v35Ev");}
void  S698C5 ::v36(){vfunc_called(this, "_ZN6S698C53v36Ev");}
void  S698C5 ::v37(){vfunc_called(this, "_ZN6S698C53v37Ev");}
void  S698C5 ::v38(){vfunc_called(this, "_ZN6S698C53v38Ev");}
void  S698C5 ::v39(){vfunc_called(this, "_ZN6S698C53v39Ev");}
void  S698C5 ::v40(){vfunc_called(this, "_ZN6S698C53v40Ev");}
void  S698C5 ::v41(){vfunc_called(this, "_ZN6S698C53v41Ev");}
void  S698C5 ::v42(){vfunc_called(this, "_ZN6S698C53v42Ev");}
void  S698C5 ::v43(){vfunc_called(this, "_ZN6S698C53v43Ev");}
void  S698C5 ::v44(){vfunc_called(this, "_ZN6S698C53v44Ev");}
void  S698C5 ::v45(){vfunc_called(this, "_ZN6S698C53v45Ev");}
void  S698C5 ::v46(){vfunc_called(this, "_ZN6S698C53v46Ev");}
void  S698C5 ::v47(){vfunc_called(this, "_ZN6S698C53v47Ev");}
void  S698C5 ::v48(){vfunc_called(this, "_ZN6S698C53v48Ev");}
void  S698C5 ::v49(){vfunc_called(this, "_ZN6S698C53v49Ev");}
void  S698C5 ::v50(){vfunc_called(this, "_ZN6S698C53v50Ev");}
void  S698C5 ::v51(){vfunc_called(this, "_ZN6S698C53v51Ev");}
void  S698C5 ::v52(){vfunc_called(this, "_ZN6S698C53v52Ev");}
void  S698C5 ::v53(){vfunc_called(this, "_ZN6S698C53v53Ev");}
void  S698C5 ::v54(){vfunc_called(this, "_ZN6S698C53v54Ev");}
void  S698C5 ::v55(){vfunc_called(this, "_ZN6S698C53v55Ev");}
void  S698C5 ::v56(){vfunc_called(this, "_ZN6S698C53v56Ev");}
void  S698C5 ::v57(){vfunc_called(this, "_ZN6S698C53v57Ev");}
void  S698C5 ::v58(){vfunc_called(this, "_ZN6S698C53v58Ev");}
void  S698C5 ::v59(){vfunc_called(this, "_ZN6S698C53v59Ev");}
void  S698C5 ::v60(){vfunc_called(this, "_ZN6S698C53v60Ev");}
void  S698C5 ::v61(){vfunc_called(this, "_ZN6S698C53v61Ev");}
void  S698C5 ::v62(){vfunc_called(this, "_ZN6S698C53v62Ev");}
void  S698C5 ::v63(){vfunc_called(this, "_ZN6S698C53v63Ev");}
void  S698C5 ::v64(){vfunc_called(this, "_ZN6S698C53v64Ev");}
void  S698C5 ::v65(){vfunc_called(this, "_ZN6S698C53v65Ev");}
void  S698C5 ::v66(){vfunc_called(this, "_ZN6S698C53v66Ev");}
void  S698C5 ::v67(){vfunc_called(this, "_ZN6S698C53v67Ev");}
void  S698C5 ::v68(){vfunc_called(this, "_ZN6S698C53v68Ev");}
void  S698C5 ::v69(){vfunc_called(this, "_ZN6S698C53v69Ev");}
void  S698C5 ::v70(){vfunc_called(this, "_ZN6S698C53v70Ev");}
S698C5 ::S698C5(){ note_ctor("S698C5", this);} // tgen

static void Test_S698C5()
{
  extern Class_Descriptor cd_S698C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S698C5, buf);
    S698C5 *dp, &lv = *(dp=new (buf) S698C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S698C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S698C5)");
    check_field_offset(lv, s698c5f0, ABISELECT(8,4), "S698C5.s698c5f0");
    check_field_offset(lv, s698c5f1, ABISELECT(16,8), "S698C5.s698c5f1");
    check_field_offset(lv, s698c5f2, ABISELECT(24,16), "S698C5.s698c5f2");
    check_field_offset(lv, s698c5f3, ABISELECT(56,32), "S698C5.s698c5f3");
    check_field_offset(lv, s698c5f4, ABISELECT(64,40), "S698C5.s698c5f4");
    check_field_offset(lv, s698c5f5, ABISELECT(72,44), "S698C5.s698c5f5");
    check_field_offset(lv, s698c5f6, ABISELECT(80,52), "S698C5.s698c5f6");
    test_class_info(&lv, &cd_S698C5);
    dp->~S698C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS698C5(Test_S698C5, "S698C5", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN6S698C5C1Ev();
extern void _ZN6S698C5D1Ev();
Name_Map name_map_S698C5[] = {
  NSPAIR(_ZN6S698C5C1Ev),
  NSPAIR(_ZN6S698C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S698C5[];
extern void _ZN6S698C5D1Ev();
extern void _ZN6S698C5D0Ev();
extern void _ZN6S698C52v7Ev();
extern void _ZN6S698C52v8Ev();
extern void _ZN6S698C52v9Ev();
extern void _ZN6S698C53v10Ev();
extern void _ZN6S698C53v11Ev();
extern void _ZN6S698C53v12Ev();
extern void _ZN6S698C53v13Ev();
extern void _ZN6S698C53v14Ev();
extern void _ZN6S698C53v15Ev();
extern void _ZN6S698C53v16Ev();
extern void _ZN6S698C53v17Ev();
extern void _ZN6S698C53v18Ev();
extern void _ZN6S698C53v19Ev();
extern void _ZN6S698C53v20Ev();
extern void _ZN6S698C53v21Ev();
extern void _ZN6S698C53v22Ev();
extern void _ZN6S698C53v23Ev();
extern void _ZN6S698C53v24Ev();
extern void _ZN6S698C53v25Ev();
extern void _ZN6S698C53v26Ev();
extern void _ZN6S698C53v27Ev();
extern void _ZN6S698C53v28Ev();
extern void _ZN6S698C53v29Ev();
extern void _ZN6S698C53v30Ev();
extern void _ZN6S698C53v31Ev();
extern void _ZN6S698C53v32Ev();
extern void _ZN6S698C53v33Ev();
extern void _ZN6S698C53v34Ev();
extern void _ZN6S698C53v35Ev();
extern void _ZN6S698C53v36Ev();
extern void _ZN6S698C53v37Ev();
extern void _ZN6S698C53v38Ev();
extern void _ZN6S698C53v39Ev();
extern void _ZN6S698C53v40Ev();
extern void _ZN6S698C53v41Ev();
extern void _ZN6S698C53v42Ev();
extern void _ZN6S698C53v43Ev();
extern void _ZN6S698C53v44Ev();
extern void _ZN6S698C53v45Ev();
extern void _ZN6S698C53v46Ev();
extern void _ZN6S698C53v47Ev();
extern void _ZN6S698C53v48Ev();
extern void _ZN6S698C53v49Ev();
extern void _ZN6S698C53v50Ev();
extern void _ZN6S698C53v51Ev();
extern void _ZN6S698C53v52Ev();
extern void _ZN6S698C53v53Ev();
extern void _ZN6S698C53v54Ev();
extern void _ZN6S698C53v55Ev();
extern void _ZN6S698C53v56Ev();
extern void _ZN6S698C53v57Ev();
extern void _ZN6S698C53v58Ev();
extern void _ZN6S698C53v59Ev();
extern void _ZN6S698C53v60Ev();
extern void _ZN6S698C53v61Ev();
extern void _ZN6S698C53v62Ev();
extern void _ZN6S698C53v63Ev();
extern void _ZN6S698C53v64Ev();
extern void _ZN6S698C53v65Ev();
extern void _ZN6S698C53v66Ev();
extern void _ZN6S698C53v67Ev();
extern void _ZN6S698C53v68Ev();
extern void _ZN6S698C53v69Ev();
extern void _ZN6S698C53v70Ev();
static  VTBL_ENTRY vtc_S698C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S698C5[0]),
  (VTBL_ENTRY)&_ZN6S698C5D1Ev,
  (VTBL_ENTRY)&_ZN6S698C5D0Ev,
  (VTBL_ENTRY)&_ZN6S698C52v7Ev,
  (VTBL_ENTRY)&_ZN6S698C52v8Ev,
  (VTBL_ENTRY)&_ZN6S698C52v9Ev,
  (VTBL_ENTRY)&_ZN6S698C53v10Ev,
  (VTBL_ENTRY)&_ZN6S698C53v11Ev,
  (VTBL_ENTRY)&_ZN6S698C53v12Ev,
  (VTBL_ENTRY)&_ZN6S698C53v13Ev,
  (VTBL_ENTRY)&_ZN6S698C53v14Ev,
  (VTBL_ENTRY)&_ZN6S698C53v15Ev,
  (VTBL_ENTRY)&_ZN6S698C53v16Ev,
  (VTBL_ENTRY)&_ZN6S698C53v17Ev,
  (VTBL_ENTRY)&_ZN6S698C53v18Ev,
  (VTBL_ENTRY)&_ZN6S698C53v19Ev,
  (VTBL_ENTRY)&_ZN6S698C53v20Ev,
  (VTBL_ENTRY)&_ZN6S698C53v21Ev,
  (VTBL_ENTRY)&_ZN6S698C53v22Ev,
  (VTBL_ENTRY)&_ZN6S698C53v23Ev,
  (VTBL_ENTRY)&_ZN6S698C53v24Ev,
  (VTBL_ENTRY)&_ZN6S698C53v25Ev,
  (VTBL_ENTRY)&_ZN6S698C53v26Ev,
  (VTBL_ENTRY)&_ZN6S698C53v27Ev,
  (VTBL_ENTRY)&_ZN6S698C53v28Ev,
  (VTBL_ENTRY)&_ZN6S698C53v29Ev,
  (VTBL_ENTRY)&_ZN6S698C53v30Ev,
  (VTBL_ENTRY)&_ZN6S698C53v31Ev,
  (VTBL_ENTRY)&_ZN6S698C53v32Ev,
  (VTBL_ENTRY)&_ZN6S698C53v33Ev,
  (VTBL_ENTRY)&_ZN6S698C53v34Ev,
  (VTBL_ENTRY)&_ZN6S698C53v35Ev,
  (VTBL_ENTRY)&_ZN6S698C53v36Ev,
  (VTBL_ENTRY)&_ZN6S698C53v37Ev,
  (VTBL_ENTRY)&_ZN6S698C53v38Ev,
  (VTBL_ENTRY)&_ZN6S698C53v39Ev,
  (VTBL_ENTRY)&_ZN6S698C53v40Ev,
  (VTBL_ENTRY)&_ZN6S698C53v41Ev,
  (VTBL_ENTRY)&_ZN6S698C53v42Ev,
  (VTBL_ENTRY)&_ZN6S698C53v43Ev,
  (VTBL_ENTRY)&_ZN6S698C53v44Ev,
  (VTBL_ENTRY)&_ZN6S698C53v45Ev,
  (VTBL_ENTRY)&_ZN6S698C53v46Ev,
  (VTBL_ENTRY)&_ZN6S698C53v47Ev,
  (VTBL_ENTRY)&_ZN6S698C53v48Ev,
  (VTBL_ENTRY)&_ZN6S698C53v49Ev,
  (VTBL_ENTRY)&_ZN6S698C53v50Ev,
  (VTBL_ENTRY)&_ZN6S698C53v51Ev,
  (VTBL_ENTRY)&_ZN6S698C53v52Ev,
  (VTBL_ENTRY)&_ZN6S698C53v53Ev,
  (VTBL_ENTRY)&_ZN6S698C53v54Ev,
  (VTBL_ENTRY)&_ZN6S698C53v55Ev,
  (VTBL_ENTRY)&_ZN6S698C53v56Ev,
  (VTBL_ENTRY)&_ZN6S698C53v57Ev,
  (VTBL_ENTRY)&_ZN6S698C53v58Ev,
  (VTBL_ENTRY)&_ZN6S698C53v59Ev,
  (VTBL_ENTRY)&_ZN6S698C53v60Ev,
  (VTBL_ENTRY)&_ZN6S698C53v61Ev,
  (VTBL_ENTRY)&_ZN6S698C53v62Ev,
  (VTBL_ENTRY)&_ZN6S698C53v63Ev,
  (VTBL_ENTRY)&_ZN6S698C53v64Ev,
  (VTBL_ENTRY)&_ZN6S698C53v65Ev,
  (VTBL_ENTRY)&_ZN6S698C53v66Ev,
  (VTBL_ENTRY)&_ZN6S698C53v67Ev,
  (VTBL_ENTRY)&_ZN6S698C53v68Ev,
  (VTBL_ENTRY)&_ZN6S698C53v69Ev,
  (VTBL_ENTRY)&_ZN6S698C53v70Ev,
};
extern VTBL_ENTRY _ZTI6S698C5[];
extern  VTBL_ENTRY _ZTV6S698C5[];
Class_Descriptor cd_S698C5 = {  "S698C5", // class name
  0,0,//no base classes
  &(vtc_S698C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI6S698C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S698C5),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  S698C4  : S698C5 {
  virtual  ~S698C4(); // _ZN6S698C4D1Ev
  virtual void  v71(); // _ZN6S698C43v71Ev
  virtual void  v72(); // _ZN6S698C43v72Ev
  S698C4(); // tgen
};
//SIG(-1 S698C4) C1{ BC2{ vd v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2}


 S698C4 ::~S698C4(){ note_dtor("S698C4", this);}
void  S698C4 ::v71(){vfunc_called(this, "_ZN6S698C43v71Ev");}
void  S698C4 ::v72(){vfunc_called(this, "_ZN6S698C43v72Ev");}
S698C4 ::S698C4(){ note_ctor("S698C4", this);} // tgen

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

#else // __cplusplus

extern void _ZN6S698C4C1Ev();
extern void _ZN6S698C4D1Ev();
Name_Map name_map_S698C4[] = {
  NSPAIR(_ZN6S698C4C1Ev),
  NSPAIR(_ZN6S698C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S698C5;
extern VTBL_ENTRY _ZTI6S698C5[];
extern  VTBL_ENTRY _ZTV6S698C5[];
static Base_Class bases_S698C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S698C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S698C4[];
extern void _ZN6S698C4D1Ev();
extern void _ZN6S698C4D0Ev();
extern void _ZN6S698C52v7Ev();
extern void _ZN6S698C52v8Ev();
extern void _ZN6S698C52v9Ev();
extern void _ZN6S698C53v10Ev();
extern void _ZN6S698C53v11Ev();
extern void _ZN6S698C53v12Ev();
extern void _ZN6S698C53v13Ev();
extern void _ZN6S698C53v14Ev();
extern void _ZN6S698C53v15Ev();
extern void _ZN6S698C53v16Ev();
extern void _ZN6S698C53v17Ev();
extern void _ZN6S698C53v18Ev();
extern void _ZN6S698C53v19Ev();
extern void _ZN6S698C53v20Ev();
extern void _ZN6S698C53v21Ev();
extern void _ZN6S698C53v22Ev();
extern void _ZN6S698C53v23Ev();
extern void _ZN6S698C53v24Ev();
extern void _ZN6S698C53v25Ev();
extern void _ZN6S698C53v26Ev();
extern void _ZN6S698C53v27Ev();
extern void _ZN6S698C53v28Ev();
extern void _ZN6S698C53v29Ev();
extern void _ZN6S698C53v30Ev();
extern void _ZN6S698C53v31Ev();
extern void _ZN6S698C53v32Ev();
extern void _ZN6S698C53v33Ev();
extern void _ZN6S698C53v34Ev();
extern void _ZN6S698C53v35Ev();
extern void _ZN6S698C53v36Ev();
extern void _ZN6S698C53v37Ev();
extern void _ZN6S698C53v38Ev();
extern void _ZN6S698C53v39Ev();
extern void _ZN6S698C53v40Ev();
extern void _ZN6S698C53v41Ev();
extern void _ZN6S698C53v42Ev();
extern void _ZN6S698C53v43Ev();
extern void _ZN6S698C53v44Ev();
extern void _ZN6S698C53v45Ev();
extern void _ZN6S698C53v46Ev();
extern void _ZN6S698C53v47Ev();
extern void _ZN6S698C53v48Ev();
extern void _ZN6S698C53v49Ev();
extern void _ZN6S698C53v50Ev();
extern void _ZN6S698C53v51Ev();
extern void _ZN6S698C53v52Ev();
extern void _ZN6S698C53v53Ev();
extern void _ZN6S698C53v54Ev();
extern void _ZN6S698C53v55Ev();
extern void _ZN6S698C53v56Ev();
extern void _ZN6S698C53v57Ev();
extern void _ZN6S698C53v58Ev();
extern void _ZN6S698C53v59Ev();
extern void _ZN6S698C53v60Ev();
extern void _ZN6S698C53v61Ev();
extern void _ZN6S698C53v62Ev();
extern void _ZN6S698C53v63Ev();
extern void _ZN6S698C53v64Ev();
extern void _ZN6S698C53v65Ev();
extern void _ZN6S698C53v66Ev();
extern void _ZN6S698C53v67Ev();
extern void _ZN6S698C53v68Ev();
extern void _ZN6S698C53v69Ev();
extern void _ZN6S698C53v70Ev();
extern void _ZN6S698C43v71Ev();
extern void _ZN6S698C43v72Ev();
static  VTBL_ENTRY vtc_S698C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S698C4[0]),
  (VTBL_ENTRY)&_ZN6S698C4D1Ev,
  (VTBL_ENTRY)&_ZN6S698C4D0Ev,
  (VTBL_ENTRY)&_ZN6S698C52v7Ev,
  (VTBL_ENTRY)&_ZN6S698C52v8Ev,
  (VTBL_ENTRY)&_ZN6S698C52v9Ev,
  (VTBL_ENTRY)&_ZN6S698C53v10Ev,
  (VTBL_ENTRY)&_ZN6S698C53v11Ev,
  (VTBL_ENTRY)&_ZN6S698C53v12Ev,
  (VTBL_ENTRY)&_ZN6S698C53v13Ev,
  (VTBL_ENTRY)&_ZN6S698C53v14Ev,
  (VTBL_ENTRY)&_ZN6S698C53v15Ev,
  (VTBL_ENTRY)&_ZN6S698C53v16Ev,
  (VTBL_ENTRY)&_ZN6S698C53v17Ev,
  (VTBL_ENTRY)&_ZN6S698C53v18Ev,
  (VTBL_ENTRY)&_ZN6S698C53v19Ev,
  (VTBL_ENTRY)&_ZN6S698C53v20Ev,
  (VTBL_ENTRY)&_ZN6S698C53v21Ev,
  (VTBL_ENTRY)&_ZN6S698C53v22Ev,
  (VTBL_ENTRY)&_ZN6S698C53v23Ev,
  (VTBL_ENTRY)&_ZN6S698C53v24Ev,
  (VTBL_ENTRY)&_ZN6S698C53v25Ev,
  (VTBL_ENTRY)&_ZN6S698C53v26Ev,
  (VTBL_ENTRY)&_ZN6S698C53v27Ev,
  (VTBL_ENTRY)&_ZN6S698C53v28Ev,
  (VTBL_ENTRY)&_ZN6S698C53v29Ev,
  (VTBL_ENTRY)&_ZN6S698C53v30Ev,
  (VTBL_ENTRY)&_ZN6S698C53v31Ev,
  (VTBL_ENTRY)&_ZN6S698C53v32Ev,
  (VTBL_ENTRY)&_ZN6S698C53v33Ev,
  (VTBL_ENTRY)&_ZN6S698C53v34Ev,
  (VTBL_ENTRY)&_ZN6S698C53v35Ev,
  (VTBL_ENTRY)&_ZN6S698C53v36Ev,
  (VTBL_ENTRY)&_ZN6S698C53v37Ev,
  (VTBL_ENTRY)&_ZN6S698C53v38Ev,
  (VTBL_ENTRY)&_ZN6S698C53v39Ev,
  (VTBL_ENTRY)&_ZN6S698C53v40Ev,
  (VTBL_ENTRY)&_ZN6S698C53v41Ev,
  (VTBL_ENTRY)&_ZN6S698C53v42Ev,
  (VTBL_ENTRY)&_ZN6S698C53v43Ev,
  (VTBL_ENTRY)&_ZN6S698C53v44Ev,
  (VTBL_ENTRY)&_ZN6S698C53v45Ev,
  (VTBL_ENTRY)&_ZN6S698C53v46Ev,
  (VTBL_ENTRY)&_ZN6S698C53v47Ev,
  (VTBL_ENTRY)&_ZN6S698C53v48Ev,
  (VTBL_ENTRY)&_ZN6S698C53v49Ev,
  (VTBL_ENTRY)&_ZN6S698C53v50Ev,
  (VTBL_ENTRY)&_ZN6S698C53v51Ev,
  (VTBL_ENTRY)&_ZN6S698C53v52Ev,
  (VTBL_ENTRY)&_ZN6S698C53v53Ev,
  (VTBL_ENTRY)&_ZN6S698C53v54Ev,
  (VTBL_ENTRY)&_ZN6S698C53v55Ev,
  (VTBL_ENTRY)&_ZN6S698C53v56Ev,
  (VTBL_ENTRY)&_ZN6S698C53v57Ev,
  (VTBL_ENTRY)&_ZN6S698C53v58Ev,
  (VTBL_ENTRY)&_ZN6S698C53v59Ev,
  (VTBL_ENTRY)&_ZN6S698C53v60Ev,
  (VTBL_ENTRY)&_ZN6S698C53v61Ev,
  (VTBL_ENTRY)&_ZN6S698C53v62Ev,
  (VTBL_ENTRY)&_ZN6S698C53v63Ev,
  (VTBL_ENTRY)&_ZN6S698C53v64Ev,
  (VTBL_ENTRY)&_ZN6S698C53v65Ev,
  (VTBL_ENTRY)&_ZN6S698C53v66Ev,
  (VTBL_ENTRY)&_ZN6S698C53v67Ev,
  (VTBL_ENTRY)&_ZN6S698C53v68Ev,
  (VTBL_ENTRY)&_ZN6S698C53v69Ev,
  (VTBL_ENTRY)&_ZN6S698C53v70Ev,
  (VTBL_ENTRY)&_ZN6S698C43v71Ev,
  (VTBL_ENTRY)&_ZN6S698C43v72Ev,
};
extern VTBL_ENTRY _ZTI6S698C4[];
extern  VTBL_ENTRY _ZTV6S698C4[];
Class_Descriptor cd_S698C4 = {  "S698C4", // class name
  bases_S698C4, 1,
  &(vtc_S698C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI6S698C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S698C4),70, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S698C3  : S698C4 {
  char s698c3f0;
  ::S3352C17 s698c3f1;
  ::S87C12_nt s698c3f2;
  virtual  ~S698C3(); // _ZN6S698C3D1Ev
  virtual void  v73(); // _ZN6S698C33v73Ev
  virtual void  v74(); // _ZN6S698C33v74Ev
  virtual void  v75(); // _ZN6S698C33v75Ev
  virtual void  v76(); // _ZN6S698C33v76Ev
  virtual void  v77(); // _ZN6S698C33v77Ev
  virtual void  v78(); // _ZN6S698C33v78Ev
  virtual void  v79(); // _ZN6S698C33v79Ev
  virtual void  v80(); // _ZN6S698C33v80Ev
  virtual void  v81(); // _ZN6S698C33v81Ev
  virtual void  v82(); // _ZN6S698C33v82Ev
  virtual void  v83(); // _ZN6S698C33v83Ev
  virtual void  v84(); // _ZN6S698C33v84Ev
  S698C3(); // tgen
};
//SIG(-1 S698C3) C1{ BC2{ BC3{ vd v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v77 v78} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 Fc FC5{ BC6{ BC7{ m Fp Fi[2]}}} FC8{ m Fp FC4}}


 S698C3 ::~S698C3(){ note_dtor("S698C3", this);}
void  S698C3 ::v73(){vfunc_called(this, "_ZN6S698C33v73Ev");}
void  S698C3 ::v74(){vfunc_called(this, "_ZN6S698C33v74Ev");}
void  S698C3 ::v75(){vfunc_called(this, "_ZN6S698C33v75Ev");}
void  S698C3 ::v76(){vfunc_called(this, "_ZN6S698C33v76Ev");}
void  S698C3 ::v77(){vfunc_called(this, "_ZN6S698C33v77Ev");}
void  S698C3 ::v78(){vfunc_called(this, "_ZN6S698C33v78Ev");}
void  S698C3 ::v79(){vfunc_called(this, "_ZN6S698C33v79Ev");}
void  S698C3 ::v80(){vfunc_called(this, "_ZN6S698C33v80Ev");}
void  S698C3 ::v81(){vfunc_called(this, "_ZN6S698C33v81Ev");}
void  S698C3 ::v82(){vfunc_called(this, "_ZN6S698C33v82Ev");}
void  S698C3 ::v83(){vfunc_called(this, "_ZN6S698C33v83Ev");}
void  S698C3 ::v84(){vfunc_called(this, "_ZN6S698C33v84Ev");}
S698C3 ::S698C3(){ note_ctor("S698C3", this);} // tgen

static void Test_S698C3()
{
  extern Class_Descriptor cd_S698C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,23)];
    init_test(&cd_S698C3, buf);
    S698C3 *dp, &lv = *(dp=new (buf) S698C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,88), "sizeof(S698C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S698C3)");
    check_base_class_offset(lv, (S698C5*)(S698C4*), 0, "S698C3");
    check_base_class_offset(lv, (S698C4*), 0, "S698C3");
    check_field_offset(lv, s698c3f0, ABISELECT(96,60), "S698C3.s698c3f0");
    check_field_offset(lv, s698c3f1, ABISELECT(104,64), "S698C3.s698c3f1");
    check_field_offset(lv, s698c3f2, ABISELECT(120,76), "S698C3.s698c3f2");
    test_class_info(&lv, &cd_S698C3);
    dp->~S698C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS698C3(Test_S698C3, "S698C3", ABISELECT(136,88));

#else // __cplusplus

extern void _ZN6S698C3C1Ev();
extern void _ZN6S698C3D1Ev();
Name_Map name_map_S698C3[] = {
  NSPAIR(_ZN6S698C3C1Ev),
  NSPAIR(_ZN6S698C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S698C5;
extern VTBL_ENTRY _ZTI6S698C5[];
extern  VTBL_ENTRY _ZTV6S698C5[];
extern Class_Descriptor cd_S698C4;
extern VTBL_ENTRY _ZTI6S698C4[];
extern  VTBL_ENTRY _ZTV6S698C4[];
static Base_Class bases_S698C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S698C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S698C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S698C3[];
extern void _ZN6S698C3D1Ev();
extern void _ZN6S698C3D0Ev();
extern void _ZN6S698C52v7Ev();
extern void _ZN6S698C52v8Ev();
extern void _ZN6S698C52v9Ev();
extern void _ZN6S698C53v10Ev();
extern void _ZN6S698C53v11Ev();
extern void _ZN6S698C53v12Ev();
extern void _ZN6S698C53v13Ev();
extern void _ZN6S698C53v14Ev();
extern void _ZN6S698C53v15Ev();
extern void _ZN6S698C53v16Ev();
extern void _ZN6S698C53v17Ev();
extern void _ZN6S698C53v18Ev();
extern void _ZN6S698C53v19Ev();
extern void _ZN6S698C53v20Ev();
extern void _ZN6S698C53v21Ev();
extern void _ZN6S698C53v22Ev();
extern void _ZN6S698C53v23Ev();
extern void _ZN6S698C53v24Ev();
extern void _ZN6S698C53v25Ev();
extern void _ZN6S698C53v26Ev();
extern void _ZN6S698C53v27Ev();
extern void _ZN6S698C53v28Ev();
extern void _ZN6S698C53v29Ev();
extern void _ZN6S698C53v30Ev();
extern void _ZN6S698C53v31Ev();
extern void _ZN6S698C53v32Ev();
extern void _ZN6S698C53v33Ev();
extern void _ZN6S698C53v34Ev();
extern void _ZN6S698C53v35Ev();
extern void _ZN6S698C53v36Ev();
extern void _ZN6S698C53v37Ev();
extern void _ZN6S698C53v38Ev();
extern void _ZN6S698C53v39Ev();
extern void _ZN6S698C53v40Ev();
extern void _ZN6S698C53v41Ev();
extern void _ZN6S698C53v42Ev();
extern void _ZN6S698C53v43Ev();
extern void _ZN6S698C53v44Ev();
extern void _ZN6S698C53v45Ev();
extern void _ZN6S698C53v46Ev();
extern void _ZN6S698C53v47Ev();
extern void _ZN6S698C53v48Ev();
extern void _ZN6S698C53v49Ev();
extern void _ZN6S698C53v50Ev();
extern void _ZN6S698C53v51Ev();
extern void _ZN6S698C53v52Ev();
extern void _ZN6S698C53v53Ev();
extern void _ZN6S698C53v54Ev();
extern void _ZN6S698C53v55Ev();
extern void _ZN6S698C53v56Ev();
extern void _ZN6S698C53v57Ev();
extern void _ZN6S698C53v58Ev();
extern void _ZN6S698C53v59Ev();
extern void _ZN6S698C53v60Ev();
extern void _ZN6S698C53v61Ev();
extern void _ZN6S698C53v62Ev();
extern void _ZN6S698C53v63Ev();
extern void _ZN6S698C53v64Ev();
extern void _ZN6S698C53v65Ev();
extern void _ZN6S698C53v66Ev();
extern void _ZN6S698C53v67Ev();
extern void _ZN6S698C53v68Ev();
extern void _ZN6S698C53v69Ev();
extern void _ZN6S698C53v70Ev();
extern void _ZN6S698C43v71Ev();
extern void _ZN6S698C43v72Ev();
extern void _ZN6S698C33v73Ev();
extern void _ZN6S698C33v74Ev();
extern void _ZN6S698C33v75Ev();
extern void _ZN6S698C33v76Ev();
extern void _ZN6S698C33v77Ev();
extern void _ZN6S698C33v78Ev();
extern void _ZN6S698C33v79Ev();
extern void _ZN6S698C33v80Ev();
extern void _ZN6S698C33v81Ev();
extern void _ZN6S698C33v82Ev();
extern void _ZN6S698C33v83Ev();
extern void _ZN6S698C33v84Ev();
static  VTBL_ENTRY vtc_S698C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S698C3[0]),
  (VTBL_ENTRY)&_ZN6S698C3D1Ev,
  (VTBL_ENTRY)&_ZN6S698C3D0Ev,
  (VTBL_ENTRY)&_ZN6S698C52v7Ev,
  (VTBL_ENTRY)&_ZN6S698C52v8Ev,
  (VTBL_ENTRY)&_ZN6S698C52v9Ev,
  (VTBL_ENTRY)&_ZN6S698C53v10Ev,
  (VTBL_ENTRY)&_ZN6S698C53v11Ev,
  (VTBL_ENTRY)&_ZN6S698C53v12Ev,
  (VTBL_ENTRY)&_ZN6S698C53v13Ev,
  (VTBL_ENTRY)&_ZN6S698C53v14Ev,
  (VTBL_ENTRY)&_ZN6S698C53v15Ev,
  (VTBL_ENTRY)&_ZN6S698C53v16Ev,
  (VTBL_ENTRY)&_ZN6S698C53v17Ev,
  (VTBL_ENTRY)&_ZN6S698C53v18Ev,
  (VTBL_ENTRY)&_ZN6S698C53v19Ev,
  (VTBL_ENTRY)&_ZN6S698C53v20Ev,
  (VTBL_ENTRY)&_ZN6S698C53v21Ev,
  (VTBL_ENTRY)&_ZN6S698C53v22Ev,
  (VTBL_ENTRY)&_ZN6S698C53v23Ev,
  (VTBL_ENTRY)&_ZN6S698C53v24Ev,
  (VTBL_ENTRY)&_ZN6S698C53v25Ev,
  (VTBL_ENTRY)&_ZN6S698C53v26Ev,
  (VTBL_ENTRY)&_ZN6S698C53v27Ev,
  (VTBL_ENTRY)&_ZN6S698C53v28Ev,
  (VTBL_ENTRY)&_ZN6S698C53v29Ev,
  (VTBL_ENTRY)&_ZN6S698C53v30Ev,
  (VTBL_ENTRY)&_ZN6S698C53v31Ev,
  (VTBL_ENTRY)&_ZN6S698C53v32Ev,
  (VTBL_ENTRY)&_ZN6S698C53v33Ev,
  (VTBL_ENTRY)&_ZN6S698C53v34Ev,
  (VTBL_ENTRY)&_ZN6S698C53v35Ev,
  (VTBL_ENTRY)&_ZN6S698C53v36Ev,
  (VTBL_ENTRY)&_ZN6S698C53v37Ev,
  (VTBL_ENTRY)&_ZN6S698C53v38Ev,
  (VTBL_ENTRY)&_ZN6S698C53v39Ev,
  (VTBL_ENTRY)&_ZN6S698C53v40Ev,
  (VTBL_ENTRY)&_ZN6S698C53v41Ev,
  (VTBL_ENTRY)&_ZN6S698C53v42Ev,
  (VTBL_ENTRY)&_ZN6S698C53v43Ev,
  (VTBL_ENTRY)&_ZN6S698C53v44Ev,
  (VTBL_ENTRY)&_ZN6S698C53v45Ev,
  (VTBL_ENTRY)&_ZN6S698C53v46Ev,
  (VTBL_ENTRY)&_ZN6S698C53v47Ev,
  (VTBL_ENTRY)&_ZN6S698C53v48Ev,
  (VTBL_ENTRY)&_ZN6S698C53v49Ev,
  (VTBL_ENTRY)&_ZN6S698C53v50Ev,
  (VTBL_ENTRY)&_ZN6S698C53v51Ev,
  (VTBL_ENTRY)&_ZN6S698C53v52Ev,
  (VTBL_ENTRY)&_ZN6S698C53v53Ev,
  (VTBL_ENTRY)&_ZN6S698C53v54Ev,
  (VTBL_ENTRY)&_ZN6S698C53v55Ev,
  (VTBL_ENTRY)&_ZN6S698C53v56Ev,
  (VTBL_ENTRY)&_ZN6S698C53v57Ev,
  (VTBL_ENTRY)&_ZN6S698C53v58Ev,
  (VTBL_ENTRY)&_ZN6S698C53v59Ev,
  (VTBL_ENTRY)&_ZN6S698C53v60Ev,
  (VTBL_ENTRY)&_ZN6S698C53v61Ev,
  (VTBL_ENTRY)&_ZN6S698C53v62Ev,
  (VTBL_ENTRY)&_ZN6S698C53v63Ev,
  (VTBL_ENTRY)&_ZN6S698C53v64Ev,
  (VTBL_ENTRY)&_ZN6S698C53v65Ev,
  (VTBL_ENTRY)&_ZN6S698C53v66Ev,
  (VTBL_ENTRY)&_ZN6S698C53v67Ev,
  (VTBL_ENTRY)&_ZN6S698C53v68Ev,
  (VTBL_ENTRY)&_ZN6S698C53v69Ev,
  (VTBL_ENTRY)&_ZN6S698C53v70Ev,
  (VTBL_ENTRY)&_ZN6S698C43v71Ev,
  (VTBL_ENTRY)&_ZN6S698C43v72Ev,
  (VTBL_ENTRY)&_ZN6S698C33v73Ev,
  (VTBL_ENTRY)&_ZN6S698C33v74Ev,
  (VTBL_ENTRY)&_ZN6S698C33v75Ev,
  (VTBL_ENTRY)&_ZN6S698C33v76Ev,
  (VTBL_ENTRY)&_ZN6S698C33v77Ev,
  (VTBL_ENTRY)&_ZN6S698C33v78Ev,
  (VTBL_ENTRY)&_ZN6S698C33v79Ev,
  (VTBL_ENTRY)&_ZN6S698C33v80Ev,
  (VTBL_ENTRY)&_ZN6S698C33v81Ev,
  (VTBL_ENTRY)&_ZN6S698C33v82Ev,
  (VTBL_ENTRY)&_ZN6S698C33v83Ev,
  (VTBL_ENTRY)&_ZN6S698C33v84Ev,
};
extern VTBL_ENTRY _ZTI6S698C3[];
extern  VTBL_ENTRY _ZTV6S698C3[];
Class_Descriptor cd_S698C3 = {  "S698C3", // class name
  bases_S698C3, 2,
  &(vtc_S698C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(136,88), // object size
  NSPAIRA(_ZTI6S698C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S698C3),82, //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  S698C11  {
  virtual  ~S698C11(); // _ZN7S698C11D1Ev
  virtual void  v85(); // _ZN7S698C113v85Ev
  virtual void  v86(); // _ZN7S698C113v86Ev
  virtual void  v87(); // _ZN7S698C113v87Ev
  virtual void  v88(); // _ZN7S698C113v88Ev
  S698C11(); // tgen
};
//SIG(-1 S698C11) C1{ vd v1 v2 v3 v4}


 S698C11 ::~S698C11(){ note_dtor("S698C11", this);}
void  S698C11 ::v85(){vfunc_called(this, "_ZN7S698C113v85Ev");}
void  S698C11 ::v86(){vfunc_called(this, "_ZN7S698C113v86Ev");}
void  S698C11 ::v87(){vfunc_called(this, "_ZN7S698C113v87Ev");}
void  S698C11 ::v88(){vfunc_called(this, "_ZN7S698C113v88Ev");}
S698C11 ::S698C11(){ note_ctor("S698C11", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S698C11C1Ev();
extern void _ZN7S698C11D1Ev();
Name_Map name_map_S698C11[] = {
  NSPAIR(_ZN7S698C11C1Ev),
  NSPAIR(_ZN7S698C11D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S698C11[];
extern void _ZN7S698C11D1Ev();
extern void _ZN7S698C11D0Ev();
extern void _ZN7S698C113v85Ev();
extern void _ZN7S698C113v86Ev();
extern void _ZN7S698C113v87Ev();
extern void _ZN7S698C113v88Ev();
static  VTBL_ENTRY vtc_S698C11[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S698C11[0]),
  (VTBL_ENTRY)&_ZN7S698C11D1Ev,
  (VTBL_ENTRY)&_ZN7S698C11D0Ev,
  (VTBL_ENTRY)&_ZN7S698C113v85Ev,
  (VTBL_ENTRY)&_ZN7S698C113v86Ev,
  (VTBL_ENTRY)&_ZN7S698C113v87Ev,
  (VTBL_ENTRY)&_ZN7S698C113v88Ev,
};
extern VTBL_ENTRY _ZTI7S698C11[];
extern  VTBL_ENTRY _ZTV7S698C11[];
Class_Descriptor cd_S698C11 = {  "S698C11", // class name
  0,0,//no base classes
  &(vtc_S698C11[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S698C11),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S698C11),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S698C2  : S698C3 , S698C11 {
  virtual  ~S698C2(); // _ZN6S698C2D1Ev
  virtual void  v89(); // _ZN6S698C23v89Ev
  virtual void  v90(); // _ZN6S698C23v90Ev
  virtual void  v91(); // _ZN6S698C23v91Ev
  virtual void  v92(); // _ZN6S698C23v92Ev
  virtual void  v93(); // _ZN6S698C23v93Ev
  virtual void  v94(); // _ZN6S698C23v94Ev
  virtual void  v95(); // _ZN6S698C23v95Ev
  virtual void  v96(); // _ZN6S698C23v96Ev
  virtual void  v97(); // _ZN6S698C23v97Ev
  virtual void  v98(); // _ZN6S698C23v98Ev
  S698C2(); // tgen
};
//SIG(-1 S698C2) C1{ BC2{ BC3{ BC4{ vd 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 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v75 v76} vd v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 Fc FC6{ BC7{ BC8{ m Fp Fi[2]}}} FC9{ m Fp FC5}} BC10{ vd v89 v90 v91 v92} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10}


 S698C2 ::~S698C2(){ note_dtor("S698C2", this);}
void  S698C2 ::v89(){vfunc_called(this, "_ZN6S698C23v89Ev");}
void  S698C2 ::v90(){vfunc_called(this, "_ZN6S698C23v90Ev");}
void  S698C2 ::v91(){vfunc_called(this, "_ZN6S698C23v91Ev");}
void  S698C2 ::v92(){vfunc_called(this, "_ZN6S698C23v92Ev");}
void  S698C2 ::v93(){vfunc_called(this, "_ZN6S698C23v93Ev");}
void  S698C2 ::v94(){vfunc_called(this, "_ZN6S698C23v94Ev");}
void  S698C2 ::v95(){vfunc_called(this, "_ZN6S698C23v95Ev");}
void  S698C2 ::v96(){vfunc_called(this, "_ZN6S698C23v96Ev");}
void  S698C2 ::v97(){vfunc_called(this, "_ZN6S698C23v97Ev");}
void  S698C2 ::v98(){vfunc_called(this, "_ZN6S698C23v98Ev");}
S698C2 ::S698C2(){ note_ctor("S698C2", this);} // tgen

static void Test_S698C2()
{
  extern Class_Descriptor cd_S698C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(19,24)];
    init_test(&cd_S698C2, buf);
    S698C2 *dp, &lv = *(dp=new (buf) S698C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,92), "sizeof(S698C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S698C2)");
    check_base_class_offset(lv, (S698C5*)(S698C4*)(S698C3*), 0, "S698C2");
    check_base_class_offset(lv, (S698C4*)(S698C3*), 0, "S698C2");
    check_base_class_offset(lv, (S698C3*), 0, "S698C2");
    check_base_class_offset(lv, (S698C11*), ABISELECT(136,88), "S698C2");
    test_class_info(&lv, &cd_S698C2);
    dp->~S698C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS698C2(Test_S698C2, "S698C2", ABISELECT(144,92));

#else // __cplusplus

extern void _ZN6S698C2C1Ev();
extern void _ZN6S698C2D1Ev();
Name_Map name_map_S698C2[] = {
  NSPAIR(_ZN6S698C2C1Ev),
  NSPAIR(_ZN6S698C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S698C5;
extern VTBL_ENTRY _ZTI6S698C5[];
extern  VTBL_ENTRY _ZTV6S698C5[];
extern Class_Descriptor cd_S698C4;
extern VTBL_ENTRY _ZTI6S698C4[];
extern  VTBL_ENTRY _ZTV6S698C4[];
extern Class_Descriptor cd_S698C3;
extern VTBL_ENTRY _ZTI6S698C3[];
extern  VTBL_ENTRY _ZTV6S698C3[];
extern Class_Descriptor cd_S698C11;
extern VTBL_ENTRY _ZTI7S698C11[];
extern  VTBL_ENTRY _ZTV7S698C11[];
static Base_Class bases_S698C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S698C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S698C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S698C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S698C11,    ABISELECT(136,88), //bcp->offset
    92, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S698C2[];
extern void _ZN6S698C2D1Ev();
extern void _ZN6S698C2D0Ev();
extern void _ZN6S698C52v7Ev();
extern void _ZN6S698C52v8Ev();
extern void _ZN6S698C52v9Ev();
extern void _ZN6S698C53v10Ev();
extern void _ZN6S698C53v11Ev();
extern void _ZN6S698C53v12Ev();
extern void _ZN6S698C53v13Ev();
extern void _ZN6S698C53v14Ev();
extern void _ZN6S698C53v15Ev();
extern void _ZN6S698C53v16Ev();
extern void _ZN6S698C53v17Ev();
extern void _ZN6S698C53v18Ev();
extern void _ZN6S698C53v19Ev();
extern void _ZN6S698C53v20Ev();
extern void _ZN6S698C53v21Ev();
extern void _ZN6S698C53v22Ev();
extern void _ZN6S698C53v23Ev();
extern void _ZN6S698C53v24Ev();
extern void _ZN6S698C53v25Ev();
extern void _ZN6S698C53v26Ev();
extern void _ZN6S698C53v27Ev();
extern void _ZN6S698C53v28Ev();
extern void _ZN6S698C53v29Ev();
extern void _ZN6S698C53v30Ev();
extern void _ZN6S698C53v31Ev();
extern void _ZN6S698C53v32Ev();
extern void _ZN6S698C53v33Ev();
extern void _ZN6S698C53v34Ev();
extern void _ZN6S698C53v35Ev();
extern void _ZN6S698C53v36Ev();
extern void _ZN6S698C53v37Ev();
extern void _ZN6S698C53v38Ev();
extern void _ZN6S698C53v39Ev();
extern void _ZN6S698C53v40Ev();
extern void _ZN6S698C53v41Ev();
extern void _ZN6S698C53v42Ev();
extern void _ZN6S698C53v43Ev();
extern void _ZN6S698C53v44Ev();
extern void _ZN6S698C53v45Ev();
extern void _ZN6S698C53v46Ev();
extern void _ZN6S698C53v47Ev();
extern void _ZN6S698C53v48Ev();
extern void _ZN6S698C53v49Ev();
extern void _ZN6S698C53v50Ev();
extern void _ZN6S698C53v51Ev();
extern void _ZN6S698C53v52Ev();
extern void _ZN6S698C53v53Ev();
extern void _ZN6S698C53v54Ev();
extern void _ZN6S698C53v55Ev();
extern void _ZN6S698C53v56Ev();
extern void _ZN6S698C53v57Ev();
extern void _ZN6S698C53v58Ev();
extern void _ZN6S698C53v59Ev();
extern void _ZN6S698C53v60Ev();
extern void _ZN6S698C53v61Ev();
extern void _ZN6S698C53v62Ev();
extern void _ZN6S698C53v63Ev();
extern void _ZN6S698C53v64Ev();
extern void _ZN6S698C53v65Ev();
extern void _ZN6S698C53v66Ev();
extern void _ZN6S698C53v67Ev();
extern void _ZN6S698C53v68Ev();
extern void _ZN6S698C53v69Ev();
extern void _ZN6S698C53v70Ev();
extern void _ZN6S698C43v71Ev();
extern void _ZN6S698C43v72Ev();
extern void _ZN6S698C33v73Ev();
extern void _ZN6S698C33v74Ev();
extern void _ZN6S698C33v75Ev();
extern void _ZN6S698C33v76Ev();
extern void _ZN6S698C33v77Ev();
extern void _ZN6S698C33v78Ev();
extern void _ZN6S698C33v79Ev();
extern void _ZN6S698C33v80Ev();
extern void _ZN6S698C33v81Ev();
extern void _ZN6S698C33v82Ev();
extern void _ZN6S698C33v83Ev();
extern void _ZN6S698C33v84Ev();
extern void _ZN6S698C23v89Ev();
extern void _ZN6S698C23v90Ev();
extern void _ZN6S698C23v91Ev();
extern void _ZN6S698C23v92Ev();
extern void _ZN6S698C23v93Ev();
extern void _ZN6S698C23v94Ev();
extern void _ZN6S698C23v95Ev();
extern void _ZN6S698C23v96Ev();
extern void _ZN6S698C23v97Ev();
extern void _ZN6S698C23v98Ev();
extern void ABISELECT(_ZThn136_N6S698C2D1Ev,_ZThn88_N6S698C2D1Ev)();
extern void ABISELECT(_ZThn136_N6S698C2D0Ev,_ZThn88_N6S698C2D0Ev)();
extern void _ZN7S698C113v85Ev();
extern void _ZN7S698C113v86Ev();
extern void _ZN7S698C113v87Ev();
extern void _ZN7S698C113v88Ev();
static  VTBL_ENTRY vtc_S698C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S698C2[0]),
  (VTBL_ENTRY)&_ZN6S698C2D1Ev,
  (VTBL_ENTRY)&_ZN6S698C2D0Ev,
  (VTBL_ENTRY)&_ZN6S698C52v7Ev,
  (VTBL_ENTRY)&_ZN6S698C52v8Ev,
  (VTBL_ENTRY)&_ZN6S698C52v9Ev,
  (VTBL_ENTRY)&_ZN6S698C53v10Ev,
  (VTBL_ENTRY)&_ZN6S698C53v11Ev,
  (VTBL_ENTRY)&_ZN6S698C53v12Ev,
  (VTBL_ENTRY)&_ZN6S698C53v13Ev,
  (VTBL_ENTRY)&_ZN6S698C53v14Ev,
  (VTBL_ENTRY)&_ZN6S698C53v15Ev,
  (VTBL_ENTRY)&_ZN6S698C53v16Ev,
  (VTBL_ENTRY)&_ZN6S698C53v17Ev,
  (VTBL_ENTRY)&_ZN6S698C53v18Ev,
  (VTBL_ENTRY)&_ZN6S698C53v19Ev,
  (VTBL_ENTRY)&_ZN6S698C53v20Ev,
  (VTBL_ENTRY)&_ZN6S698C53v21Ev,
  (VTBL_ENTRY)&_ZN6S698C53v22Ev,
  (VTBL_ENTRY)&_ZN6S698C53v23Ev,
  (VTBL_ENTRY)&_ZN6S698C53v24Ev,
  (VTBL_ENTRY)&_ZN6S698C53v25Ev,
  (VTBL_ENTRY)&_ZN6S698C53v26Ev,
  (VTBL_ENTRY)&_ZN6S698C53v27Ev,
  (VTBL_ENTRY)&_ZN6S698C53v28Ev,
  (VTBL_ENTRY)&_ZN6S698C53v29Ev,
  (VTBL_ENTRY)&_ZN6S698C53v30Ev,
  (VTBL_ENTRY)&_ZN6S698C53v31Ev,
  (VTBL_ENTRY)&_ZN6S698C53v32Ev,
  (VTBL_ENTRY)&_ZN6S698C53v33Ev,
  (VTBL_ENTRY)&_ZN6S698C53v34Ev,
  (VTBL_ENTRY)&_ZN6S698C53v35Ev,
  (VTBL_ENTRY)&_ZN6S698C53v36Ev,
  (VTBL_ENTRY)&_ZN6S698C53v37Ev,
  (VTBL_ENTRY)&_ZN6S698C53v38Ev,
  (VTBL_ENTRY)&_ZN6S698C53v39Ev,
  (VTBL_ENTRY)&_ZN6S698C53v40Ev,
  (VTBL_ENTRY)&_ZN6S698C53v41Ev,
  (VTBL_ENTRY)&_ZN6S698C53v42Ev,
  (VTBL_ENTRY)&_ZN6S698C53v43Ev,
  (VTBL_ENTRY)&_ZN6S698C53v44Ev,
  (VTBL_ENTRY)&_ZN6S698C53v45Ev,
  (VTBL_ENTRY)&_ZN6S698C53v46Ev,
  (VTBL_ENTRY)&_ZN6S698C53v47Ev,
  (VTBL_ENTRY)&_ZN6S698C53v48Ev,
  (VTBL_ENTRY)&_ZN6S698C53v49Ev,
  (VTBL_ENTRY)&_ZN6S698C53v50Ev,
  (VTBL_ENTRY)&_ZN6S698C53v51Ev,
  (VTBL_ENTRY)&_ZN6S698C53v52Ev,
  (VTBL_ENTRY)&_ZN6S698C53v53Ev,
  (VTBL_ENTRY)&_ZN6S698C53v54Ev,
  (VTBL_ENTRY)&_ZN6S698C53v55Ev,
  (VTBL_ENTRY)&_ZN6S698C53v56Ev,
  (VTBL_ENTRY)&_ZN6S698C53v57Ev,
  (VTBL_ENTRY)&_ZN6S698C53v58Ev,
  (VTBL_ENTRY)&_ZN6S698C53v59Ev,
  (VTBL_ENTRY)&_ZN6S698C53v60Ev,
  (VTBL_ENTRY)&_ZN6S698C53v61Ev,
  (VTBL_ENTRY)&_ZN6S698C53v62Ev,
  (VTBL_ENTRY)&_ZN6S698C53v63Ev,
  (VTBL_ENTRY)&_ZN6S698C53v64Ev,
  (VTBL_ENTRY)&_ZN6S698C53v65Ev,
  (VTBL_ENTRY)&_ZN6S698C53v66Ev,
  (VTBL_ENTRY)&_ZN6S698C53v67Ev,
  (VTBL_ENTRY)&_ZN6S698C53v68Ev,
  (VTBL_ENTRY)&_ZN6S698C53v69Ev,
  (VTBL_ENTRY)&_ZN6S698C53v70Ev,
  (VTBL_ENTRY)&_ZN6S698C43v71Ev,
  (VTBL_ENTRY)&_ZN6S698C43v72Ev,
  (VTBL_ENTRY)&_ZN6S698C33v73Ev,
  (VTBL_ENTRY)&_ZN6S698C33v74Ev,
  (VTBL_ENTRY)&_ZN6S698C33v75Ev,
  (VTBL_ENTRY)&_ZN6S698C33v76Ev,
  (VTBL_ENTRY)&_ZN6S698C33v77Ev,
  (VTBL_ENTRY)&_ZN6S698C33v78Ev,
  (VTBL_ENTRY)&_ZN6S698C33v79Ev,
  (VTBL_ENTRY)&_ZN6S698C33v80Ev,
  (VTBL_ENTRY)&_ZN6S698C33v81Ev,
  (VTBL_ENTRY)&_ZN6S698C33v82Ev,
  (VTBL_ENTRY)&_ZN6S698C33v83Ev,
  (VTBL_ENTRY)&_ZN6S698C33v84Ev,
  (VTBL_ENTRY)&_ZN6S698C23v89Ev,
  (VTBL_ENTRY)&_ZN6S698C23v90Ev,
  (VTBL_ENTRY)&_ZN6S698C23v91Ev,
  (VTBL_ENTRY)&_ZN6S698C23v92Ev,
  (VTBL_ENTRY)&_ZN6S698C23v93Ev,
  (VTBL_ENTRY)&_ZN6S698C23v94Ev,
  (VTBL_ENTRY)&_ZN6S698C23v95Ev,
  (VTBL_ENTRY)&_ZN6S698C23v96Ev,
  (VTBL_ENTRY)&_ZN6S698C23v97Ev,
  (VTBL_ENTRY)&_ZN6S698C23v98Ev,
  ABISELECT(-136,-88),
  (VTBL_ENTRY)&(_ZTI6S698C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn136_N6S698C2D1Ev,_ZThn88_N6S698C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn136_N6S698C2D0Ev,_ZThn88_N6S698C2D0Ev),
  (VTBL_ENTRY)&_ZN7S698C113v85Ev,
  (VTBL_ENTRY)&_ZN7S698C113v86Ev,
  (VTBL_ENTRY)&_ZN7S698C113v87Ev,
  (VTBL_ENTRY)&_ZN7S698C113v88Ev,
};
extern VTBL_ENTRY _ZTI6S698C2[];
extern  VTBL_ENTRY _ZTV6S698C2[];
Class_Descriptor cd_S698C2 = {  "S698C2", // class name
  bases_S698C2, 4,
  &(vtc_S698C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(144,92), // object size
  NSPAIRA(_ZTI6S698C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV6S698C2),100, //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  S698C1  : S698C2 {
  ::S3352C11 s698c1f0;
  virtual  ~S698C1(); // _ZN6S698C1D1Ev
  virtual void  v1(); // _ZN6S698C12v1Ev
  virtual void  v2(); // _ZN6S698C12v2Ev
  virtual void  v3(); // _ZN6S698C12v3Ev
  virtual void  v4(); // _ZN6S698C12v4Ev
  virtual void  v5(); // _ZN6S698C12v5Ev
  virtual void  v6(); // _ZN6S698C12v6Ev
  S698C1(); // tgen
};
//SIG(1 S698C1) C1{ BC2{ BC3{ BC4{ BC5{ vd v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 Fi FL Fp[4] Fi[2] Fp FC6{ m Fi[2]} Fp[2]} vd v71 v72} vd v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 Fc FC7{ BC8{ BC9{ m Fp Fi[2]}}} FC10{ m Fp FC6}} BC11{ vd v85 v86 v87 v88} vd v89 v90 v91 v92 v93 v94 v95 v96 v97 v98} vd v1 v2 v3 v4 v5 v6 FC12{ BC13{ BC9}}}


 S698C1 ::~S698C1(){ note_dtor("S698C1", this);}
void  S698C1 ::v1(){vfunc_called(this, "_ZN6S698C12v1Ev");}
void  S698C1 ::v2(){vfunc_called(this, "_ZN6S698C12v2Ev");}
void  S698C1 ::v3(){vfunc_called(this, "_ZN6S698C12v3Ev");}
void  S698C1 ::v4(){vfunc_called(this, "_ZN6S698C12v4Ev");}
void  S698C1 ::v5(){vfunc_called(this, "_ZN6S698C12v5Ev");}
void  S698C1 ::v6(){vfunc_called(this, "_ZN6S698C12v6Ev");}
S698C1 ::S698C1(){ note_ctor("S698C1", this);} // tgen

static void Test_S698C1()
{
  extern Class_Descriptor cd_S698C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(21,27)];
    init_test(&cd_S698C1, buf);
    S698C1 *dp, &lv = *(dp=new (buf) S698C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,104), "sizeof(S698C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S698C1)");
    check_base_class_offset(lv, (S698C5*)(S698C4*)(S698C3*)(S698C2*), 0, "S698C1");
    check_base_class_offset(lv, (S698C4*)(S698C3*)(S698C2*), 0, "S698C1");
    check_base_class_offset(lv, (S698C3*)(S698C2*), 0, "S698C1");
    check_base_class_offset(lv, (S698C11*)(S698C2*), ABISELECT(136,88), "S698C1");
    check_base_class_offset(lv, (S698C2*), 0, "S698C1");
    check_field_offset(lv, s698c1f0, ABISELECT(144,92), "S698C1.s698c1f0");
    test_class_info(&lv, &cd_S698C1);
    dp->~S698C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS698C1(Test_S698C1, "S698C1", ABISELECT(160,104));

#else // __cplusplus

extern void _ZN6S698C1C1Ev();
extern void _ZN6S698C1D1Ev();
Name_Map name_map_S698C1[] = {
  NSPAIR(_ZN6S698C1C1Ev),
  NSPAIR(_ZN6S698C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S698C5;
extern VTBL_ENTRY _ZTI6S698C5[];
extern  VTBL_ENTRY _ZTV6S698C5[];
extern Class_Descriptor cd_S698C4;
extern VTBL_ENTRY _ZTI6S698C4[];
extern  VTBL_ENTRY _ZTV6S698C4[];
extern Class_Descriptor cd_S698C3;
extern VTBL_ENTRY _ZTI6S698C3[];
extern  VTBL_ENTRY _ZTV6S698C3[];
extern Class_Descriptor cd_S698C11;
extern VTBL_ENTRY _ZTI7S698C11[];
extern  VTBL_ENTRY _ZTV7S698C11[];
extern Class_Descriptor cd_S698C2;
extern VTBL_ENTRY _ZTI6S698C2[];
extern  VTBL_ENTRY _ZTV6S698C2[];
static Base_Class bases_S698C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S698C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S698C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S698C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S698C11,    ABISELECT(136,88), //bcp->offset
    98, //bcp->virtual_function_table_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_S698C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S698C1[];
extern void _ZN6S698C1D1Ev();
extern void _ZN6S698C1D0Ev();
extern void _ZN6S698C52v7Ev();
extern void _ZN6S698C52v8Ev();
extern void _ZN6S698C52v9Ev();
extern void _ZN6S698C53v10Ev();
extern void _ZN6S698C53v11Ev();
extern void _ZN6S698C53v12Ev();
extern void _ZN6S698C53v13Ev();
extern void _ZN6S698C53v14Ev();
extern void _ZN6S698C53v15Ev();
extern void _ZN6S698C53v16Ev();
extern void _ZN6S698C53v17Ev();
extern void _ZN6S698C53v18Ev();
extern void _ZN6S698C53v19Ev();
extern void _ZN6S698C53v20Ev();
extern void _ZN6S698C53v21Ev();
extern void _ZN6S698C53v22Ev();
extern void _ZN6S698C53v23Ev();
extern void _ZN6S698C53v24Ev();
extern void _ZN6S698C53v25Ev();
extern void _ZN6S698C53v26Ev();
extern void _ZN6S698C53v27Ev();
extern void _ZN6S698C53v28Ev();
extern void _ZN6S698C53v29Ev();
extern void _ZN6S698C53v30Ev();
extern void _ZN6S698C53v31Ev();
extern void _ZN6S698C53v32Ev();
extern void _ZN6S698C53v33Ev();
extern void _ZN6S698C53v34Ev();
extern void _ZN6S698C53v35Ev();
extern void _ZN6S698C53v36Ev();
extern void _ZN6S698C53v37Ev();
extern void _ZN6S698C53v38Ev();
extern void _ZN6S698C53v39Ev();
extern void _ZN6S698C53v40Ev();
extern void _ZN6S698C53v41Ev();
extern void _ZN6S698C53v42Ev();
extern void _ZN6S698C53v43Ev();
extern void _ZN6S698C53v44Ev();
extern void _ZN6S698C53v45Ev();
extern void _ZN6S698C53v46Ev();
extern void _ZN6S698C53v47Ev();
extern void _ZN6S698C53v48Ev();
extern void _ZN6S698C53v49Ev();
extern void _ZN6S698C53v50Ev();
extern void _ZN6S698C53v51Ev();
extern void _ZN6S698C53v52Ev();
extern void _ZN6S698C53v53Ev();
extern void _ZN6S698C53v54Ev();
extern void _ZN6S698C53v55Ev();
extern void _ZN6S698C53v56Ev();
extern void _ZN6S698C53v57Ev();
extern void _ZN6S698C53v58Ev();
extern void _ZN6S698C53v59Ev();
extern void _ZN6S698C53v60Ev();
extern void _ZN6S698C53v61Ev();
extern void _ZN6S698C53v62Ev();
extern void _ZN6S698C53v63Ev();
extern void _ZN6S698C53v64Ev();
extern void _ZN6S698C53v65Ev();
extern void _ZN6S698C53v66Ev();
extern void _ZN6S698C53v67Ev();
extern void _ZN6S698C53v68Ev();
extern void _ZN6S698C53v69Ev();
extern void _ZN6S698C53v70Ev();
extern void _ZN6S698C43v71Ev();
extern void _ZN6S698C43v72Ev();
extern void _ZN6S698C33v73Ev();
extern void _ZN6S698C33v74Ev();
extern void _ZN6S698C33v75Ev();
extern void _ZN6S698C33v76Ev();
extern void _ZN6S698C33v77Ev();
extern void _ZN6S698C33v78Ev();
extern void _ZN6S698C33v79Ev();
extern void _ZN6S698C33v80Ev();
extern void _ZN6S698C33v81Ev();
extern void _ZN6S698C33v82Ev();
extern void _ZN6S698C33v83Ev();
extern void _ZN6S698C33v84Ev();
extern void _ZN6S698C23v89Ev();
extern void _ZN6S698C23v90Ev();
extern void _ZN6S698C23v91Ev();
extern void _ZN6S698C23v92Ev();
extern void _ZN6S698C23v93Ev();
extern void _ZN6S698C23v94Ev();
extern void _ZN6S698C23v95Ev();
extern void _ZN6S698C23v96Ev();
extern void _ZN6S698C23v97Ev();
extern void _ZN6S698C23v98Ev();
extern void _ZN6S698C12v1Ev();
extern void _ZN6S698C12v2Ev();
extern void _ZN6S698C12v3Ev();
extern void _ZN6S698C12v4Ev();
extern void _ZN6S698C12v5Ev();
extern void _ZN6S698C12v6Ev();
extern void ABISELECT(_ZThn136_N6S698C1D1Ev,_ZThn88_N6S698C1D1Ev)();
extern void ABISELECT(_ZThn136_N6S698C1D0Ev,_ZThn88_N6S698C1D0Ev)();
extern void _ZN7S698C113v85Ev();
extern void _ZN7S698C113v86Ev();
extern void _ZN7S698C113v87Ev();
extern void _ZN7S698C113v88Ev();
static  VTBL_ENTRY vtc_S698C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S698C1[0]),
  (VTBL_ENTRY)&_ZN6S698C1D1Ev,
  (VTBL_ENTRY)&_ZN6S698C1D0Ev,
  (VTBL_ENTRY)&_ZN6S698C52v7Ev,
  (VTBL_ENTRY)&_ZN6S698C52v8Ev,
  (VTBL_ENTRY)&_ZN6S698C52v9Ev,
  (VTBL_ENTRY)&_ZN6S698C53v10Ev,
  (VTBL_ENTRY)&_ZN6S698C53v11Ev,
  (VTBL_ENTRY)&_ZN6S698C53v12Ev,
  (VTBL_ENTRY)&_ZN6S698C53v13Ev,
  (VTBL_ENTRY)&_ZN6S698C53v14Ev,
  (VTBL_ENTRY)&_ZN6S698C53v15Ev,
  (VTBL_ENTRY)&_ZN6S698C53v16Ev,
  (VTBL_ENTRY)&_ZN6S698C53v17Ev,
  (VTBL_ENTRY)&_ZN6S698C53v18Ev,
  (VTBL_ENTRY)&_ZN6S698C53v19Ev,
  (VTBL_ENTRY)&_ZN6S698C53v20Ev,
  (VTBL_ENTRY)&_ZN6S698C53v21Ev,
  (VTBL_ENTRY)&_ZN6S698C53v22Ev,
  (VTBL_ENTRY)&_ZN6S698C53v23Ev,
  (VTBL_ENTRY)&_ZN6S698C53v24Ev,
  (VTBL_ENTRY)&_ZN6S698C53v25Ev,
  (VTBL_ENTRY)&_ZN6S698C53v26Ev,
  (VTBL_ENTRY)&_ZN6S698C53v27Ev,
  (VTBL_ENTRY)&_ZN6S698C53v28Ev,
  (VTBL_ENTRY)&_ZN6S698C53v29Ev,
  (VTBL_ENTRY)&_ZN6S698C53v30Ev,
  (VTBL_ENTRY)&_ZN6S698C53v31Ev,
  (VTBL_ENTRY)&_ZN6S698C53v32Ev,
  (VTBL_ENTRY)&_ZN6S698C53v33Ev,
  (VTBL_ENTRY)&_ZN6S698C53v34Ev,
  (VTBL_ENTRY)&_ZN6S698C53v35Ev,
  (VTBL_ENTRY)&_ZN6S698C53v36Ev,
  (VTBL_ENTRY)&_ZN6S698C53v37Ev,
  (VTBL_ENTRY)&_ZN6S698C53v38Ev,
  (VTBL_ENTRY)&_ZN6S698C53v39Ev,
  (VTBL_ENTRY)&_ZN6S698C53v40Ev,
  (VTBL_ENTRY)&_ZN6S698C53v41Ev,
  (VTBL_ENTRY)&_ZN6S698C53v42Ev,
  (VTBL_ENTRY)&_ZN6S698C53v43Ev,
  (VTBL_ENTRY)&_ZN6S698C53v44Ev,
  (VTBL_ENTRY)&_ZN6S698C53v45Ev,
  (VTBL_ENTRY)&_ZN6S698C53v46Ev,
  (VTBL_ENTRY)&_ZN6S698C53v47Ev,
  (VTBL_ENTRY)&_ZN6S698C53v48Ev,
  (VTBL_ENTRY)&_ZN6S698C53v49Ev,
  (VTBL_ENTRY)&_ZN6S698C53v50Ev,
  (VTBL_ENTRY)&_ZN6S698C53v51Ev,
  (VTBL_ENTRY)&_ZN6S698C53v52Ev,
  (VTBL_ENTRY)&_ZN6S698C53v53Ev,
  (VTBL_ENTRY)&_ZN6S698C53v54Ev,
  (VTBL_ENTRY)&_ZN6S698C53v55Ev,
  (VTBL_ENTRY)&_ZN6S698C53v56Ev,
  (VTBL_ENTRY)&_ZN6S698C53v57Ev,
  (VTBL_ENTRY)&_ZN6S698C53v58Ev,
  (VTBL_ENTRY)&_ZN6S698C53v59Ev,
  (VTBL_ENTRY)&_ZN6S698C53v60Ev,
  (VTBL_ENTRY)&_ZN6S698C53v61Ev,
  (VTBL_ENTRY)&_ZN6S698C53v62Ev,
  (VTBL_ENTRY)&_ZN6S698C53v63Ev,
  (VTBL_ENTRY)&_ZN6S698C53v64Ev,
  (VTBL_ENTRY)&_ZN6S698C53v65Ev,
  (VTBL_ENTRY)&_ZN6S698C53v66Ev,
  (VTBL_ENTRY)&_ZN6S698C53v67Ev,
  (VTBL_ENTRY)&_ZN6S698C53v68Ev,
  (VTBL_ENTRY)&_ZN6S698C53v69Ev,
  (VTBL_ENTRY)&_ZN6S698C53v70Ev,
  (VTBL_ENTRY)&_ZN6S698C43v71Ev,
  (VTBL_ENTRY)&_ZN6S698C43v72Ev,
  (VTBL_ENTRY)&_ZN6S698C33v73Ev,
  (VTBL_ENTRY)&_ZN6S698C33v74Ev,
  (VTBL_ENTRY)&_ZN6S698C33v75Ev,
  (VTBL_ENTRY)&_ZN6S698C33v76Ev,
  (VTBL_ENTRY)&_ZN6S698C33v77Ev,
  (VTBL_ENTRY)&_ZN6S698C33v78Ev,
  (VTBL_ENTRY)&_ZN6S698C33v79Ev,
  (VTBL_ENTRY)&_ZN6S698C33v80Ev,
  (VTBL_ENTRY)&_ZN6S698C33v81Ev,
  (VTBL_ENTRY)&_ZN6S698C33v82Ev,
  (VTBL_ENTRY)&_ZN6S698C33v83Ev,
  (VTBL_ENTRY)&_ZN6S698C33v84Ev,
  (VTBL_ENTRY)&_ZN6S698C23v89Ev,
  (VTBL_ENTRY)&_ZN6S698C23v90Ev,
  (VTBL_ENTRY)&_ZN6S698C23v91Ev,
  (VTBL_ENTRY)&_ZN6S698C23v92Ev,
  (VTBL_ENTRY)&_ZN6S698C23v93Ev,
  (VTBL_ENTRY)&_ZN6S698C23v94Ev,
  (VTBL_ENTRY)&_ZN6S698C23v95Ev,
  (VTBL_ENTRY)&_ZN6S698C23v96Ev,
  (VTBL_ENTRY)&_ZN6S698C23v97Ev,
  (VTBL_ENTRY)&_ZN6S698C23v98Ev,
  (VTBL_ENTRY)&_ZN6S698C12v1Ev,
  (VTBL_ENTRY)&_ZN6S698C12v2Ev,
  (VTBL_ENTRY)&_ZN6S698C12v3Ev,
  (VTBL_ENTRY)&_ZN6S698C12v4Ev,
  (VTBL_ENTRY)&_ZN6S698C12v5Ev,
  (VTBL_ENTRY)&_ZN6S698C12v6Ev,
  ABISELECT(-136,-88),
  (VTBL_ENTRY)&(_ZTI6S698C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn136_N6S698C1D1Ev,_ZThn88_N6S698C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn136_N6S698C1D0Ev,_ZThn88_N6S698C1D0Ev),
  (VTBL_ENTRY)&_ZN7S698C113v85Ev,
  (VTBL_ENTRY)&_ZN7S698C113v86Ev,
  (VTBL_ENTRY)&_ZN7S698C113v87Ev,
  (VTBL_ENTRY)&_ZN7S698C113v88Ev,
};
extern VTBL_ENTRY _ZTI6S698C1[];
extern  VTBL_ENTRY _ZTV6S698C1[];
Class_Descriptor cd_S698C1 = {  "S698C1", // class name
  bases_S698C1, 5,
  &(vtc_S698C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(160,104), // object size
  NSPAIRA(_ZTI6S698C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S698C1),106, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  5, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S676C5  {
  int s676c5f0;
  __tsi64 s676c5f1;
  void *s676c5f2[4];
  int s676c5f3[2];
  void *s676c5f4;
  ::S3352C4_nt s676c5f5;
  void *s676c5f6[2];
  virtual  ~S676C5(); // _ZN6S676C5D1Ev
  virtual void  v6(); // _ZN6S676C52v6Ev
  virtual void  v7(); // _ZN6S676C52v7Ev
  virtual void  v8(); // _ZN6S676C52v8Ev
  virtual void  v9(); // _ZN6S676C52v9Ev
  virtual void  v10(); // _ZN6S676C53v10Ev
  virtual void  v11(); // _ZN6S676C53v11Ev
  virtual void  v12(); // _ZN6S676C53v12Ev
  virtual void  v13(); // _ZN6S676C53v13Ev
  virtual void  v14(); // _ZN6S676C53v14Ev
  virtual void  v15(); // _ZN6S676C53v15Ev
  virtual void  v16(); // _ZN6S676C53v16Ev
  virtual void  v17(); // _ZN6S676C53v17Ev
  virtual void  v18(); // _ZN6S676C53v18Ev
  virtual void  v19(); // _ZN6S676C53v19Ev
  virtual void  v20(); // _ZN6S676C53v20Ev
  virtual void  v21(); // _ZN6S676C53v21Ev
  virtual void  v22(); // _ZN6S676C53v22Ev
  virtual void  v23(); // _ZN6S676C53v23Ev
  virtual void  v24(); // _ZN6S676C53v24Ev
  virtual void  v25(); // _ZN6S676C53v25Ev
  virtual void  v26(); // _ZN6S676C53v26Ev
  virtual void  v27(); // _ZN6S676C53v27Ev
  virtual void  v28(); // _ZN6S676C53v28Ev
  virtual void  v29(); // _ZN6S676C53v29Ev
  virtual void  v30(); // _ZN6S676C53v30Ev
  virtual void  v31(); // _ZN6S676C53v31Ev
  virtual void  v32(); // _ZN6S676C53v32Ev
  virtual void  v33(); // _ZN6S676C53v33Ev
  virtual void  v34(); // _ZN6S676C53v34Ev
  virtual void  v35(); // _ZN6S676C53v35Ev
  virtual void  v36(); // _ZN6S676C53v36Ev
  virtual void  v37(); // _ZN6S676C53v37Ev
  virtual void  v38(); // _ZN6S676C53v38Ev
  virtual void  v39(); // _ZN6S676C53v39Ev
  virtual void  v40(); // _ZN6S676C53v40Ev
  virtual void  v41(); // _ZN6S676C53v41Ev
  virtual void  v42(); // _ZN6S676C53v42Ev
  virtual void  v43(); // _ZN6S676C53v43Ev
  virtual void  v44(); // _ZN6S676C53v44Ev
  virtual void  v45(); // _ZN6S676C53v45Ev
  virtual void  v46(); // _ZN6S676C53v46Ev
  virtual void  v47(); // _ZN6S676C53v47Ev
  virtual void  v48(); // _ZN6S676C53v48Ev
  virtual void  v49(); // _ZN6S676C53v49Ev
  virtual void  v50(); // _ZN6S676C53v50Ev
  virtual void  v51(); // _ZN6S676C53v51Ev
  virtual void  v52(); // _ZN6S676C53v52Ev
  virtual void  v53(); // _ZN6S676C53v53Ev
  virtual void  v54(); // _ZN6S676C53v54Ev
  virtual void  v55(); // _ZN6S676C53v55Ev
  virtual void  v56(); // _ZN6S676C53v56Ev
  virtual void  v57(); // _ZN6S676C53v57Ev
  virtual void  v58(); // _ZN6S676C53v58Ev
  virtual void  v59(); // _ZN6S676C53v59Ev
  virtual void  v60(); // _ZN6S676C53v60Ev
  virtual void  v61(); // _ZN6S676C53v61Ev
  virtual void  v62(); // _ZN6S676C53v62Ev
  virtual void  v63(); // _ZN6S676C53v63Ev
  virtual void  v64(); // _ZN6S676C53v64Ev
  virtual void  v65(); // _ZN6S676C53v65Ev
  virtual void  v66(); // _ZN6S676C53v66Ev
  virtual void  v67(); // _ZN6S676C53v67Ev
  virtual void  v68(); // _ZN6S676C53v68Ev
  virtual void  v69(); // _ZN6S676C53v69Ev
  S676C5(); // tgen
};
//SIG(-1 S676C5) 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]}


 S676C5 ::~S676C5(){ note_dtor("S676C5", this);}
void  S676C5 ::v6(){vfunc_called(this, "_ZN6S676C52v6Ev");}
void  S676C5 ::v7(){vfunc_called(this, "_ZN6S676C52v7Ev");}
void  S676C5 ::v8(){vfunc_called(this, "_ZN6S676C52v8Ev");}
void  S676C5 ::v9(){vfunc_called(this, "_ZN6S676C52v9Ev");}
void  S676C5 ::v10(){vfunc_called(this, "_ZN6S676C53v10Ev");}
void  S676C5 ::v11(){vfunc_called(this, "_ZN6S676C53v11Ev");}
void  S676C5 ::v12(){vfunc_called(this, "_ZN6S676C53v12Ev");}
void  S676C5 ::v13(){vfunc_called(this, "_ZN6S676C53v13Ev");}
void  S676C5 ::v14(){vfunc_called(this, "_ZN6S676C53v14Ev");}
void  S676C5 ::v15(){vfunc_called(this, "_ZN6S676C53v15Ev");}
void  S676C5 ::v16(){vfunc_called(this, "_ZN6S676C53v16Ev");}
void  S676C5 ::v17(){vfunc_called(this, "_ZN6S676C53v17Ev");}
void  S676C5 ::v18(){vfunc_called(this, "_ZN6S676C53v18Ev");}
void  S676C5 ::v19(){vfunc_called(this, "_ZN6S676C53v19Ev");}
void  S676C5 ::v20(){vfunc_called(this, "_ZN6S676C53v20Ev");}
void  S676C5 ::v21(){vfunc_called(this, "_ZN6S676C53v21Ev");}
void  S676C5 ::v22(){vfunc_called(this, "_ZN6S676C53v22Ev");}
void  S676C5 ::v23(){vfunc_called(this, "_ZN6S676C53v23Ev");}
void  S676C5 ::v24(){vfunc_called(this, "_ZN6S676C53v24Ev");}
void  S676C5 ::v25(){vfunc_called(this, "_ZN6S676C53v25Ev");}
void  S676C5 ::v26(){vfunc_called(this, "_ZN6S676C53v26Ev");}
void  S676C5 ::v27(){vfunc_called(this, "_ZN6S676C53v27Ev");}
void  S676C5 ::v28(){vfunc_called(this, "_ZN6S676C53v28Ev");}
void  S676C5 ::v29(){vfunc_called(this, "_ZN6S676C53v29Ev");}
void  S676C5 ::v30(){vfunc_called(this, "_ZN6S676C53v30Ev");}
void  S676C5 ::v31(){vfunc_called(this, "_ZN6S676C53v31Ev");}
void  S676C5 ::v32(){vfunc_called(this, "_ZN6S676C53v32Ev");}
void  S676C5 ::v33(){vfunc_called(this, "_ZN6S676C53v33Ev");}
void  S676C5 ::v34(){vfunc_called(this, "_ZN6S676C53v34Ev");}
void  S676C5 ::v35(){vfunc_called(this, "_ZN6S676C53v35Ev");}
void  S676C5 ::v36(){vfunc_called(this, "_ZN6S676C53v36Ev");}
void  S676C5 ::v37(){vfunc_called(this, "_ZN6S676C53v37Ev");}
void  S676C5 ::v38(){vfunc_called(this, "_ZN6S676C53v38Ev");}
void  S676C5 ::v39(){vfunc_called(this, "_ZN6S676C53v39Ev");}
void  S676C5 ::v40(){vfunc_called(this, "_ZN6S676C53v40Ev");}
void  S676C5 ::v41(){vfunc_called(this, "_ZN6S676C53v41Ev");}
void  S676C5 ::v42(){vfunc_called(this, "_ZN6S676C53v42Ev");}
void  S676C5 ::v43(){vfunc_called(this, "_ZN6S676C53v43Ev");}
void  S676C5 ::v44(){vfunc_called(this, "_ZN6S676C53v44Ev");}
void  S676C5 ::v45(){vfunc_called(this, "_ZN6S676C53v45Ev");}
void  S676C5 ::v46(){vfunc_called(this, "_ZN6S676C53v46Ev");}
void  S676C5 ::v47(){vfunc_called(this, "_ZN6S676C53v47Ev");}
void  S676C5 ::v48(){vfunc_called(this, "_ZN6S676C53v48Ev");}
void  S676C5 ::v49(){vfunc_called(this, "_ZN6S676C53v49Ev");}
void  S676C5 ::v50(){vfunc_called(this, "_ZN6S676C53v50Ev");}
void  S676C5 ::v51(){vfunc_called(this, "_ZN6S676C53v51Ev");}
void  S676C5 ::v52(){vfunc_called(this, "_ZN6S676C53v52Ev");}
void  S676C5 ::v53(){vfunc_called(this, "_ZN6S676C53v53Ev");}
void  S676C5 ::v54(){vfunc_called(this, "_ZN6S676C53v54Ev");}
void  S676C5 ::v55(){vfunc_called(this, "_ZN6S676C53v55Ev");}
void  S676C5 ::v56(){vfunc_called(this, "_ZN6S676C53v56Ev");}
void  S676C5 ::v57(){vfunc_called(this, "_ZN6S676C53v57Ev");}
void  S676C5 ::v58(){vfunc_called(this, "_ZN6S676C53v58Ev");}
void  S676C5 ::v59(){vfunc_called(this, "_ZN6S676C53v59Ev");}
void  S676C5 ::v60(){vfunc_called(this, "_ZN6S676C53v60Ev");}
void  S676C5 ::v61(){vfunc_called(this, "_ZN6S676C53v61Ev");}
void  S676C5 ::v62(){vfunc_called(this, "_ZN6S676C53v62Ev");}
void  S676C5 ::v63(){vfunc_called(this, "_ZN6S676C53v63Ev");}
void  S676C5 ::v64(){vfunc_called(this, "_ZN6S676C53v64Ev");}
void  S676C5 ::v65(){vfunc_called(this, "_ZN6S676C53v65Ev");}
void  S676C5 ::v66(){vfunc_called(this, "_ZN6S676C53v66Ev");}
void  S676C5 ::v67(){vfunc_called(this, "_ZN6S676C53v67Ev");}
void  S676C5 ::v68(){vfunc_called(this, "_ZN6S676C53v68Ev");}
void  S676C5 ::v69(){vfunc_called(this, "_ZN6S676C53v69Ev");}
S676C5 ::S676C5(){ note_ctor("S676C5", this);} // tgen

static void Test_S676C5()
{
  extern Class_Descriptor cd_S676C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S676C5, buf);
    S676C5 *dp, &lv = *(dp=new (buf) S676C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S676C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S676C5)");
    check_field_offset(lv, s676c5f0, ABISELECT(8,4), "S676C5.s676c5f0");
    check_field_offset(lv, s676c5f1, ABISELECT(16,8), "S676C5.s676c5f1");
    check_field_offset(lv, s676c5f2, ABISELECT(24,16), "S676C5.s676c5f2");
    check_field_offset(lv, s676c5f3, ABISELECT(56,32), "S676C5.s676c5f3");
    check_field_offset(lv, s676c5f4, ABISELECT(64,40), "S676C5.s676c5f4");
    check_field_offset(lv, s676c5f5, ABISELECT(72,44), "S676C5.s676c5f5");
    check_field_offset(lv, s676c5f6, ABISELECT(80,52), "S676C5.s676c5f6");
    test_class_info(&lv, &cd_S676C5);
    dp->~S676C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS676C5(Test_S676C5, "S676C5", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN6S676C5C1Ev();
extern void _ZN6S676C5D1Ev();
Name_Map name_map_S676C5[] = {
  NSPAIR(_ZN6S676C5C1Ev),
  NSPAIR(_ZN6S676C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S676C5[];
extern void _ZN6S676C5D1Ev();
extern void _ZN6S676C5D0Ev();
extern void _ZN6S676C52v6Ev();
extern void _ZN6S676C52v7Ev();
extern void _ZN6S676C52v8Ev();
extern void _ZN6S676C52v9Ev();
extern void _ZN6S676C53v10Ev();
extern void _ZN6S676C53v11Ev();
extern void _ZN6S676C53v12Ev();
extern void _ZN6S676C53v13Ev();
extern void _ZN6S676C53v14Ev();
extern void _ZN6S676C53v15Ev();
extern void _ZN6S676C53v16Ev();
extern void _ZN6S676C53v17Ev();
extern void _ZN6S676C53v18Ev();
extern void _ZN6S676C53v19Ev();
extern void _ZN6S676C53v20Ev();
extern void _ZN6S676C53v21Ev();
extern void _ZN6S676C53v22Ev();
extern void _ZN6S676C53v23Ev();
extern void _ZN6S676C53v24Ev();
extern void _ZN6S676C53v25Ev();
extern void _ZN6S676C53v26Ev();
extern void _ZN6S676C53v27Ev();
extern void _ZN6S676C53v28Ev();
extern void _ZN6S676C53v29Ev();
extern void _ZN6S676C53v30Ev();
extern void _ZN6S676C53v31Ev();
extern void _ZN6S676C53v32Ev();
extern void _ZN6S676C53v33Ev();
extern void _ZN6S676C53v34Ev();
extern void _ZN6S676C53v35Ev();
extern void _ZN6S676C53v36Ev();
extern void _ZN6S676C53v37Ev();
extern void _ZN6S676C53v38Ev();
extern void _ZN6S676C53v39Ev();
extern void _ZN6S676C53v40Ev();
extern void _ZN6S676C53v41Ev();
extern void _ZN6S676C53v42Ev();
extern void _ZN6S676C53v43Ev();
extern void _ZN6S676C53v44Ev();
extern void _ZN6S676C53v45Ev();
extern void _ZN6S676C53v46Ev();
extern void _ZN6S676C53v47Ev();
extern void _ZN6S676C53v48Ev();
extern void _ZN6S676C53v49Ev();
extern void _ZN6S676C53v50Ev();
extern void _ZN6S676C53v51Ev();
extern void _ZN6S676C53v52Ev();
extern void _ZN6S676C53v53Ev();
extern void _ZN6S676C53v54Ev();
extern void _ZN6S676C53v55Ev();
extern void _ZN6S676C53v56Ev();
extern void _ZN6S676C53v57Ev();
extern void _ZN6S676C53v58Ev();
extern void _ZN6S676C53v59Ev();
extern void _ZN6S676C53v60Ev();
extern void _ZN6S676C53v61Ev();
extern void _ZN6S676C53v62Ev();
extern void _ZN6S676C53v63Ev();
extern void _ZN6S676C53v64Ev();
extern void _ZN6S676C53v65Ev();
extern void _ZN6S676C53v66Ev();
extern void _ZN6S676C53v67Ev();
extern void _ZN6S676C53v68Ev();
extern void _ZN6S676C53v69Ev();
static  VTBL_ENTRY vtc_S676C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S676C5[0]),
  (VTBL_ENTRY)&_ZN6S676C5D1Ev,
  (VTBL_ENTRY)&_ZN6S676C5D0Ev,
  (VTBL_ENTRY)&_ZN6S676C52v6Ev,
  (VTBL_ENTRY)&_ZN6S676C52v7Ev,
  (VTBL_ENTRY)&_ZN6S676C52v8Ev,
  (VTBL_ENTRY)&_ZN6S676C52v9Ev,
  (VTBL_ENTRY)&_ZN6S676C53v10Ev,
  (VTBL_ENTRY)&_ZN6S676C53v11Ev,
  (VTBL_ENTRY)&_ZN6S676C53v12Ev,
  (VTBL_ENTRY)&_ZN6S676C53v13Ev,
  (VTBL_ENTRY)&_ZN6S676C53v14Ev,
  (VTBL_ENTRY)&_ZN6S676C53v15Ev,
  (VTBL_ENTRY)&_ZN6S676C53v16Ev,
  (VTBL_ENTRY)&_ZN6S676C53v17Ev,
  (VTBL_ENTRY)&_ZN6S676C53v18Ev,
  (VTBL_ENTRY)&_ZN6S676C53v19Ev,
  (VTBL_ENTRY)&_ZN6S676C53v20Ev,
  (VTBL_ENTRY)&_ZN6S676C53v21Ev,
  (VTBL_ENTRY)&_ZN6S676C53v22Ev,
  (VTBL_ENTRY)&_ZN6S676C53v23Ev,
  (VTBL_ENTRY)&_ZN6S676C53v24Ev,
  (VTBL_ENTRY)&_ZN6S676C53v25Ev,
  (VTBL_ENTRY)&_ZN6S676C53v26Ev,
  (VTBL_ENTRY)&_ZN6S676C53v27Ev,
  (VTBL_ENTRY)&_ZN6S676C53v28Ev,
  (VTBL_ENTRY)&_ZN6S676C53v29Ev,
  (VTBL_ENTRY)&_ZN6S676C53v30Ev,
  (VTBL_ENTRY)&_ZN6S676C53v31Ev,
  (VTBL_ENTRY)&_ZN6S676C53v32Ev,
  (VTBL_ENTRY)&_ZN6S676C53v33Ev,
  (VTBL_ENTRY)&_ZN6S676C53v34Ev,
  (VTBL_ENTRY)&_ZN6S676C53v35Ev,
  (VTBL_ENTRY)&_ZN6S676C53v36Ev,
  (VTBL_ENTRY)&_ZN6S676C53v37Ev,
  (VTBL_ENTRY)&_ZN6S676C53v38Ev,
  (VTBL_ENTRY)&_ZN6S676C53v39Ev,
  (VTBL_ENTRY)&_ZN6S676C53v40Ev,
  (VTBL_ENTRY)&_ZN6S676C53v41Ev,
  (VTBL_ENTRY)&_ZN6S676C53v42Ev,
  (VTBL_ENTRY)&_ZN6S676C53v43Ev,
  (VTBL_ENTRY)&_ZN6S676C53v44Ev,
  (VTBL_ENTRY)&_ZN6S676C53v45Ev,
  (VTBL_ENTRY)&_ZN6S676C53v46Ev,
  (VTBL_ENTRY)&_ZN6S676C53v47Ev,
  (VTBL_ENTRY)&_ZN6S676C53v48Ev,
  (VTBL_ENTRY)&_ZN6S676C53v49Ev,
  (VTBL_ENTRY)&_ZN6S676C53v50Ev,
  (VTBL_ENTRY)&_ZN6S676C53v51Ev,
  (VTBL_ENTRY)&_ZN6S676C53v52Ev,
  (VTBL_ENTRY)&_ZN6S676C53v53Ev,
  (VTBL_ENTRY)&_ZN6S676C53v54Ev,
  (VTBL_ENTRY)&_ZN6S676C53v55Ev,
  (VTBL_ENTRY)&_ZN6S676C53v56Ev,
  (VTBL_ENTRY)&_ZN6S676C53v57Ev,
  (VTBL_ENTRY)&_ZN6S676C53v58Ev,
  (VTBL_ENTRY)&_ZN6S676C53v59Ev,
  (VTBL_ENTRY)&_ZN6S676C53v60Ev,
  (VTBL_ENTRY)&_ZN6S676C53v61Ev,
  (VTBL_ENTRY)&_ZN6S676C53v62Ev,
  (VTBL_ENTRY)&_ZN6S676C53v63Ev,
  (VTBL_ENTRY)&_ZN6S676C53v64Ev,
  (VTBL_ENTRY)&_ZN6S676C53v65Ev,
  (VTBL_ENTRY)&_ZN6S676C53v66Ev,
  (VTBL_ENTRY)&_ZN6S676C53v67Ev,
  (VTBL_ENTRY)&_ZN6S676C53v68Ev,
  (VTBL_ENTRY)&_ZN6S676C53v69Ev,
};
extern VTBL_ENTRY _ZTI6S676C5[];
extern  VTBL_ENTRY _ZTV6S676C5[];
Class_Descriptor cd_S676C5 = {  "S676C5", // class name
  0,0,//no base classes
  &(vtc_S676C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI6S676C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S676C5),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  S676C4  : S676C5 {
  virtual  ~S676C4(); // _ZN6S676C4D1Ev
  virtual void  v70(); // _ZN6S676C43v70Ev
  virtual void  v71(); // _ZN6S676C43v71Ev
  S676C4(); // tgen
};
//SIG(-1 S676C4) C1{ BC2{ vd v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2}


 S676C4 ::~S676C4(){ note_dtor("S676C4", this);}
void  S676C4 ::v70(){vfunc_called(this, "_ZN6S676C43v70Ev");}
void  S676C4 ::v71(){vfunc_called(this, "_ZN6S676C43v71Ev");}
S676C4 ::S676C4(){ note_ctor("S676C4", this);} // tgen

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

#else // __cplusplus

extern void _ZN6S676C4C1Ev();
extern void _ZN6S676C4D1Ev();
Name_Map name_map_S676C4[] = {
  NSPAIR(_ZN6S676C4C1Ev),
  NSPAIR(_ZN6S676C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S676C5;
extern VTBL_ENTRY _ZTI6S676C5[];
extern  VTBL_ENTRY _ZTV6S676C5[];
static Base_Class bases_S676C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S676C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S676C4[];
extern void _ZN6S676C4D1Ev();
extern void _ZN6S676C4D0Ev();
extern void _ZN6S676C52v6Ev();
extern void _ZN6S676C52v7Ev();
extern void _ZN6S676C52v8Ev();
extern void _ZN6S676C52v9Ev();
extern void _ZN6S676C53v10Ev();
extern void _ZN6S676C53v11Ev();
extern void _ZN6S676C53v12Ev();
extern void _ZN6S676C53v13Ev();
extern void _ZN6S676C53v14Ev();
extern void _ZN6S676C53v15Ev();
extern void _ZN6S676C53v16Ev();
extern void _ZN6S676C53v17Ev();
extern void _ZN6S676C53v18Ev();
extern void _ZN6S676C53v19Ev();
extern void _ZN6S676C53v20Ev();
extern void _ZN6S676C53v21Ev();
extern void _ZN6S676C53v22Ev();
extern void _ZN6S676C53v23Ev();
extern void _ZN6S676C53v24Ev();
extern void _ZN6S676C53v25Ev();
extern void _ZN6S676C53v26Ev();
extern void _ZN6S676C53v27Ev();
extern void _ZN6S676C53v28Ev();
extern void _ZN6S676C53v29Ev();
extern void _ZN6S676C53v30Ev();
extern void _ZN6S676C53v31Ev();
extern void _ZN6S676C53v32Ev();
extern void _ZN6S676C53v33Ev();
extern void _ZN6S676C53v34Ev();
extern void _ZN6S676C53v35Ev();
extern void _ZN6S676C53v36Ev();
extern void _ZN6S676C53v37Ev();
extern void _ZN6S676C53v38Ev();
extern void _ZN6S676C53v39Ev();
extern void _ZN6S676C53v40Ev();
extern void _ZN6S676C53v41Ev();
extern void _ZN6S676C53v42Ev();
extern void _ZN6S676C53v43Ev();
extern void _ZN6S676C53v44Ev();
extern void _ZN6S676C53v45Ev();
extern void _ZN6S676C53v46Ev();
extern void _ZN6S676C53v47Ev();
extern void _ZN6S676C53v48Ev();
extern void _ZN6S676C53v49Ev();
extern void _ZN6S676C53v50Ev();
extern void _ZN6S676C53v51Ev();
extern void _ZN6S676C53v52Ev();
extern void _ZN6S676C53v53Ev();
extern void _ZN6S676C53v54Ev();
extern void _ZN6S676C53v55Ev();
extern void _ZN6S676C53v56Ev();
extern void _ZN6S676C53v57Ev();
extern void _ZN6S676C53v58Ev();
extern void _ZN6S676C53v59Ev();
extern void _ZN6S676C53v60Ev();
extern void _ZN6S676C53v61Ev();
extern void _ZN6S676C53v62Ev();
extern void _ZN6S676C53v63Ev();
extern void _ZN6S676C53v64Ev();
extern void _ZN6S676C53v65Ev();
extern void _ZN6S676C53v66Ev();
extern void _ZN6S676C53v67Ev();
extern void _ZN6S676C53v68Ev();
extern void _ZN6S676C53v69Ev();
extern void _ZN6S676C43v70Ev();
extern void _ZN6S676C43v71Ev();
static  VTBL_ENTRY vtc_S676C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S676C4[0]),
  (VTBL_ENTRY)&_ZN6S676C4D1Ev,
  (VTBL_ENTRY)&_ZN6S676C4D0Ev,
  (VTBL_ENTRY)&_ZN6S676C52v6Ev,
  (VTBL_ENTRY)&_ZN6S676C52v7Ev,
  (VTBL_ENTRY)&_ZN6S676C52v8Ev,
  (VTBL_ENTRY)&_ZN6S676C52v9Ev,
  (VTBL_ENTRY)&_ZN6S676C53v10Ev,
  (VTBL_ENTRY)&_ZN6S676C53v11Ev,
  (VTBL_ENTRY)&_ZN6S676C53v12Ev,
  (VTBL_ENTRY)&_ZN6S676C53v13Ev,
  (VTBL_ENTRY)&_ZN6S676C53v14Ev,
  (VTBL_ENTRY)&_ZN6S676C53v15Ev,
  (VTBL_ENTRY)&_ZN6S676C53v16Ev,
  (VTBL_ENTRY)&_ZN6S676C53v17Ev,
  (VTBL_ENTRY)&_ZN6S676C53v18Ev,
  (VTBL_ENTRY)&_ZN6S676C53v19Ev,
  (VTBL_ENTRY)&_ZN6S676C53v20Ev,
  (VTBL_ENTRY)&_ZN6S676C53v21Ev,
  (VTBL_ENTRY)&_ZN6S676C53v22Ev,
  (VTBL_ENTRY)&_ZN6S676C53v23Ev,
  (VTBL_ENTRY)&_ZN6S676C53v24Ev,
  (VTBL_ENTRY)&_ZN6S676C53v25Ev,
  (VTBL_ENTRY)&_ZN6S676C53v26Ev,
  (VTBL_ENTRY)&_ZN6S676C53v27Ev,
  (VTBL_ENTRY)&_ZN6S676C53v28Ev,
  (VTBL_ENTRY)&_ZN6S676C53v29Ev,
  (VTBL_ENTRY)&_ZN6S676C53v30Ev,
  (VTBL_ENTRY)&_ZN6S676C53v31Ev,
  (VTBL_ENTRY)&_ZN6S676C53v32Ev,
  (VTBL_ENTRY)&_ZN6S676C53v33Ev,
  (VTBL_ENTRY)&_ZN6S676C53v34Ev,
  (VTBL_ENTRY)&_ZN6S676C53v35Ev,
  (VTBL_ENTRY)&_ZN6S676C53v36Ev,
  (VTBL_ENTRY)&_ZN6S676C53v37Ev,
  (VTBL_ENTRY)&_ZN6S676C53v38Ev,
  (VTBL_ENTRY)&_ZN6S676C53v39Ev,
  (VTBL_ENTRY)&_ZN6S676C53v40Ev,
  (VTBL_ENTRY)&_ZN6S676C53v41Ev,
  (VTBL_ENTRY)&_ZN6S676C53v42Ev,
  (VTBL_ENTRY)&_ZN6S676C53v43Ev,
  (VTBL_ENTRY)&_ZN6S676C53v44Ev,
  (VTBL_ENTRY)&_ZN6S676C53v45Ev,
  (VTBL_ENTRY)&_ZN6S676C53v46Ev,
  (VTBL_ENTRY)&_ZN6S676C53v47Ev,
  (VTBL_ENTRY)&_ZN6S676C53v48Ev,
  (VTBL_ENTRY)&_ZN6S676C53v49Ev,
  (VTBL_ENTRY)&_ZN6S676C53v50Ev,
  (VTBL_ENTRY)&_ZN6S676C53v51Ev,
  (VTBL_ENTRY)&_ZN6S676C53v52Ev,
  (VTBL_ENTRY)&_ZN6S676C53v53Ev,
  (VTBL_ENTRY)&_ZN6S676C53v54Ev,
  (VTBL_ENTRY)&_ZN6S676C53v55Ev,
  (VTBL_ENTRY)&_ZN6S676C53v56Ev,
  (VTBL_ENTRY)&_ZN6S676C53v57Ev,
  (VTBL_ENTRY)&_ZN6S676C53v58Ev,
  (VTBL_ENTRY)&_ZN6S676C53v59Ev,
  (VTBL_ENTRY)&_ZN6S676C53v60Ev,
  (VTBL_ENTRY)&_ZN6S676C53v61Ev,
  (VTBL_ENTRY)&_ZN6S676C53v62Ev,
  (VTBL_ENTRY)&_ZN6S676C53v63Ev,
  (VTBL_ENTRY)&_ZN6S676C53v64Ev,
  (VTBL_ENTRY)&_ZN6S676C53v65Ev,
  (VTBL_ENTRY)&_ZN6S676C53v66Ev,
  (VTBL_ENTRY)&_ZN6S676C53v67Ev,
  (VTBL_ENTRY)&_ZN6S676C53v68Ev,
  (VTBL_ENTRY)&_ZN6S676C53v69Ev,
  (VTBL_ENTRY)&_ZN6S676C43v70Ev,
  (VTBL_ENTRY)&_ZN6S676C43v71Ev,
};
extern VTBL_ENTRY _ZTI6S676C4[];
extern  VTBL_ENTRY _ZTV6S676C4[];
Class_Descriptor cd_S676C4 = {  "S676C4", // class name
  bases_S676C4, 1,
  &(vtc_S676C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI6S676C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S676C4),70, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S676C3  : S676C4 {
  char s676c3f0;
  ::S3352C17 s676c3f1;
  ::S87C12_nt s676c3f2;
  virtual  ~S676C3(); // _ZN6S676C3D1Ev
  virtual void  v72(); // _ZN6S676C33v72Ev
  virtual void  v73(); // _ZN6S676C33v73Ev
  virtual void  v74(); // _ZN6S676C33v74Ev
  virtual void  v75(); // _ZN6S676C33v75Ev
  virtual void  v76(); // _ZN6S676C33v76Ev
  virtual void  v77(); // _ZN6S676C33v77Ev
  virtual void  v78(); // _ZN6S676C33v78Ev
  virtual void  v79(); // _ZN6S676C33v79Ev
  virtual void  v80(); // _ZN6S676C33v80Ev
  virtual void  v81(); // _ZN6S676C33v81Ev
  virtual void  v82(); // _ZN6S676C33v82Ev
  virtual void  v83(); // _ZN6S676C33v83Ev
  S676C3(); // tgen
};
//SIG(-1 S676C3) C1{ BC2{ BC3{ vd v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v77 v78} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 Fc FC5{ BC6{ BC7{ m Fp Fi[2]}}} FC8{ m Fp FC4}}


 S676C3 ::~S676C3(){ note_dtor("S676C3", this);}
void  S676C3 ::v72(){vfunc_called(this, "_ZN6S676C33v72Ev");}
void  S676C3 ::v73(){vfunc_called(this, "_ZN6S676C33v73Ev");}
void  S676C3 ::v74(){vfunc_called(this, "_ZN6S676C33v74Ev");}
void  S676C3 ::v75(){vfunc_called(this, "_ZN6S676C33v75Ev");}
void  S676C3 ::v76(){vfunc_called(this, "_ZN6S676C33v76Ev");}
void  S676C3 ::v77(){vfunc_called(this, "_ZN6S676C33v77Ev");}
void  S676C3 ::v78(){vfunc_called(this, "_ZN6S676C33v78Ev");}
void  S676C3 ::v79(){vfunc_called(this, "_ZN6S676C33v79Ev");}
void  S676C3 ::v80(){vfunc_called(this, "_ZN6S676C33v80Ev");}
void  S676C3 ::v81(){vfunc_called(this, "_ZN6S676C33v81Ev");}
void  S676C3 ::v82(){vfunc_called(this, "_ZN6S676C33v82Ev");}
void  S676C3 ::v83(){vfunc_called(this, "_ZN6S676C33v83Ev");}
S676C3 ::S676C3(){ note_ctor("S676C3", this);} // tgen

static void Test_S676C3()
{
  extern Class_Descriptor cd_S676C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,23)];
    init_test(&cd_S676C3, buf);
    S676C3 *dp, &lv = *(dp=new (buf) S676C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,88), "sizeof(S676C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S676C3)");
    check_base_class_offset(lv, (S676C5*)(S676C4*), 0, "S676C3");
    check_base_class_offset(lv, (S676C4*), 0, "S676C3");
    check_field_offset(lv, s676c3f0, ABISELECT(96,60), "S676C3.s676c3f0");
    check_field_offset(lv, s676c3f1, ABISELECT(104,64), "S676C3.s676c3f1");
    check_field_offset(lv, s676c3f2, ABISELECT(120,76), "S676C3.s676c3f2");
    test_class_info(&lv, &cd_S676C3);
    dp->~S676C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS676C3(Test_S676C3, "S676C3", ABISELECT(136,88));

#else // __cplusplus

extern void _ZN6S676C3C1Ev();
extern void _ZN6S676C3D1Ev();
Name_Map name_map_S676C3[] = {
  NSPAIR(_ZN6S676C3C1Ev),
  NSPAIR(_ZN6S676C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S676C5;
extern VTBL_ENTRY _ZTI6S676C5[];
extern  VTBL_ENTRY _ZTV6S676C5[];
extern Class_Descriptor cd_S676C4;
extern VTBL_ENTRY _ZTI6S676C4[];
extern  VTBL_ENTRY _ZTV6S676C4[];
static Base_Class bases_S676C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S676C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S676C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S676C3[];
extern void _ZN6S676C3D1Ev();
extern void _ZN6S676C3D0Ev();
extern void _ZN6S676C52v6Ev();
extern void _ZN6S676C52v7Ev();
extern void _ZN6S676C52v8Ev();
extern void _ZN6S676C52v9Ev();
extern void _ZN6S676C53v10Ev();
extern void _ZN6S676C53v11Ev();
extern void _ZN6S676C53v12Ev();
extern void _ZN6S676C53v13Ev();
extern void _ZN6S676C53v14Ev();
extern void _ZN6S676C53v15Ev();
extern void _ZN6S676C53v16Ev();
extern void _ZN6S676C53v17Ev();
extern void _ZN6S676C53v18Ev();
extern void _ZN6S676C53v19Ev();
extern void _ZN6S676C53v20Ev();
extern void _ZN6S676C53v21Ev();
extern void _ZN6S676C53v22Ev();
extern void _ZN6S676C53v23Ev();
extern void _ZN6S676C53v24Ev();
extern void _ZN6S676C53v25Ev();
extern void _ZN6S676C53v26Ev();
extern void _ZN6S676C53v27Ev();
extern void _ZN6S676C53v28Ev();
extern void _ZN6S676C53v29Ev();
extern void _ZN6S676C53v30Ev();
extern void _ZN6S676C53v31Ev();
extern void _ZN6S676C53v32Ev();
extern void _ZN6S676C53v33Ev();
extern void _ZN6S676C53v34Ev();
extern void _ZN6S676C53v35Ev();
extern void _ZN6S676C53v36Ev();
extern void _ZN6S676C53v37Ev();
extern void _ZN6S676C53v38Ev();
extern void _ZN6S676C53v39Ev();
extern void _ZN6S676C53v40Ev();
extern void _ZN6S676C53v41Ev();
extern void _ZN6S676C53v42Ev();
extern void _ZN6S676C53v43Ev();
extern void _ZN6S676C53v44Ev();
extern void _ZN6S676C53v45Ev();
extern void _ZN6S676C53v46Ev();
extern void _ZN6S676C53v47Ev();
extern void _ZN6S676C53v48Ev();
extern void _ZN6S676C53v49Ev();
extern void _ZN6S676C53v50Ev();
extern void _ZN6S676C53v51Ev();
extern void _ZN6S676C53v52Ev();
extern void _ZN6S676C53v53Ev();
extern void _ZN6S676C53v54Ev();
extern void _ZN6S676C53v55Ev();
extern void _ZN6S676C53v56Ev();
extern void _ZN6S676C53v57Ev();
extern void _ZN6S676C53v58Ev();
extern void _ZN6S676C53v59Ev();
extern void _ZN6S676C53v60Ev();
extern void _ZN6S676C53v61Ev();
extern void _ZN6S676C53v62Ev();
extern void _ZN6S676C53v63Ev();
extern void _ZN6S676C53v64Ev();
extern void _ZN6S676C53v65Ev();
extern void _ZN6S676C53v66Ev();
extern void _ZN6S676C53v67Ev();
extern void _ZN6S676C53v68Ev();
extern void _ZN6S676C53v69Ev();
extern void _ZN6S676C43v70Ev();
extern void _ZN6S676C43v71Ev();
extern void _ZN6S676C33v72Ev();
extern void _ZN6S676C33v73Ev();
extern void _ZN6S676C33v74Ev();
extern void _ZN6S676C33v75Ev();
extern void _ZN6S676C33v76Ev();
extern void _ZN6S676C33v77Ev();
extern void _ZN6S676C33v78Ev();
extern void _ZN6S676C33v79Ev();
extern void _ZN6S676C33v80Ev();
extern void _ZN6S676C33v81Ev();
extern void _ZN6S676C33v82Ev();
extern void _ZN6S676C33v83Ev();
static  VTBL_ENTRY vtc_S676C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S676C3[0]),
  (VTBL_ENTRY)&_ZN6S676C3D1Ev,
  (VTBL_ENTRY)&_ZN6S676C3D0Ev,
  (VTBL_ENTRY)&_ZN6S676C52v6Ev,
  (VTBL_ENTRY)&_ZN6S676C52v7Ev,
  (VTBL_ENTRY)&_ZN6S676C52v8Ev,
  (VTBL_ENTRY)&_ZN6S676C52v9Ev,
  (VTBL_ENTRY)&_ZN6S676C53v10Ev,
  (VTBL_ENTRY)&_ZN6S676C53v11Ev,
  (VTBL_ENTRY)&_ZN6S676C53v12Ev,
  (VTBL_ENTRY)&_ZN6S676C53v13Ev,
  (VTBL_ENTRY)&_ZN6S676C53v14Ev,
  (VTBL_ENTRY)&_ZN6S676C53v15Ev,
  (VTBL_ENTRY)&_ZN6S676C53v16Ev,
  (VTBL_ENTRY)&_ZN6S676C53v17Ev,
  (VTBL_ENTRY)&_ZN6S676C53v18Ev,
  (VTBL_ENTRY)&_ZN6S676C53v19Ev,
  (VTBL_ENTRY)&_ZN6S676C53v20Ev,
  (VTBL_ENTRY)&_ZN6S676C53v21Ev,
  (VTBL_ENTRY)&_ZN6S676C53v22Ev,
  (VTBL_ENTRY)&_ZN6S676C53v23Ev,
  (VTBL_ENTRY)&_ZN6S676C53v24Ev,
  (VTBL_ENTRY)&_ZN6S676C53v25Ev,
  (VTBL_ENTRY)&_ZN6S676C53v26Ev,
  (VTBL_ENTRY)&_ZN6S676C53v27Ev,
  (VTBL_ENTRY)&_ZN6S676C53v28Ev,
  (VTBL_ENTRY)&_ZN6S676C53v29Ev,
  (VTBL_ENTRY)&_ZN6S676C53v30Ev,
  (VTBL_ENTRY)&_ZN6S676C53v31Ev,
  (VTBL_ENTRY)&_ZN6S676C53v32Ev,
  (VTBL_ENTRY)&_ZN6S676C53v33Ev,
  (VTBL_ENTRY)&_ZN6S676C53v34Ev,
  (VTBL_ENTRY)&_ZN6S676C53v35Ev,
  (VTBL_ENTRY)&_ZN6S676C53v36Ev,
  (VTBL_ENTRY)&_ZN6S676C53v37Ev,
  (VTBL_ENTRY)&_ZN6S676C53v38Ev,
  (VTBL_ENTRY)&_ZN6S676C53v39Ev,
  (VTBL_ENTRY)&_ZN6S676C53v40Ev,
  (VTBL_ENTRY)&_ZN6S676C53v41Ev,
  (VTBL_ENTRY)&_ZN6S676C53v42Ev,
  (VTBL_ENTRY)&_ZN6S676C53v43Ev,
  (VTBL_ENTRY)&_ZN6S676C53v44Ev,
  (VTBL_ENTRY)&_ZN6S676C53v45Ev,
  (VTBL_ENTRY)&_ZN6S676C53v46Ev,
  (VTBL_ENTRY)&_ZN6S676C53v47Ev,
  (VTBL_ENTRY)&_ZN6S676C53v48Ev,
  (VTBL_ENTRY)&_ZN6S676C53v49Ev,
  (VTBL_ENTRY)&_ZN6S676C53v50Ev,
  (VTBL_ENTRY)&_ZN6S676C53v51Ev,
  (VTBL_ENTRY)&_ZN6S676C53v52Ev,
  (VTBL_ENTRY)&_ZN6S676C53v53Ev,
  (VTBL_ENTRY)&_ZN6S676C53v54Ev,
  (VTBL_ENTRY)&_ZN6S676C53v55Ev,
  (VTBL_ENTRY)&_ZN6S676C53v56Ev,
  (VTBL_ENTRY)&_ZN6S676C53v57Ev,
  (VTBL_ENTRY)&_ZN6S676C53v58Ev,
  (VTBL_ENTRY)&_ZN6S676C53v59Ev,
  (VTBL_ENTRY)&_ZN6S676C53v60Ev,
  (VTBL_ENTRY)&_ZN6S676C53v61Ev,
  (VTBL_ENTRY)&_ZN6S676C53v62Ev,
  (VTBL_ENTRY)&_ZN6S676C53v63Ev,
  (VTBL_ENTRY)&_ZN6S676C53v64Ev,
  (VTBL_ENTRY)&_ZN6S676C53v65Ev,
  (VTBL_ENTRY)&_ZN6S676C53v66Ev,
  (VTBL_ENTRY)&_ZN6S676C53v67Ev,
  (VTBL_ENTRY)&_ZN6S676C53v68Ev,
  (VTBL_ENTRY)&_ZN6S676C53v69Ev,
  (VTBL_ENTRY)&_ZN6S676C43v70Ev,
  (VTBL_ENTRY)&_ZN6S676C43v71Ev,
  (VTBL_ENTRY)&_ZN6S676C33v72Ev,
  (VTBL_ENTRY)&_ZN6S676C33v73Ev,
  (VTBL_ENTRY)&_ZN6S676C33v74Ev,
  (VTBL_ENTRY)&_ZN6S676C33v75Ev,
  (VTBL_ENTRY)&_ZN6S676C33v76Ev,
  (VTBL_ENTRY)&_ZN6S676C33v77Ev,
  (VTBL_ENTRY)&_ZN6S676C33v78Ev,
  (VTBL_ENTRY)&_ZN6S676C33v79Ev,
  (VTBL_ENTRY)&_ZN6S676C33v80Ev,
  (VTBL_ENTRY)&_ZN6S676C33v81Ev,
  (VTBL_ENTRY)&_ZN6S676C33v82Ev,
  (VTBL_ENTRY)&_ZN6S676C33v83Ev,
};
extern VTBL_ENTRY _ZTI6S676C3[];
extern  VTBL_ENTRY _ZTV6S676C3[];
Class_Descriptor cd_S676C3 = {  "S676C3", // class name
  bases_S676C3, 2,
  &(vtc_S676C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(136,88), // object size
  NSPAIRA(_ZTI6S676C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S676C3),82, //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  S676C11  {
  virtual  ~S676C11(); // _ZN7S676C11D1Ev
  virtual void  v84(); // _ZN7S676C113v84Ev
  virtual void  v85(); // _ZN7S676C113v85Ev
  virtual void  v86(); // _ZN7S676C113v86Ev
  virtual void  v87(); // _ZN7S676C113v87Ev
  S676C11(); // tgen
};
//SIG(-1 S676C11) C1{ vd v1 v2 v3 v4}


 S676C11 ::~S676C11(){ note_dtor("S676C11", this);}
void  S676C11 ::v84(){vfunc_called(this, "_ZN7S676C113v84Ev");}
void  S676C11 ::v85(){vfunc_called(this, "_ZN7S676C113v85Ev");}
void  S676C11 ::v86(){vfunc_called(this, "_ZN7S676C113v86Ev");}
void  S676C11 ::v87(){vfunc_called(this, "_ZN7S676C113v87Ev");}
S676C11 ::S676C11(){ note_ctor("S676C11", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S676C11C1Ev();
extern void _ZN7S676C11D1Ev();
Name_Map name_map_S676C11[] = {
  NSPAIR(_ZN7S676C11C1Ev),
  NSPAIR(_ZN7S676C11D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S676C11[];
extern void _ZN7S676C11D1Ev();
extern void _ZN7S676C11D0Ev();
extern void _ZN7S676C113v84Ev();
extern void _ZN7S676C113v85Ev();
extern void _ZN7S676C113v86Ev();
extern void _ZN7S676C113v87Ev();
static  VTBL_ENTRY vtc_S676C11[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S676C11[0]),
  (VTBL_ENTRY)&_ZN7S676C11D1Ev,
  (VTBL_ENTRY)&_ZN7S676C11D0Ev,
  (VTBL_ENTRY)&_ZN7S676C113v84Ev,
  (VTBL_ENTRY)&_ZN7S676C113v85Ev,
  (VTBL_ENTRY)&_ZN7S676C113v86Ev,
  (VTBL_ENTRY)&_ZN7S676C113v87Ev,
};
extern VTBL_ENTRY _ZTI7S676C11[];
extern  VTBL_ENTRY _ZTV7S676C11[];
Class_Descriptor cd_S676C11 = {  "S676C11", // class name
  0,0,//no base classes
  &(vtc_S676C11[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S676C11),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S676C11),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S676C2  : S676C3 , S676C11 {
  virtual  ~S676C2(); // _ZN6S676C2D1Ev
  virtual void  v88(); // _ZN6S676C23v88Ev
  virtual void  v89(); // _ZN6S676C23v89Ev
  virtual void  v90(); // _ZN6S676C23v90Ev
  virtual void  v91(); // _ZN6S676C23v91Ev
  virtual void  v92(); // _ZN6S676C23v92Ev
  virtual void  v93(); // _ZN6S676C23v93Ev
  virtual void  v94(); // _ZN6S676C23v94Ev
  virtual void  v95(); // _ZN6S676C23v95Ev
  virtual void  v96(); // _ZN6S676C23v96Ev
  virtual void  v97(); // _ZN6S676C23v97Ev
  S676C2(); // tgen
};
//SIG(-1 S676C2) C1{ BC2{ BC3{ BC4{ vd 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 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v75 v76} vd v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 Fc FC6{ BC7{ BC8{ m Fp Fi[2]}}} FC9{ m Fp FC5}} BC10{ vd v89 v90 v91 v92} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10}


 S676C2 ::~S676C2(){ note_dtor("S676C2", this);}
void  S676C2 ::v88(){vfunc_called(this, "_ZN6S676C23v88Ev");}
void  S676C2 ::v89(){vfunc_called(this, "_ZN6S676C23v89Ev");}
void  S676C2 ::v90(){vfunc_called(this, "_ZN6S676C23v90Ev");}
void  S676C2 ::v91(){vfunc_called(this, "_ZN6S676C23v91Ev");}
void  S676C2 ::v92(){vfunc_called(this, "_ZN6S676C23v92Ev");}
void  S676C2 ::v93(){vfunc_called(this, "_ZN6S676C23v93Ev");}
void  S676C2 ::v94(){vfunc_called(this, "_ZN6S676C23v94Ev");}
void  S676C2 ::v95(){vfunc_called(this, "_ZN6S676C23v95Ev");}
void  S676C2 ::v96(){vfunc_called(this, "_ZN6S676C23v96Ev");}
void  S676C2 ::v97(){vfunc_called(this, "_ZN6S676C23v97Ev");}
S676C2 ::S676C2(){ note_ctor("S676C2", this);} // tgen

static void Test_S676C2()
{
  extern Class_Descriptor cd_S676C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(19,24)];
    init_test(&cd_S676C2, buf);
    S676C2 *dp, &lv = *(dp=new (buf) S676C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,92), "sizeof(S676C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S676C2)");
    check_base_class_offset(lv, (S676C5*)(S676C4*)(S676C3*), 0, "S676C2");
    check_base_class_offset(lv, (S676C4*)(S676C3*), 0, "S676C2");
    check_base_class_offset(lv, (S676C3*), 0, "S676C2");
    check_base_class_offset(lv, (S676C11*), ABISELECT(136,88), "S676C2");
    test_class_info(&lv, &cd_S676C2);
    dp->~S676C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS676C2(Test_S676C2, "S676C2", ABISELECT(144,92));

#else // __cplusplus

extern void _ZN6S676C2C1Ev();
extern void _ZN6S676C2D1Ev();
Name_Map name_map_S676C2[] = {
  NSPAIR(_ZN6S676C2C1Ev),
  NSPAIR(_ZN6S676C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S676C5;
extern VTBL_ENTRY _ZTI6S676C5[];
extern  VTBL_ENTRY _ZTV6S676C5[];
extern Class_Descriptor cd_S676C4;
extern VTBL_ENTRY _ZTI6S676C4[];
extern  VTBL_ENTRY _ZTV6S676C4[];
extern Class_Descriptor cd_S676C3;
extern VTBL_ENTRY _ZTI6S676C3[];
extern  VTBL_ENTRY _ZTV6S676C3[];
extern Class_Descriptor cd_S676C11;
extern VTBL_ENTRY _ZTI7S676C11[];
extern  VTBL_ENTRY _ZTV7S676C11[];
static Base_Class bases_S676C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S676C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S676C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S676C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S676C11,    ABISELECT(136,88), //bcp->offset
    92, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S676C2[];
extern void _ZN6S676C2D1Ev();
extern void _ZN6S676C2D0Ev();
extern void _ZN6S676C52v6Ev();
extern void _ZN6S676C52v7Ev();
extern void _ZN6S676C52v8Ev();
extern void _ZN6S676C52v9Ev();
extern void _ZN6S676C53v10Ev();
extern void _ZN6S676C53v11Ev();
extern void _ZN6S676C53v12Ev();
extern void _ZN6S676C53v13Ev();
extern void _ZN6S676C53v14Ev();
extern void _ZN6S676C53v15Ev();
extern void _ZN6S676C53v16Ev();
extern void _ZN6S676C53v17Ev();
extern void _ZN6S676C53v18Ev();
extern void _ZN6S676C53v19Ev();
extern void _ZN6S676C53v20Ev();
extern void _ZN6S676C53v21Ev();
extern void _ZN6S676C53v22Ev();
extern void _ZN6S676C53v23Ev();
extern void _ZN6S676C53v24Ev();
extern void _ZN6S676C53v25Ev();
extern void _ZN6S676C53v26Ev();
extern void _ZN6S676C53v27Ev();
extern void _ZN6S676C53v28Ev();
extern void _ZN6S676C53v29Ev();
extern void _ZN6S676C53v30Ev();
extern void _ZN6S676C53v31Ev();
extern void _ZN6S676C53v32Ev();
extern void _ZN6S676C53v33Ev();
extern void _ZN6S676C53v34Ev();
extern void _ZN6S676C53v35Ev();
extern void _ZN6S676C53v36Ev();
extern void _ZN6S676C53v37Ev();
extern void _ZN6S676C53v38Ev();
extern void _ZN6S676C53v39Ev();
extern void _ZN6S676C53v40Ev();
extern void _ZN6S676C53v41Ev();
extern void _ZN6S676C53v42Ev();
extern void _ZN6S676C53v43Ev();
extern void _ZN6S676C53v44Ev();
extern void _ZN6S676C53v45Ev();
extern void _ZN6S676C53v46Ev();
extern void _ZN6S676C53v47Ev();
extern void _ZN6S676C53v48Ev();
extern void _ZN6S676C53v49Ev();
extern void _ZN6S676C53v50Ev();
extern void _ZN6S676C53v51Ev();
extern void _ZN6S676C53v52Ev();
extern void _ZN6S676C53v53Ev();
extern void _ZN6S676C53v54Ev();
extern void _ZN6S676C53v55Ev();
extern void _ZN6S676C53v56Ev();
extern void _ZN6S676C53v57Ev();
extern void _ZN6S676C53v58Ev();
extern void _ZN6S676C53v59Ev();
extern void _ZN6S676C53v60Ev();
extern void _ZN6S676C53v61Ev();
extern void _ZN6S676C53v62Ev();
extern void _ZN6S676C53v63Ev();
extern void _ZN6S676C53v64Ev();
extern void _ZN6S676C53v65Ev();
extern void _ZN6S676C53v66Ev();
extern void _ZN6S676C53v67Ev();
extern void _ZN6S676C53v68Ev();
extern void _ZN6S676C53v69Ev();
extern void _ZN6S676C43v70Ev();
extern void _ZN6S676C43v71Ev();
extern void _ZN6S676C33v72Ev();
extern void _ZN6S676C33v73Ev();
extern void _ZN6S676C33v74Ev();
extern void _ZN6S676C33v75Ev();
extern void _ZN6S676C33v76Ev();
extern void _ZN6S676C33v77Ev();
extern void _ZN6S676C33v78Ev();
extern void _ZN6S676C33v79Ev();
extern void _ZN6S676C33v80Ev();
extern void _ZN6S676C33v81Ev();
extern void _ZN6S676C33v82Ev();
extern void _ZN6S676C33v83Ev();
extern void _ZN6S676C23v88Ev();
extern void _ZN6S676C23v89Ev();
extern void _ZN6S676C23v90Ev();
extern void _ZN6S676C23v91Ev();
extern void _ZN6S676C23v92Ev();
extern void _ZN6S676C23v93Ev();
extern void _ZN6S676C23v94Ev();
extern void _ZN6S676C23v95Ev();
extern void _ZN6S676C23v96Ev();
extern void _ZN6S676C23v97Ev();
extern void ABISELECT(_ZThn136_N6S676C2D1Ev,_ZThn88_N6S676C2D1Ev)();
extern void ABISELECT(_ZThn136_N6S676C2D0Ev,_ZThn88_N6S676C2D0Ev)();
extern void _ZN7S676C113v84Ev();
extern void _ZN7S676C113v85Ev();
extern void _ZN7S676C113v86Ev();
extern void _ZN7S676C113v87Ev();
static  VTBL_ENTRY vtc_S676C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S676C2[0]),
  (VTBL_ENTRY)&_ZN6S676C2D1Ev,
  (VTBL_ENTRY)&_ZN6S676C2D0Ev,
  (VTBL_ENTRY)&_ZN6S676C52v6Ev,
  (VTBL_ENTRY)&_ZN6S676C52v7Ev,
  (VTBL_ENTRY)&_ZN6S676C52v8Ev,
  (VTBL_ENTRY)&_ZN6S676C52v9Ev,
  (VTBL_ENTRY)&_ZN6S676C53v10Ev,
  (VTBL_ENTRY)&_ZN6S676C53v11Ev,
  (VTBL_ENTRY)&_ZN6S676C53v12Ev,
  (VTBL_ENTRY)&_ZN6S676C53v13Ev,
  (VTBL_ENTRY)&_ZN6S676C53v14Ev,
  (VTBL_ENTRY)&_ZN6S676C53v15Ev,
  (VTBL_ENTRY)&_ZN6S676C53v16Ev,
  (VTBL_ENTRY)&_ZN6S676C53v17Ev,
  (VTBL_ENTRY)&_ZN6S676C53v18Ev,
  (VTBL_ENTRY)&_ZN6S676C53v19Ev,
  (VTBL_ENTRY)&_ZN6S676C53v20Ev,
  (VTBL_ENTRY)&_ZN6S676C53v21Ev,
  (VTBL_ENTRY)&_ZN6S676C53v22Ev,
  (VTBL_ENTRY)&_ZN6S676C53v23Ev,
  (VTBL_ENTRY)&_ZN6S676C53v24Ev,
  (VTBL_ENTRY)&_ZN6S676C53v25Ev,
  (VTBL_ENTRY)&_ZN6S676C53v26Ev,
  (VTBL_ENTRY)&_ZN6S676C53v27Ev,
  (VTBL_ENTRY)&_ZN6S676C53v28Ev,
  (VTBL_ENTRY)&_ZN6S676C53v29Ev,
  (VTBL_ENTRY)&_ZN6S676C53v30Ev,
  (VTBL_ENTRY)&_ZN6S676C53v31Ev,
  (VTBL_ENTRY)&_ZN6S676C53v32Ev,
  (VTBL_ENTRY)&_ZN6S676C53v33Ev,
  (VTBL_ENTRY)&_ZN6S676C53v34Ev,
  (VTBL_ENTRY)&_ZN6S676C53v35Ev,
  (VTBL_ENTRY)&_ZN6S676C53v36Ev,
  (VTBL_ENTRY)&_ZN6S676C53v37Ev,
  (VTBL_ENTRY)&_ZN6S676C53v38Ev,
  (VTBL_ENTRY)&_ZN6S676C53v39Ev,
  (VTBL_ENTRY)&_ZN6S676C53v40Ev,
  (VTBL_ENTRY)&_ZN6S676C53v41Ev,
  (VTBL_ENTRY)&_ZN6S676C53v42Ev,
  (VTBL_ENTRY)&_ZN6S676C53v43Ev,
  (VTBL_ENTRY)&_ZN6S676C53v44Ev,
  (VTBL_ENTRY)&_ZN6S676C53v45Ev,
  (VTBL_ENTRY)&_ZN6S676C53v46Ev,
  (VTBL_ENTRY)&_ZN6S676C53v47Ev,
  (VTBL_ENTRY)&_ZN6S676C53v48Ev,
  (VTBL_ENTRY)&_ZN6S676C53v49Ev,
  (VTBL_ENTRY)&_ZN6S676C53v50Ev,
  (VTBL_ENTRY)&_ZN6S676C53v51Ev,
  (VTBL_ENTRY)&_ZN6S676C53v52Ev,
  (VTBL_ENTRY)&_ZN6S676C53v53Ev,
  (VTBL_ENTRY)&_ZN6S676C53v54Ev,
  (VTBL_ENTRY)&_ZN6S676C53v55Ev,
  (VTBL_ENTRY)&_ZN6S676C53v56Ev,
  (VTBL_ENTRY)&_ZN6S676C53v57Ev,
  (VTBL_ENTRY)&_ZN6S676C53v58Ev,
  (VTBL_ENTRY)&_ZN6S676C53v59Ev,
  (VTBL_ENTRY)&_ZN6S676C53v60Ev,
  (VTBL_ENTRY)&_ZN6S676C53v61Ev,
  (VTBL_ENTRY)&_ZN6S676C53v62Ev,
  (VTBL_ENTRY)&_ZN6S676C53v63Ev,
  (VTBL_ENTRY)&_ZN6S676C53v64Ev,
  (VTBL_ENTRY)&_ZN6S676C53v65Ev,
  (VTBL_ENTRY)&_ZN6S676C53v66Ev,
  (VTBL_ENTRY)&_ZN6S676C53v67Ev,
  (VTBL_ENTRY)&_ZN6S676C53v68Ev,
  (VTBL_ENTRY)&_ZN6S676C53v69Ev,
  (VTBL_ENTRY)&_ZN6S676C43v70Ev,
  (VTBL_ENTRY)&_ZN6S676C43v71Ev,
  (VTBL_ENTRY)&_ZN6S676C33v72Ev,
  (VTBL_ENTRY)&_ZN6S676C33v73Ev,
  (VTBL_ENTRY)&_ZN6S676C33v74Ev,
  (VTBL_ENTRY)&_ZN6S676C33v75Ev,
  (VTBL_ENTRY)&_ZN6S676C33v76Ev,
  (VTBL_ENTRY)&_ZN6S676C33v77Ev,
  (VTBL_ENTRY)&_ZN6S676C33v78Ev,
  (VTBL_ENTRY)&_ZN6S676C33v79Ev,
  (VTBL_ENTRY)&_ZN6S676C33v80Ev,
  (VTBL_ENTRY)&_ZN6S676C33v81Ev,
  (VTBL_ENTRY)&_ZN6S676C33v82Ev,
  (VTBL_ENTRY)&_ZN6S676C33v83Ev,
  (VTBL_ENTRY)&_ZN6S676C23v88Ev,
  (VTBL_ENTRY)&_ZN6S676C23v89Ev,
  (VTBL_ENTRY)&_ZN6S676C23v90Ev,
  (VTBL_ENTRY)&_ZN6S676C23v91Ev,
  (VTBL_ENTRY)&_ZN6S676C23v92Ev,
  (VTBL_ENTRY)&_ZN6S676C23v93Ev,
  (VTBL_ENTRY)&_ZN6S676C23v94Ev,
  (VTBL_ENTRY)&_ZN6S676C23v95Ev,
  (VTBL_ENTRY)&_ZN6S676C23v96Ev,
  (VTBL_ENTRY)&_ZN6S676C23v97Ev,
  ABISELECT(-136,-88),
  (VTBL_ENTRY)&(_ZTI6S676C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn136_N6S676C2D1Ev,_ZThn88_N6S676C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn136_N6S676C2D0Ev,_ZThn88_N6S676C2D0Ev),
  (VTBL_ENTRY)&_ZN7S676C113v84Ev,
  (VTBL_ENTRY)&_ZN7S676C113v85Ev,
  (VTBL_ENTRY)&_ZN7S676C113v86Ev,
  (VTBL_ENTRY)&_ZN7S676C113v87Ev,
};
extern VTBL_ENTRY _ZTI6S676C2[];
extern  VTBL_ENTRY _ZTV6S676C2[];
Class_Descriptor cd_S676C2 = {  "S676C2", // class name
  bases_S676C2, 4,
  &(vtc_S676C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(144,92), // object size
  NSPAIRA(_ZTI6S676C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV6S676C2),100, //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  S676C1  : S676C2 {
  ::S3352C11 s676c1f0;
  virtual  ~S676C1(); // _ZN6S676C1D1Ev
  virtual void  v1(); // _ZN6S676C12v1Ev
  virtual void  v2(); // _ZN6S676C12v2Ev
  virtual void  v3(); // _ZN6S676C12v3Ev
  virtual void  v4(); // _ZN6S676C12v4Ev
  virtual void  v5(); // _ZN6S676C12v5Ev
  S676C1(); // tgen
};
//SIG(1 S676C1) C1{ BC2{ BC3{ BC4{ BC5{ vd v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 Fi FL Fp[4] Fi[2] Fp FC6{ m Fi[2]} Fp[2]} vd v70 v71} vd v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 Fc FC7{ BC8{ BC9{ m Fp Fi[2]}}} FC10{ m Fp FC6}} BC11{ vd v84 v85 v86 v87} vd v88 v89 v90 v91 v92 v93 v94 v95 v96 v97} vd v1 v2 v3 v4 v5 FC12{ BC13{ BC9}}}


 S676C1 ::~S676C1(){ note_dtor("S676C1", this);}
void  S676C1 ::v1(){vfunc_called(this, "_ZN6S676C12v1Ev");}
void  S676C1 ::v2(){vfunc_called(this, "_ZN6S676C12v2Ev");}
void  S676C1 ::v3(){vfunc_called(this, "_ZN6S676C12v3Ev");}
void  S676C1 ::v4(){vfunc_called(this, "_ZN6S676C12v4Ev");}
void  S676C1 ::v5(){vfunc_called(this, "_ZN6S676C12v5Ev");}
S676C1 ::S676C1(){ note_ctor("S676C1", this);} // tgen

static void Test_S676C1()
{
  extern Class_Descriptor cd_S676C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(21,27)];
    init_test(&cd_S676C1, buf);
    S676C1 *dp, &lv = *(dp=new (buf) S676C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,104), "sizeof(S676C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S676C1)");
    check_base_class_offset(lv, (S676C5*)(S676C4*)(S676C3*)(S676C2*), 0, "S676C1");
    check_base_class_offset(lv, (S676C4*)(S676C3*)(S676C2*), 0, "S676C1");
    check_base_class_offset(lv, (S676C3*)(S676C2*), 0, "S676C1");
    check_base_class_offset(lv, (S676C11*)(S676C2*), ABISELECT(136,88), "S676C1");
    check_base_class_offset(lv, (S676C2*), 0, "S676C1");
    check_field_offset(lv, s676c1f0, ABISELECT(144,92), "S676C1.s676c1f0");
    test_class_info(&lv, &cd_S676C1);
    dp->~S676C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS676C1(Test_S676C1, "S676C1", ABISELECT(160,104));

#else // __cplusplus

extern void _ZN6S676C1C1Ev();
extern void _ZN6S676C1D1Ev();
Name_Map name_map_S676C1[] = {
  NSPAIR(_ZN6S676C1C1Ev),
  NSPAIR(_ZN6S676C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S676C5;
extern VTBL_ENTRY _ZTI6S676C5[];
extern  VTBL_ENTRY _ZTV6S676C5[];
extern Class_Descriptor cd_S676C4;
extern VTBL_ENTRY _ZTI6S676C4[];
extern  VTBL_ENTRY _ZTV6S676C4[];
extern Class_Descriptor cd_S676C3;
extern VTBL_ENTRY _ZTI6S676C3[];
extern  VTBL_ENTRY _ZTV6S676C3[];
extern Class_Descriptor cd_S676C11;
extern VTBL_ENTRY _ZTI7S676C11[];
extern  VTBL_ENTRY _ZTV7S676C11[];
extern Class_Descriptor cd_S676C2;
extern VTBL_ENTRY _ZTI6S676C2[];
extern  VTBL_ENTRY _ZTV6S676C2[];
static Base_Class bases_S676C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S676C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S676C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S676C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S676C11,    ABISELECT(136,88), //bcp->offset
    97, //bcp->virtual_function_table_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_S676C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S676C1[];
extern void _ZN6S676C1D1Ev();
extern void _ZN6S676C1D0Ev();
extern void _ZN6S676C52v6Ev();
extern void _ZN6S676C52v7Ev();
extern void _ZN6S676C52v8Ev();
extern void _ZN6S676C52v9Ev();
extern void _ZN6S676C53v10Ev();
extern void _ZN6S676C53v11Ev();
extern void _ZN6S676C53v12Ev();
extern void _ZN6S676C53v13Ev();
extern void _ZN6S676C53v14Ev();
extern void _ZN6S676C53v15Ev();
extern void _ZN6S676C53v16Ev();
extern void _ZN6S676C53v17Ev();
extern void _ZN6S676C53v18Ev();
extern void _ZN6S676C53v19Ev();
extern void _ZN6S676C53v20Ev();
extern void _ZN6S676C53v21Ev();
extern void _ZN6S676C53v22Ev();
extern void _ZN6S676C53v23Ev();
extern void _ZN6S676C53v24Ev();
extern void _ZN6S676C53v25Ev();
extern void _ZN6S676C53v26Ev();
extern void _ZN6S676C53v27Ev();
extern void _ZN6S676C53v28Ev();
extern void _ZN6S676C53v29Ev();
extern void _ZN6S676C53v30Ev();
extern void _ZN6S676C53v31Ev();
extern void _ZN6S676C53v32Ev();
extern void _ZN6S676C53v33Ev();
extern void _ZN6S676C53v34Ev();
extern void _ZN6S676C53v35Ev();
extern void _ZN6S676C53v36Ev();
extern void _ZN6S676C53v37Ev();
extern void _ZN6S676C53v38Ev();
extern void _ZN6S676C53v39Ev();
extern void _ZN6S676C53v40Ev();
extern void _ZN6S676C53v41Ev();
extern void _ZN6S676C53v42Ev();
extern void _ZN6S676C53v43Ev();
extern void _ZN6S676C53v44Ev();
extern void _ZN6S676C53v45Ev();
extern void _ZN6S676C53v46Ev();
extern void _ZN6S676C53v47Ev();
extern void _ZN6S676C53v48Ev();
extern void _ZN6S676C53v49Ev();
extern void _ZN6S676C53v50Ev();
extern void _ZN6S676C53v51Ev();
extern void _ZN6S676C53v52Ev();
extern void _ZN6S676C53v53Ev();
extern void _ZN6S676C53v54Ev();
extern void _ZN6S676C53v55Ev();
extern void _ZN6S676C53v56Ev();
extern void _ZN6S676C53v57Ev();
extern void _ZN6S676C53v58Ev();
extern void _ZN6S676C53v59Ev();
extern void _ZN6S676C53v60Ev();
extern void _ZN6S676C53v61Ev();
extern void _ZN6S676C53v62Ev();
extern void _ZN6S676C53v63Ev();
extern void _ZN6S676C53v64Ev();
extern void _ZN6S676C53v65Ev();
extern void _ZN6S676C53v66Ev();
extern void _ZN6S676C53v67Ev();
extern void _ZN6S676C53v68Ev();
extern void _ZN6S676C53v69Ev();
extern void _ZN6S676C43v70Ev();
extern void _ZN6S676C43v71Ev();
extern void _ZN6S676C33v72Ev();
extern void _ZN6S676C33v73Ev();
extern void _ZN6S676C33v74Ev();
extern void _ZN6S676C33v75Ev();
extern void _ZN6S676C33v76Ev();
extern void _ZN6S676C33v77Ev();
extern void _ZN6S676C33v78Ev();
extern void _ZN6S676C33v79Ev();
extern void _ZN6S676C33v80Ev();
extern void _ZN6S676C33v81Ev();
extern void _ZN6S676C33v82Ev();
extern void _ZN6S676C33v83Ev();
extern void _ZN6S676C23v88Ev();
extern void _ZN6S676C23v89Ev();
extern void _ZN6S676C23v90Ev();
extern void _ZN6S676C23v91Ev();
extern void _ZN6S676C23v92Ev();
extern void _ZN6S676C23v93Ev();
extern void _ZN6S676C23v94Ev();
extern void _ZN6S676C23v95Ev();
extern void _ZN6S676C23v96Ev();
extern void _ZN6S676C23v97Ev();
extern void _ZN6S676C12v1Ev();
extern void _ZN6S676C12v2Ev();
extern void _ZN6S676C12v3Ev();
extern void _ZN6S676C12v4Ev();
extern void _ZN6S676C12v5Ev();
extern void ABISELECT(_ZThn136_N6S676C1D1Ev,_ZThn88_N6S676C1D1Ev)();
extern void ABISELECT(_ZThn136_N6S676C1D0Ev,_ZThn88_N6S676C1D0Ev)();
extern void _ZN7S676C113v84Ev();
extern void _ZN7S676C113v85Ev();
extern void _ZN7S676C113v86Ev();
extern void _ZN7S676C113v87Ev();
static  VTBL_ENTRY vtc_S676C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S676C1[0]),
  (VTBL_ENTRY)&_ZN6S676C1D1Ev,
  (VTBL_ENTRY)&_ZN6S676C1D0Ev,
  (VTBL_ENTRY)&_ZN6S676C52v6Ev,
  (VTBL_ENTRY)&_ZN6S676C52v7Ev,
  (VTBL_ENTRY)&_ZN6S676C52v8Ev,
  (VTBL_ENTRY)&_ZN6S676C52v9Ev,
  (VTBL_ENTRY)&_ZN6S676C53v10Ev,
  (VTBL_ENTRY)&_ZN6S676C53v11Ev,
  (VTBL_ENTRY)&_ZN6S676C53v12Ev,
  (VTBL_ENTRY)&_ZN6S676C53v13Ev,
  (VTBL_ENTRY)&_ZN6S676C53v14Ev,
  (VTBL_ENTRY)&_ZN6S676C53v15Ev,
  (VTBL_ENTRY)&_ZN6S676C53v16Ev,
  (VTBL_ENTRY)&_ZN6S676C53v17Ev,
  (VTBL_ENTRY)&_ZN6S676C53v18Ev,
  (VTBL_ENTRY)&_ZN6S676C53v19Ev,
  (VTBL_ENTRY)&_ZN6S676C53v20Ev,
  (VTBL_ENTRY)&_ZN6S676C53v21Ev,
  (VTBL_ENTRY)&_ZN6S676C53v22Ev,
  (VTBL_ENTRY)&_ZN6S676C53v23Ev,
  (VTBL_ENTRY)&_ZN6S676C53v24Ev,
  (VTBL_ENTRY)&_ZN6S676C53v25Ev,
  (VTBL_ENTRY)&_ZN6S676C53v26Ev,
  (VTBL_ENTRY)&_ZN6S676C53v27Ev,
  (VTBL_ENTRY)&_ZN6S676C53v28Ev,
  (VTBL_ENTRY)&_ZN6S676C53v29Ev,
  (VTBL_ENTRY)&_ZN6S676C53v30Ev,
  (VTBL_ENTRY)&_ZN6S676C53v31Ev,
  (VTBL_ENTRY)&_ZN6S676C53v32Ev,
  (VTBL_ENTRY)&_ZN6S676C53v33Ev,
  (VTBL_ENTRY)&_ZN6S676C53v34Ev,
  (VTBL_ENTRY)&_ZN6S676C53v35Ev,
  (VTBL_ENTRY)&_ZN6S676C53v36Ev,
  (VTBL_ENTRY)&_ZN6S676C53v37Ev,
  (VTBL_ENTRY)&_ZN6S676C53v38Ev,
  (VTBL_ENTRY)&_ZN6S676C53v39Ev,
  (VTBL_ENTRY)&_ZN6S676C53v40Ev,
  (VTBL_ENTRY)&_ZN6S676C53v41Ev,
  (VTBL_ENTRY)&_ZN6S676C53v42Ev,
  (VTBL_ENTRY)&_ZN6S676C53v43Ev,
  (VTBL_ENTRY)&_ZN6S676C53v44Ev,
  (VTBL_ENTRY)&_ZN6S676C53v45Ev,
  (VTBL_ENTRY)&_ZN6S676C53v46Ev,
  (VTBL_ENTRY)&_ZN6S676C53v47Ev,
  (VTBL_ENTRY)&_ZN6S676C53v48Ev,
  (VTBL_ENTRY)&_ZN6S676C53v49Ev,
  (VTBL_ENTRY)&_ZN6S676C53v50Ev,
  (VTBL_ENTRY)&_ZN6S676C53v51Ev,
  (VTBL_ENTRY)&_ZN6S676C53v52Ev,
  (VTBL_ENTRY)&_ZN6S676C53v53Ev,
  (VTBL_ENTRY)&_ZN6S676C53v54Ev,
  (VTBL_ENTRY)&_ZN6S676C53v55Ev,
  (VTBL_ENTRY)&_ZN6S676C53v56Ev,
  (VTBL_ENTRY)&_ZN6S676C53v57Ev,
  (VTBL_ENTRY)&_ZN6S676C53v58Ev,
  (VTBL_ENTRY)&_ZN6S676C53v59Ev,
  (VTBL_ENTRY)&_ZN6S676C53v60Ev,
  (VTBL_ENTRY)&_ZN6S676C53v61Ev,
  (VTBL_ENTRY)&_ZN6S676C53v62Ev,
  (VTBL_ENTRY)&_ZN6S676C53v63Ev,
  (VTBL_ENTRY)&_ZN6S676C53v64Ev,
  (VTBL_ENTRY)&_ZN6S676C53v65Ev,
  (VTBL_ENTRY)&_ZN6S676C53v66Ev,
  (VTBL_ENTRY)&_ZN6S676C53v67Ev,
  (VTBL_ENTRY)&_ZN6S676C53v68Ev,
  (VTBL_ENTRY)&_ZN6S676C53v69Ev,
  (VTBL_ENTRY)&_ZN6S676C43v70Ev,
  (VTBL_ENTRY)&_ZN6S676C43v71Ev,
  (VTBL_ENTRY)&_ZN6S676C33v72Ev,
  (VTBL_ENTRY)&_ZN6S676C33v73Ev,
  (VTBL_ENTRY)&_ZN6S676C33v74Ev,
  (VTBL_ENTRY)&_ZN6S676C33v75Ev,
  (VTBL_ENTRY)&_ZN6S676C33v76Ev,
  (VTBL_ENTRY)&_ZN6S676C33v77Ev,
  (VTBL_ENTRY)&_ZN6S676C33v78Ev,
  (VTBL_ENTRY)&_ZN6S676C33v79Ev,
  (VTBL_ENTRY)&_ZN6S676C33v80Ev,
  (VTBL_ENTRY)&_ZN6S676C33v81Ev,
  (VTBL_ENTRY)&_ZN6S676C33v82Ev,
  (VTBL_ENTRY)&_ZN6S676C33v83Ev,
  (VTBL_ENTRY)&_ZN6S676C23v88Ev,
  (VTBL_ENTRY)&_ZN6S676C23v89Ev,
  (VTBL_ENTRY)&_ZN6S676C23v90Ev,
  (VTBL_ENTRY)&_ZN6S676C23v91Ev,
  (VTBL_ENTRY)&_ZN6S676C23v92Ev,
  (VTBL_ENTRY)&_ZN6S676C23v93Ev,
  (VTBL_ENTRY)&_ZN6S676C23v94Ev,
  (VTBL_ENTRY)&_ZN6S676C23v95Ev,
  (VTBL_ENTRY)&_ZN6S676C23v96Ev,
  (VTBL_ENTRY)&_ZN6S676C23v97Ev,
  (VTBL_ENTRY)&_ZN6S676C12v1Ev,
  (VTBL_ENTRY)&_ZN6S676C12v2Ev,
  (VTBL_ENTRY)&_ZN6S676C12v3Ev,
  (VTBL_ENTRY)&_ZN6S676C12v4Ev,
  (VTBL_ENTRY)&_ZN6S676C12v5Ev,
  ABISELECT(-136,-88),
  (VTBL_ENTRY)&(_ZTI6S676C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn136_N6S676C1D1Ev,_ZThn88_N6S676C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn136_N6S676C1D0Ev,_ZThn88_N6S676C1D0Ev),
  (VTBL_ENTRY)&_ZN7S676C113v84Ev,
  (VTBL_ENTRY)&_ZN7S676C113v85Ev,
  (VTBL_ENTRY)&_ZN7S676C113v86Ev,
  (VTBL_ENTRY)&_ZN7S676C113v87Ev,
};
extern VTBL_ENTRY _ZTI6S676C1[];
extern  VTBL_ENTRY _ZTV6S676C1[];
Class_Descriptor cd_S676C1 = {  "S676C1", // class name
  bases_S676C1, 5,
  &(vtc_S676C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(160,104), // object size
  NSPAIRA(_ZTI6S676C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S676C1),105, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  5, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S705C5  {
  int s705c5f0;
  __tsi64 s705c5f1;
  void *s705c5f2[4];
  int s705c5f3[2];
  void *s705c5f4;
  ::S3352C4_nt s705c5f5;
  void *s705c5f6[2];
  virtual  ~S705C5(); // _ZN6S705C5D1Ev
  virtual void  v8(); // _ZN6S705C52v8Ev
  virtual void  v9(); // _ZN6S705C52v9Ev
  virtual void  v10(); // _ZN6S705C53v10Ev
  virtual void  v11(); // _ZN6S705C53v11Ev
  virtual void  v12(); // _ZN6S705C53v12Ev
  virtual void  v13(); // _ZN6S705C53v13Ev
  virtual void  v14(); // _ZN6S705C53v14Ev
  virtual void  v15(); // _ZN6S705C53v15Ev
  virtual void  v16(); // _ZN6S705C53v16Ev
  virtual void  v17(); // _ZN6S705C53v17Ev
  virtual void  v18(); // _ZN6S705C53v18Ev
  virtual void  v19(); // _ZN6S705C53v19Ev
  virtual void  v20(); // _ZN6S705C53v20Ev
  virtual void  v21(); // _ZN6S705C53v21Ev
  virtual void  v22(); // _ZN6S705C53v22Ev
  virtual void  v23(); // _ZN6S705C53v23Ev
  virtual void  v24(); // _ZN6S705C53v24Ev
  virtual void  v25(); // _ZN6S705C53v25Ev
  virtual void  v26(); // _ZN6S705C53v26Ev
  virtual void  v27(); // _ZN6S705C53v27Ev
  virtual void  v28(); // _ZN6S705C53v28Ev
  virtual void  v29(); // _ZN6S705C53v29Ev
  virtual void  v30(); // _ZN6S705C53v30Ev
  virtual void  v31(); // _ZN6S705C53v31Ev
  virtual void  v32(); // _ZN6S705C53v32Ev
  virtual void  v33(); // _ZN6S705C53v33Ev
  virtual void  v34(); // _ZN6S705C53v34Ev
  virtual void  v35(); // _ZN6S705C53v35Ev
  virtual void  v36(); // _ZN6S705C53v36Ev
  virtual void  v37(); // _ZN6S705C53v37Ev
  virtual void  v38(); // _ZN6S705C53v38Ev
  virtual void  v39(); // _ZN6S705C53v39Ev
  virtual void  v40(); // _ZN6S705C53v40Ev
  virtual void  v41(); // _ZN6S705C53v41Ev
  virtual void  v42(); // _ZN6S705C53v42Ev
  virtual void  v43(); // _ZN6S705C53v43Ev
  virtual void  v44(); // _ZN6S705C53v44Ev
  virtual void  v45(); // _ZN6S705C53v45Ev
  virtual void  v46(); // _ZN6S705C53v46Ev
  virtual void  v47(); // _ZN6S705C53v47Ev
  virtual void  v48(); // _ZN6S705C53v48Ev
  virtual void  v49(); // _ZN6S705C53v49Ev
  virtual void  v50(); // _ZN6S705C53v50Ev
  virtual void  v51(); // _ZN6S705C53v51Ev
  virtual void  v52(); // _ZN6S705C53v52Ev
  virtual void  v53(); // _ZN6S705C53v53Ev
  virtual void  v54(); // _ZN6S705C53v54Ev
  virtual void  v55(); // _ZN6S705C53v55Ev
  virtual void  v56(); // _ZN6S705C53v56Ev
  virtual void  v57(); // _ZN6S705C53v57Ev
  virtual void  v58(); // _ZN6S705C53v58Ev
  virtual void  v59(); // _ZN6S705C53v59Ev
  virtual void  v60(); // _ZN6S705C53v60Ev
  virtual void  v61(); // _ZN6S705C53v61Ev
  virtual void  v62(); // _ZN6S705C53v62Ev
  virtual void  v63(); // _ZN6S705C53v63Ev
  virtual void  v64(); // _ZN6S705C53v64Ev
  virtual void  v65(); // _ZN6S705C53v65Ev
  virtual void  v66(); // _ZN6S705C53v66Ev
  virtual void  v67(); // _ZN6S705C53v67Ev
  virtual void  v68(); // _ZN6S705C53v68Ev
  virtual void  v69(); // _ZN6S705C53v69Ev
  virtual void  v70(); // _ZN6S705C53v70Ev
  virtual void  v71(); // _ZN6S705C53v71Ev
  S705C5(); // tgen
};
//SIG(-1 S705C5) 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]}


 S705C5 ::~S705C5(){ note_dtor("S705C5", this);}
void  S705C5 ::v8(){vfunc_called(this, "_ZN6S705C52v8Ev");}
void  S705C5 ::v9(){vfunc_called(this, "_ZN6S705C52v9Ev");}
void  S705C5 ::v10(){vfunc_called(this, "_ZN6S705C53v10Ev");}
void  S705C5 ::v11(){vfunc_called(this, "_ZN6S705C53v11Ev");}
void  S705C5 ::v12(){vfunc_called(this, "_ZN6S705C53v12Ev");}
void  S705C5 ::v13(){vfunc_called(this, "_ZN6S705C53v13Ev");}
void  S705C5 ::v14(){vfunc_called(this, "_ZN6S705C53v14Ev");}
void  S705C5 ::v15(){vfunc_called(this, "_ZN6S705C53v15Ev");}
void  S705C5 ::v16(){vfunc_called(this, "_ZN6S705C53v16Ev");}
void  S705C5 ::v17(){vfunc_called(this, "_ZN6S705C53v17Ev");}
void  S705C5 ::v18(){vfunc_called(this, "_ZN6S705C53v18Ev");}
void  S705C5 ::v19(){vfunc_called(this, "_ZN6S705C53v19Ev");}
void  S705C5 ::v20(){vfunc_called(this, "_ZN6S705C53v20Ev");}
void  S705C5 ::v21(){vfunc_called(this, "_ZN6S705C53v21Ev");}
void  S705C5 ::v22(){vfunc_called(this, "_ZN6S705C53v22Ev");}
void  S705C5 ::v23(){vfunc_called(this, "_ZN6S705C53v23Ev");}
void  S705C5 ::v24(){vfunc_called(this, "_ZN6S705C53v24Ev");}
void  S705C5 ::v25(){vfunc_called(this, "_ZN6S705C53v25Ev");}
void  S705C5 ::v26(){vfunc_called(this, "_ZN6S705C53v26Ev");}
void  S705C5 ::v27(){vfunc_called(this, "_ZN6S705C53v27Ev");}
void  S705C5 ::v28(){vfunc_called(this, "_ZN6S705C53v28Ev");}
void  S705C5 ::v29(){vfunc_called(this, "_ZN6S705C53v29Ev");}
void  S705C5 ::v30(){vfunc_called(this, "_ZN6S705C53v30Ev");}
void  S705C5 ::v31(){vfunc_called(this, "_ZN6S705C53v31Ev");}
void  S705C5 ::v32(){vfunc_called(this, "_ZN6S705C53v32Ev");}
void  S705C5 ::v33(){vfunc_called(this, "_ZN6S705C53v33Ev");}
void  S705C5 ::v34(){vfunc_called(this, "_ZN6S705C53v34Ev");}
void  S705C5 ::v35(){vfunc_called(this, "_ZN6S705C53v35Ev");}
void  S705C5 ::v36(){vfunc_called(this, "_ZN6S705C53v36Ev");}
void  S705C5 ::v37(){vfunc_called(this, "_ZN6S705C53v37Ev");}
void  S705C5 ::v38(){vfunc_called(this, "_ZN6S705C53v38Ev");}
void  S705C5 ::v39(){vfunc_called(this, "_ZN6S705C53v39Ev");}
void  S705C5 ::v40(){vfunc_called(this, "_ZN6S705C53v40Ev");}
void  S705C5 ::v41(){vfunc_called(this, "_ZN6S705C53v41Ev");}
void  S705C5 ::v42(){vfunc_called(this, "_ZN6S705C53v42Ev");}
void  S705C5 ::v43(){vfunc_called(this, "_ZN6S705C53v43Ev");}
void  S705C5 ::v44(){vfunc_called(this, "_ZN6S705C53v44Ev");}
void  S705C5 ::v45(){vfunc_called(this, "_ZN6S705C53v45Ev");}
void  S705C5 ::v46(){vfunc_called(this, "_ZN6S705C53v46Ev");}
void  S705C5 ::v47(){vfunc_called(this, "_ZN6S705C53v47Ev");}
void  S705C5 ::v48(){vfunc_called(this, "_ZN6S705C53v48Ev");}
void  S705C5 ::v49(){vfunc_called(this, "_ZN6S705C53v49Ev");}
void  S705C5 ::v50(){vfunc_called(this, "_ZN6S705C53v50Ev");}
void  S705C5 ::v51(){vfunc_called(this, "_ZN6S705C53v51Ev");}
void  S705C5 ::v52(){vfunc_called(this, "_ZN6S705C53v52Ev");}
void  S705C5 ::v53(){vfunc_called(this, "_ZN6S705C53v53Ev");}
void  S705C5 ::v54(){vfunc_called(this, "_ZN6S705C53v54Ev");}
void  S705C5 ::v55(){vfunc_called(this, "_ZN6S705C53v55Ev");}
void  S705C5 ::v56(){vfunc_called(this, "_ZN6S705C53v56Ev");}
void  S705C5 ::v57(){vfunc_called(this, "_ZN6S705C53v57Ev");}
void  S705C5 ::v58(){vfunc_called(this, "_ZN6S705C53v58Ev");}
void  S705C5 ::v59(){vfunc_called(this, "_ZN6S705C53v59Ev");}
void  S705C5 ::v60(){vfunc_called(this, "_ZN6S705C53v60Ev");}
void  S705C5 ::v61(){vfunc_called(this, "_ZN6S705C53v61Ev");}
void  S705C5 ::v62(){vfunc_called(this, "_ZN6S705C53v62Ev");}
void  S705C5 ::v63(){vfunc_called(this, "_ZN6S705C53v63Ev");}
void  S705C5 ::v64(){vfunc_called(this, "_ZN6S705C53v64Ev");}
void  S705C5 ::v65(){vfunc_called(this, "_ZN6S705C53v65Ev");}
void  S705C5 ::v66(){vfunc_called(this, "_ZN6S705C53v66Ev");}
void  S705C5 ::v67(){vfunc_called(this, "_ZN6S705C53v67Ev");}
void  S705C5 ::v68(){vfunc_called(this, "_ZN6S705C53v68Ev");}
void  S705C5 ::v69(){vfunc_called(this, "_ZN6S705C53v69Ev");}
void  S705C5 ::v70(){vfunc_called(this, "_ZN6S705C53v70Ev");}
void  S705C5 ::v71(){vfunc_called(this, "_ZN6S705C53v71Ev");}
S705C5 ::S705C5(){ note_ctor("S705C5", this);} // tgen

static void Test_S705C5()
{
  extern Class_Descriptor cd_S705C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S705C5, buf);
    S705C5 *dp, &lv = *(dp=new (buf) S705C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S705C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S705C5)");
    check_field_offset(lv, s705c5f0, ABISELECT(8,4), "S705C5.s705c5f0");
    check_field_offset(lv, s705c5f1, ABISELECT(16,8), "S705C5.s705c5f1");
    check_field_offset(lv, s705c5f2, ABISELECT(24,16), "S705C5.s705c5f2");
    check_field_offset(lv, s705c5f3, ABISELECT(56,32), "S705C5.s705c5f3");
    check_field_offset(lv, s705c5f4, ABISELECT(64,40), "S705C5.s705c5f4");
    check_field_offset(lv, s705c5f5, ABISELECT(72,44), "S705C5.s705c5f5");
    check_field_offset(lv, s705c5f6, ABISELECT(80,52), "S705C5.s705c5f6");
    test_class_info(&lv, &cd_S705C5);
    dp->~S705C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS705C5(Test_S705C5, "S705C5", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN6S705C5C1Ev();
extern void _ZN6S705C5D1Ev();
Name_Map name_map_S705C5[] = {
  NSPAIR(_ZN6S705C5C1Ev),
  NSPAIR(_ZN6S705C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S705C5[];
extern void _ZN6S705C5D1Ev();
extern void _ZN6S705C5D0Ev();
extern void _ZN6S705C52v8Ev();
extern void _ZN6S705C52v9Ev();
extern void _ZN6S705C53v10Ev();
extern void _ZN6S705C53v11Ev();
extern void _ZN6S705C53v12Ev();
extern void _ZN6S705C53v13Ev();
extern void _ZN6S705C53v14Ev();
extern void _ZN6S705C53v15Ev();
extern void _ZN6S705C53v16Ev();
extern void _ZN6S705C53v17Ev();
extern void _ZN6S705C53v18Ev();
extern void _ZN6S705C53v19Ev();
extern void _ZN6S705C53v20Ev();
extern void _ZN6S705C53v21Ev();
extern void _ZN6S705C53v22Ev();
extern void _ZN6S705C53v23Ev();
extern void _ZN6S705C53v24Ev();
extern void _ZN6S705C53v25Ev();
extern void _ZN6S705C53v26Ev();
extern void _ZN6S705C53v27Ev();
extern void _ZN6S705C53v28Ev();
extern void _ZN6S705C53v29Ev();
extern void _ZN6S705C53v30Ev();
extern void _ZN6S705C53v31Ev();
extern void _ZN6S705C53v32Ev();
extern void _ZN6S705C53v33Ev();
extern void _ZN6S705C53v34Ev();
extern void _ZN6S705C53v35Ev();
extern void _ZN6S705C53v36Ev();
extern void _ZN6S705C53v37Ev();
extern void _ZN6S705C53v38Ev();
extern void _ZN6S705C53v39Ev();
extern void _ZN6S705C53v40Ev();
extern void _ZN6S705C53v41Ev();
extern void _ZN6S705C53v42Ev();
extern void _ZN6S705C53v43Ev();
extern void _ZN6S705C53v44Ev();
extern void _ZN6S705C53v45Ev();
extern void _ZN6S705C53v46Ev();
extern void _ZN6S705C53v47Ev();
extern void _ZN6S705C53v48Ev();
extern void _ZN6S705C53v49Ev();
extern void _ZN6S705C53v50Ev();
extern void _ZN6S705C53v51Ev();
extern void _ZN6S705C53v52Ev();
extern void _ZN6S705C53v53Ev();
extern void _ZN6S705C53v54Ev();
extern void _ZN6S705C53v55Ev();
extern void _ZN6S705C53v56Ev();
extern void _ZN6S705C53v57Ev();
extern void _ZN6S705C53v58Ev();
extern void _ZN6S705C53v59Ev();
extern void _ZN6S705C53v60Ev();
extern void _ZN6S705C53v61Ev();
extern void _ZN6S705C53v62Ev();
extern void _ZN6S705C53v63Ev();
extern void _ZN6S705C53v64Ev();
extern void _ZN6S705C53v65Ev();
extern void _ZN6S705C53v66Ev();
extern void _ZN6S705C53v67Ev();
extern void _ZN6S705C53v68Ev();
extern void _ZN6S705C53v69Ev();
extern void _ZN6S705C53v70Ev();
extern void _ZN6S705C53v71Ev();
static  VTBL_ENTRY vtc_S705C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S705C5[0]),
  (VTBL_ENTRY)&_ZN6S705C5D1Ev,
  (VTBL_ENTRY)&_ZN6S705C5D0Ev,
  (VTBL_ENTRY)&_ZN6S705C52v8Ev,
  (VTBL_ENTRY)&_ZN6S705C52v9Ev,
  (VTBL_ENTRY)&_ZN6S705C53v10Ev,
  (VTBL_ENTRY)&_ZN6S705C53v11Ev,
  (VTBL_ENTRY)&_ZN6S705C53v12Ev,
  (VTBL_ENTRY)&_ZN6S705C53v13Ev,
  (VTBL_ENTRY)&_ZN6S705C53v14Ev,
  (VTBL_ENTRY)&_ZN6S705C53v15Ev,
  (VTBL_ENTRY)&_ZN6S705C53v16Ev,
  (VTBL_ENTRY)&_ZN6S705C53v17Ev,
  (VTBL_ENTRY)&_ZN6S705C53v18Ev,
  (VTBL_ENTRY)&_ZN6S705C53v19Ev,
  (VTBL_ENTRY)&_ZN6S705C53v20Ev,
  (VTBL_ENTRY)&_ZN6S705C53v21Ev,
  (VTBL_ENTRY)&_ZN6S705C53v22Ev,
  (VTBL_ENTRY)&_ZN6S705C53v23Ev,
  (VTBL_ENTRY)&_ZN6S705C53v24Ev,
  (VTBL_ENTRY)&_ZN6S705C53v25Ev,
  (VTBL_ENTRY)&_ZN6S705C53v26Ev,
  (VTBL_ENTRY)&_ZN6S705C53v27Ev,
  (VTBL_ENTRY)&_ZN6S705C53v28Ev,
  (VTBL_ENTRY)&_ZN6S705C53v29Ev,
  (VTBL_ENTRY)&_ZN6S705C53v30Ev,
  (VTBL_ENTRY)&_ZN6S705C53v31Ev,
  (VTBL_ENTRY)&_ZN6S705C53v32Ev,
  (VTBL_ENTRY)&_ZN6S705C53v33Ev,
  (VTBL_ENTRY)&_ZN6S705C53v34Ev,
  (VTBL_ENTRY)&_ZN6S705C53v35Ev,
  (VTBL_ENTRY)&_ZN6S705C53v36Ev,
  (VTBL_ENTRY)&_ZN6S705C53v37Ev,
  (VTBL_ENTRY)&_ZN6S705C53v38Ev,
  (VTBL_ENTRY)&_ZN6S705C53v39Ev,
  (VTBL_ENTRY)&_ZN6S705C53v40Ev,
  (VTBL_ENTRY)&_ZN6S705C53v41Ev,
  (VTBL_ENTRY)&_ZN6S705C53v42Ev,
  (VTBL_ENTRY)&_ZN6S705C53v43Ev,
  (VTBL_ENTRY)&_ZN6S705C53v44Ev,
  (VTBL_ENTRY)&_ZN6S705C53v45Ev,
  (VTBL_ENTRY)&_ZN6S705C53v46Ev,
  (VTBL_ENTRY)&_ZN6S705C53v47Ev,
  (VTBL_ENTRY)&_ZN6S705C53v48Ev,
  (VTBL_ENTRY)&_ZN6S705C53v49Ev,
  (VTBL_ENTRY)&_ZN6S705C53v50Ev,
  (VTBL_ENTRY)&_ZN6S705C53v51Ev,
  (VTBL_ENTRY)&_ZN6S705C53v52Ev,
  (VTBL_ENTRY)&_ZN6S705C53v53Ev,
  (VTBL_ENTRY)&_ZN6S705C53v54Ev,
  (VTBL_ENTRY)&_ZN6S705C53v55Ev,
  (VTBL_ENTRY)&_ZN6S705C53v56Ev,
  (VTBL_ENTRY)&_ZN6S705C53v57Ev,
  (VTBL_ENTRY)&_ZN6S705C53v58Ev,
  (VTBL_ENTRY)&_ZN6S705C53v59Ev,
  (VTBL_ENTRY)&_ZN6S705C53v60Ev,
  (VTBL_ENTRY)&_ZN6S705C53v61Ev,
  (VTBL_ENTRY)&_ZN6S705C53v62Ev,
  (VTBL_ENTRY)&_ZN6S705C53v63Ev,
  (VTBL_ENTRY)&_ZN6S705C53v64Ev,
  (VTBL_ENTRY)&_ZN6S705C53v65Ev,
  (VTBL_ENTRY)&_ZN6S705C53v66Ev,
  (VTBL_ENTRY)&_ZN6S705C53v67Ev,
  (VTBL_ENTRY)&_ZN6S705C53v68Ev,
  (VTBL_ENTRY)&_ZN6S705C53v69Ev,
  (VTBL_ENTRY)&_ZN6S705C53v70Ev,
  (VTBL_ENTRY)&_ZN6S705C53v71Ev,
};
extern VTBL_ENTRY _ZTI6S705C5[];
extern  VTBL_ENTRY _ZTV6S705C5[];
Class_Descriptor cd_S705C5 = {  "S705C5", // class name
  0,0,//no base classes
  &(vtc_S705C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI6S705C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S705C5),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  S705C4  : S705C5 {
  virtual  ~S705C4(); // _ZN6S705C4D1Ev
  virtual void  v72(); // _ZN6S705C43v72Ev
  virtual void  v73(); // _ZN6S705C43v73Ev
  S705C4(); // tgen
};
//SIG(-1 S705C4) C1{ BC2{ vd v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2}


 S705C4 ::~S705C4(){ note_dtor("S705C4", this);}
void  S705C4 ::v72(){vfunc_called(this, "_ZN6S705C43v72Ev");}
void  S705C4 ::v73(){vfunc_called(this, "_ZN6S705C43v73Ev");}
S705C4 ::S705C4(){ note_ctor("S705C4", this);} // tgen

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

#else // __cplusplus

extern void _ZN6S705C4C1Ev();
extern void _ZN6S705C4D1Ev();
Name_Map name_map_S705C4[] = {
  NSPAIR(_ZN6S705C4C1Ev),
  NSPAIR(_ZN6S705C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S705C5;
extern VTBL_ENTRY _ZTI6S705C5[];
extern  VTBL_ENTRY _ZTV6S705C5[];
static Base_Class bases_S705C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S705C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S705C4[];
extern void _ZN6S705C4D1Ev();
extern void _ZN6S705C4D0Ev();
extern void _ZN6S705C52v8Ev();
extern void _ZN6S705C52v9Ev();
extern void _ZN6S705C53v10Ev();
extern void _ZN6S705C53v11Ev();
extern void _ZN6S705C53v12Ev();
extern void _ZN6S705C53v13Ev();
extern void _ZN6S705C53v14Ev();
extern void _ZN6S705C53v15Ev();
extern void _ZN6S705C53v16Ev();
extern void _ZN6S705C53v17Ev();
extern void _ZN6S705C53v18Ev();
extern void _ZN6S705C53v19Ev();
extern void _ZN6S705C53v20Ev();
extern void _ZN6S705C53v21Ev();
extern void _ZN6S705C53v22Ev();
extern void _ZN6S705C53v23Ev();
extern void _ZN6S705C53v24Ev();
extern void _ZN6S705C53v25Ev();
extern void _ZN6S705C53v26Ev();
extern void _ZN6S705C53v27Ev();
extern void _ZN6S705C53v28Ev();
extern void _ZN6S705C53v29Ev();
extern void _ZN6S705C53v30Ev();
extern void _ZN6S705C53v31Ev();
extern void _ZN6S705C53v32Ev();
extern void _ZN6S705C53v33Ev();
extern void _ZN6S705C53v34Ev();
extern void _ZN6S705C53v35Ev();
extern void _ZN6S705C53v36Ev();
extern void _ZN6S705C53v37Ev();
extern void _ZN6S705C53v38Ev();
extern void _ZN6S705C53v39Ev();
extern void _ZN6S705C53v40Ev();
extern void _ZN6S705C53v41Ev();
extern void _ZN6S705C53v42Ev();
extern void _ZN6S705C53v43Ev();
extern void _ZN6S705C53v44Ev();
extern void _ZN6S705C53v45Ev();
extern void _ZN6S705C53v46Ev();
extern void _ZN6S705C53v47Ev();
extern void _ZN6S705C53v48Ev();
extern void _ZN6S705C53v49Ev();
extern void _ZN6S705C53v50Ev();
extern void _ZN6S705C53v51Ev();
extern void _ZN6S705C53v52Ev();
extern void _ZN6S705C53v53Ev();
extern void _ZN6S705C53v54Ev();
extern void _ZN6S705C53v55Ev();
extern void _ZN6S705C53v56Ev();
extern void _ZN6S705C53v57Ev();
extern void _ZN6S705C53v58Ev();
extern void _ZN6S705C53v59Ev();
extern void _ZN6S705C53v60Ev();
extern void _ZN6S705C53v61Ev();
extern void _ZN6S705C53v62Ev();
extern void _ZN6S705C53v63Ev();
extern void _ZN6S705C53v64Ev();
extern void _ZN6S705C53v65Ev();
extern void _ZN6S705C53v66Ev();
extern void _ZN6S705C53v67Ev();
extern void _ZN6S705C53v68Ev();
extern void _ZN6S705C53v69Ev();
extern void _ZN6S705C53v70Ev();
extern void _ZN6S705C53v71Ev();
extern void _ZN6S705C43v72Ev();
extern void _ZN6S705C43v73Ev();
static  VTBL_ENTRY vtc_S705C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S705C4[0]),
  (VTBL_ENTRY)&_ZN6S705C4D1Ev,
  (VTBL_ENTRY)&_ZN6S705C4D0Ev,
  (VTBL_ENTRY)&_ZN6S705C52v8Ev,
  (VTBL_ENTRY)&_ZN6S705C52v9Ev,
  (VTBL_ENTRY)&_ZN6S705C53v10Ev,
  (VTBL_ENTRY)&_ZN6S705C53v11Ev,
  (VTBL_ENTRY)&_ZN6S705C53v12Ev,
  (VTBL_ENTRY)&_ZN6S705C53v13Ev,
  (VTBL_ENTRY)&_ZN6S705C53v14Ev,
  (VTBL_ENTRY)&_ZN6S705C53v15Ev,
  (VTBL_ENTRY)&_ZN6S705C53v16Ev,
  (VTBL_ENTRY)&_ZN6S705C53v17Ev,
  (VTBL_ENTRY)&_ZN6S705C53v18Ev,
  (VTBL_ENTRY)&_ZN6S705C53v19Ev,
  (VTBL_ENTRY)&_ZN6S705C53v20Ev,
  (VTBL_ENTRY)&_ZN6S705C53v21Ev,
  (VTBL_ENTRY)&_ZN6S705C53v22Ev,
  (VTBL_ENTRY)&_ZN6S705C53v23Ev,
  (VTBL_ENTRY)&_ZN6S705C53v24Ev,
  (VTBL_ENTRY)&_ZN6S705C53v25Ev,
  (VTBL_ENTRY)&_ZN6S705C53v26Ev,
  (VTBL_ENTRY)&_ZN6S705C53v27Ev,
  (VTBL_ENTRY)&_ZN6S705C53v28Ev,
  (VTBL_ENTRY)&_ZN6S705C53v29Ev,
  (VTBL_ENTRY)&_ZN6S705C53v30Ev,
  (VTBL_ENTRY)&_ZN6S705C53v31Ev,
  (VTBL_ENTRY)&_ZN6S705C53v32Ev,
  (VTBL_ENTRY)&_ZN6S705C53v33Ev,
  (VTBL_ENTRY)&_ZN6S705C53v34Ev,
  (VTBL_ENTRY)&_ZN6S705C53v35Ev,
  (VTBL_ENTRY)&_ZN6S705C53v36Ev,
  (VTBL_ENTRY)&_ZN6S705C53v37Ev,
  (VTBL_ENTRY)&_ZN6S705C53v38Ev,
  (VTBL_ENTRY)&_ZN6S705C53v39Ev,
  (VTBL_ENTRY)&_ZN6S705C53v40Ev,
  (VTBL_ENTRY)&_ZN6S705C53v41Ev,
  (VTBL_ENTRY)&_ZN6S705C53v42Ev,
  (VTBL_ENTRY)&_ZN6S705C53v43Ev,
  (VTBL_ENTRY)&_ZN6S705C53v44Ev,
  (VTBL_ENTRY)&_ZN6S705C53v45Ev,
  (VTBL_ENTRY)&_ZN6S705C53v46Ev,
  (VTBL_ENTRY)&_ZN6S705C53v47Ev,
  (VTBL_ENTRY)&_ZN6S705C53v48Ev,
  (VTBL_ENTRY)&_ZN6S705C53v49Ev,
  (VTBL_ENTRY)&_ZN6S705C53v50Ev,
  (VTBL_ENTRY)&_ZN6S705C53v51Ev,
  (VTBL_ENTRY)&_ZN6S705C53v52Ev,
  (VTBL_ENTRY)&_ZN6S705C53v53Ev,
  (VTBL_ENTRY)&_ZN6S705C53v54Ev,
  (VTBL_ENTRY)&_ZN6S705C53v55Ev,
  (VTBL_ENTRY)&_ZN6S705C53v56Ev,
  (VTBL_ENTRY)&_ZN6S705C53v57Ev,
  (VTBL_ENTRY)&_ZN6S705C53v58Ev,
  (VTBL_ENTRY)&_ZN6S705C53v59Ev,
  (VTBL_ENTRY)&_ZN6S705C53v60Ev,
  (VTBL_ENTRY)&_ZN6S705C53v61Ev,
  (VTBL_ENTRY)&_ZN6S705C53v62Ev,
  (VTBL_ENTRY)&_ZN6S705C53v63Ev,
  (VTBL_ENTRY)&_ZN6S705C53v64Ev,
  (VTBL_ENTRY)&_ZN6S705C53v65Ev,
  (VTBL_ENTRY)&_ZN6S705C53v66Ev,
  (VTBL_ENTRY)&_ZN6S705C53v67Ev,
  (VTBL_ENTRY)&_ZN6S705C53v68Ev,
  (VTBL_ENTRY)&_ZN6S705C53v69Ev,
  (VTBL_ENTRY)&_ZN6S705C53v70Ev,
  (VTBL_ENTRY)&_ZN6S705C53v71Ev,
  (VTBL_ENTRY)&_ZN6S705C43v72Ev,
  (VTBL_ENTRY)&_ZN6S705C43v73Ev,
};
extern VTBL_ENTRY _ZTI6S705C4[];
extern  VTBL_ENTRY _ZTV6S705C4[];
Class_Descriptor cd_S705C4 = {  "S705C4", // class name
  bases_S705C4, 1,
  &(vtc_S705C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI6S705C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S705C4),70, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S705C3  : S705C4 {
  char s705c3f0;
  ::S3352C17 s705c3f1;
  ::S87C12_nt s705c3f2;
  virtual  ~S705C3(); // _ZN6S705C3D1Ev
  virtual void  v74(); // _ZN6S705C33v74Ev
  virtual void  v75(); // _ZN6S705C33v75Ev
  virtual void  v76(); // _ZN6S705C33v76Ev
  virtual void  v77(); // _ZN6S705C33v77Ev
  virtual void  v78(); // _ZN6S705C33v78Ev
  virtual void  v79(); // _ZN6S705C33v79Ev
  virtual void  v80(); // _ZN6S705C33v80Ev
  virtual void  v81(); // _ZN6S705C33v81Ev
  virtual void  v82(); // _ZN6S705C33v82Ev
  virtual void  v83(); // _ZN6S705C33v83Ev
  virtual void  v84(); // _ZN6S705C33v84Ev
  virtual void  v85(); // _ZN6S705C33v85Ev
  S705C3(); // tgen
};
//SIG(-1 S705C3) C1{ BC2{ BC3{ vd v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v77 v78} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 Fc FC5{ BC6{ BC7{ m Fp Fi[2]}}} FC8{ m Fp FC4}}


 S705C3 ::~S705C3(){ note_dtor("S705C3", this);}
void  S705C3 ::v74(){vfunc_called(this, "_ZN6S705C33v74Ev");}
void  S705C3 ::v75(){vfunc_called(this, "_ZN6S705C33v75Ev");}
void  S705C3 ::v76(){vfunc_called(this, "_ZN6S705C33v76Ev");}
void  S705C3 ::v77(){vfunc_called(this, "_ZN6S705C33v77Ev");}
void  S705C3 ::v78(){vfunc_called(this, "_ZN6S705C33v78Ev");}
void  S705C3 ::v79(){vfunc_called(this, "_ZN6S705C33v79Ev");}
void  S705C3 ::v80(){vfunc_called(this, "_ZN6S705C33v80Ev");}
void  S705C3 ::v81(){vfunc_called(this, "_ZN6S705C33v81Ev");}
void  S705C3 ::v82(){vfunc_called(this, "_ZN6S705C33v82Ev");}
void  S705C3 ::v83(){vfunc_called(this, "_ZN6S705C33v83Ev");}
void  S705C3 ::v84(){vfunc_called(this, "_ZN6S705C33v84Ev");}
void  S705C3 ::v85(){vfunc_called(this, "_ZN6S705C33v85Ev");}
S705C3 ::S705C3(){ note_ctor("S705C3", this);} // tgen

static void Test_S705C3()
{
  extern Class_Descriptor cd_S705C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,23)];
    init_test(&cd_S705C3, buf);
    S705C3 *dp, &lv = *(dp=new (buf) S705C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,88), "sizeof(S705C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S705C3)");
    check_base_class_offset(lv, (S705C5*)(S705C4*), 0, "S705C3");
    check_base_class_offset(lv, (S705C4*), 0, "S705C3");
    check_field_offset(lv, s705c3f0, ABISELECT(96,60), "S705C3.s705c3f0");
    check_field_offset(lv, s705c3f1, ABISELECT(104,64), "S705C3.s705c3f1");
    check_field_offset(lv, s705c3f2, ABISELECT(120,76), "S705C3.s705c3f2");
    test_class_info(&lv, &cd_S705C3);
    dp->~S705C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS705C3(Test_S705C3, "S705C3", ABISELECT(136,88));

#else // __cplusplus

extern void _ZN6S705C3C1Ev();
extern void _ZN6S705C3D1Ev();
Name_Map name_map_S705C3[] = {
  NSPAIR(_ZN6S705C3C1Ev),
  NSPAIR(_ZN6S705C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S705C5;
extern VTBL_ENTRY _ZTI6S705C5[];
extern  VTBL_ENTRY _ZTV6S705C5[];
extern Class_Descriptor cd_S705C4;
extern VTBL_ENTRY _ZTI6S705C4[];
extern  VTBL_ENTRY _ZTV6S705C4[];
static Base_Class bases_S705C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S705C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S705C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S705C3[];
extern void _ZN6S705C3D1Ev();
extern void _ZN6S705C3D0Ev();
extern void _ZN6S705C52v8Ev();
extern void _ZN6S705C52v9Ev();
extern void _ZN6S705C53v10Ev();
extern void _ZN6S705C53v11Ev();
extern void _ZN6S705C53v12Ev();
extern void _ZN6S705C53v13Ev();
extern void _ZN6S705C53v14Ev();
extern void _ZN6S705C53v15Ev();
extern void _ZN6S705C53v16Ev();
extern void _ZN6S705C53v17Ev();
extern void _ZN6S705C53v18Ev();
extern void _ZN6S705C53v19Ev();
extern void _ZN6S705C53v20Ev();
extern void _ZN6S705C53v21Ev();
extern void _ZN6S705C53v22Ev();
extern void _ZN6S705C53v23Ev();
extern void _ZN6S705C53v24Ev();
extern void _ZN6S705C53v25Ev();
extern void _ZN6S705C53v26Ev();
extern void _ZN6S705C53v27Ev();
extern void _ZN6S705C53v28Ev();
extern void _ZN6S705C53v29Ev();
extern void _ZN6S705C53v30Ev();
extern void _ZN6S705C53v31Ev();
extern void _ZN6S705C53v32Ev();
extern void _ZN6S705C53v33Ev();
extern void _ZN6S705C53v34Ev();
extern void _ZN6S705C53v35Ev();
extern void _ZN6S705C53v36Ev();
extern void _ZN6S705C53v37Ev();
extern void _ZN6S705C53v38Ev();
extern void _ZN6S705C53v39Ev();
extern void _ZN6S705C53v40Ev();
extern void _ZN6S705C53v41Ev();
extern void _ZN6S705C53v42Ev();
extern void _ZN6S705C53v43Ev();
extern void _ZN6S705C53v44Ev();
extern void _ZN6S705C53v45Ev();
extern void _ZN6S705C53v46Ev();
extern void _ZN6S705C53v47Ev();
extern void _ZN6S705C53v48Ev();
extern void _ZN6S705C53v49Ev();
extern void _ZN6S705C53v50Ev();
extern void _ZN6S705C53v51Ev();
extern void _ZN6S705C53v52Ev();
extern void _ZN6S705C53v53Ev();
extern void _ZN6S705C53v54Ev();
extern void _ZN6S705C53v55Ev();
extern void _ZN6S705C53v56Ev();
extern void _ZN6S705C53v57Ev();
extern void _ZN6S705C53v58Ev();
extern void _ZN6S705C53v59Ev();
extern void _ZN6S705C53v60Ev();
extern void _ZN6S705C53v61Ev();
extern void _ZN6S705C53v62Ev();
extern void _ZN6S705C53v63Ev();
extern void _ZN6S705C53v64Ev();
extern void _ZN6S705C53v65Ev();
extern void _ZN6S705C53v66Ev();
extern void _ZN6S705C53v67Ev();
extern void _ZN6S705C53v68Ev();
extern void _ZN6S705C53v69Ev();
extern void _ZN6S705C53v70Ev();
extern void _ZN6S705C53v71Ev();
extern void _ZN6S705C43v72Ev();
extern void _ZN6S705C43v73Ev();
extern void _ZN6S705C33v74Ev();
extern void _ZN6S705C33v75Ev();
extern void _ZN6S705C33v76Ev();
extern void _ZN6S705C33v77Ev();
extern void _ZN6S705C33v78Ev();
extern void _ZN6S705C33v79Ev();
extern void _ZN6S705C33v80Ev();
extern void _ZN6S705C33v81Ev();
extern void _ZN6S705C33v82Ev();
extern void _ZN6S705C33v83Ev();
extern void _ZN6S705C33v84Ev();
extern void _ZN6S705C33v85Ev();
static  VTBL_ENTRY vtc_S705C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S705C3[0]),
  (VTBL_ENTRY)&_ZN6S705C3D1Ev,
  (VTBL_ENTRY)&_ZN6S705C3D0Ev,
  (VTBL_ENTRY)&_ZN6S705C52v8Ev,
  (VTBL_ENTRY)&_ZN6S705C52v9Ev,
  (VTBL_ENTRY)&_ZN6S705C53v10Ev,
  (VTBL_ENTRY)&_ZN6S705C53v11Ev,
  (VTBL_ENTRY)&_ZN6S705C53v12Ev,
  (VTBL_ENTRY)&_ZN6S705C53v13Ev,
  (VTBL_ENTRY)&_ZN6S705C53v14Ev,
  (VTBL_ENTRY)&_ZN6S705C53v15Ev,
  (VTBL_ENTRY)&_ZN6S705C53v16Ev,
  (VTBL_ENTRY)&_ZN6S705C53v17Ev,
  (VTBL_ENTRY)&_ZN6S705C53v18Ev,
  (VTBL_ENTRY)&_ZN6S705C53v19Ev,
  (VTBL_ENTRY)&_ZN6S705C53v20Ev,
  (VTBL_ENTRY)&_ZN6S705C53v21Ev,
  (VTBL_ENTRY)&_ZN6S705C53v22Ev,
  (VTBL_ENTRY)&_ZN6S705C53v23Ev,
  (VTBL_ENTRY)&_ZN6S705C53v24Ev,
  (VTBL_ENTRY)&_ZN6S705C53v25Ev,
  (VTBL_ENTRY)&_ZN6S705C53v26Ev,
  (VTBL_ENTRY)&_ZN6S705C53v27Ev,
  (VTBL_ENTRY)&_ZN6S705C53v28Ev,
  (VTBL_ENTRY)&_ZN6S705C53v29Ev,
  (VTBL_ENTRY)&_ZN6S705C53v30Ev,
  (VTBL_ENTRY)&_ZN6S705C53v31Ev,
  (VTBL_ENTRY)&_ZN6S705C53v32Ev,
  (VTBL_ENTRY)&_ZN6S705C53v33Ev,
  (VTBL_ENTRY)&_ZN6S705C53v34Ev,
  (VTBL_ENTRY)&_ZN6S705C53v35Ev,
  (VTBL_ENTRY)&_ZN6S705C53v36Ev,
  (VTBL_ENTRY)&_ZN6S705C53v37Ev,
  (VTBL_ENTRY)&_ZN6S705C53v38Ev,
  (VTBL_ENTRY)&_ZN6S705C53v39Ev,
  (VTBL_ENTRY)&_ZN6S705C53v40Ev,
  (VTBL_ENTRY)&_ZN6S705C53v41Ev,
  (VTBL_ENTRY)&_ZN6S705C53v42Ev,
  (VTBL_ENTRY)&_ZN6S705C53v43Ev,
  (VTBL_ENTRY)&_ZN6S705C53v44Ev,
  (VTBL_ENTRY)&_ZN6S705C53v45Ev,
  (VTBL_ENTRY)&_ZN6S705C53v46Ev,
  (VTBL_ENTRY)&_ZN6S705C53v47Ev,
  (VTBL_ENTRY)&_ZN6S705C53v48Ev,
  (VTBL_ENTRY)&_ZN6S705C53v49Ev,
  (VTBL_ENTRY)&_ZN6S705C53v50Ev,
  (VTBL_ENTRY)&_ZN6S705C53v51Ev,
  (VTBL_ENTRY)&_ZN6S705C53v52Ev,
  (VTBL_ENTRY)&_ZN6S705C53v53Ev,
  (VTBL_ENTRY)&_ZN6S705C53v54Ev,
  (VTBL_ENTRY)&_ZN6S705C53v55Ev,
  (VTBL_ENTRY)&_ZN6S705C53v56Ev,
  (VTBL_ENTRY)&_ZN6S705C53v57Ev,
  (VTBL_ENTRY)&_ZN6S705C53v58Ev,
  (VTBL_ENTRY)&_ZN6S705C53v59Ev,
  (VTBL_ENTRY)&_ZN6S705C53v60Ev,
  (VTBL_ENTRY)&_ZN6S705C53v61Ev,
  (VTBL_ENTRY)&_ZN6S705C53v62Ev,
  (VTBL_ENTRY)&_ZN6S705C53v63Ev,
  (VTBL_ENTRY)&_ZN6S705C53v64Ev,
  (VTBL_ENTRY)&_ZN6S705C53v65Ev,
  (VTBL_ENTRY)&_ZN6S705C53v66Ev,
  (VTBL_ENTRY)&_ZN6S705C53v67Ev,
  (VTBL_ENTRY)&_ZN6S705C53v68Ev,
  (VTBL_ENTRY)&_ZN6S705C53v69Ev,
  (VTBL_ENTRY)&_ZN6S705C53v70Ev,
  (VTBL_ENTRY)&_ZN6S705C53v71Ev,
  (VTBL_ENTRY)&_ZN6S705C43v72Ev,
  (VTBL_ENTRY)&_ZN6S705C43v73Ev,
  (VTBL_ENTRY)&_ZN6S705C33v74Ev,
  (VTBL_ENTRY)&_ZN6S705C33v75Ev,
  (VTBL_ENTRY)&_ZN6S705C33v76Ev,
  (VTBL_ENTRY)&_ZN6S705C33v77Ev,
  (VTBL_ENTRY)&_ZN6S705C33v78Ev,
  (VTBL_ENTRY)&_ZN6S705C33v79Ev,
  (VTBL_ENTRY)&_ZN6S705C33v80Ev,
  (VTBL_ENTRY)&_ZN6S705C33v81Ev,
  (VTBL_ENTRY)&_ZN6S705C33v82Ev,
  (VTBL_ENTRY)&_ZN6S705C33v83Ev,
  (VTBL_ENTRY)&_ZN6S705C33v84Ev,
  (VTBL_ENTRY)&_ZN6S705C33v85Ev,
};
extern VTBL_ENTRY _ZTI6S705C3[];
extern  VTBL_ENTRY _ZTV6S705C3[];
Class_Descriptor cd_S705C3 = {  "S705C3", // class name
  bases_S705C3, 2,
  &(vtc_S705C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(136,88), // object size
  NSPAIRA(_ZTI6S705C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S705C3),82, //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  S705C11  {
  virtual  ~S705C11(); // _ZN7S705C11D1Ev
  virtual void  v86(); // _ZN7S705C113v86Ev
  virtual void  v87(); // _ZN7S705C113v87Ev
  virtual void  v88(); // _ZN7S705C113v88Ev
  virtual void  v89(); // _ZN7S705C113v89Ev
  S705C11(); // tgen
};
//SIG(-1 S705C11) C1{ vd v1 v2 v3 v4}


 S705C11 ::~S705C11(){ note_dtor("S705C11", this);}
void  S705C11 ::v86(){vfunc_called(this, "_ZN7S705C113v86Ev");}
void  S705C11 ::v87(){vfunc_called(this, "_ZN7S705C113v87Ev");}
void  S705C11 ::v88(){vfunc_called(this, "_ZN7S705C113v88Ev");}
void  S705C11 ::v89(){vfunc_called(this, "_ZN7S705C113v89Ev");}
S705C11 ::S705C11(){ note_ctor("S705C11", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S705C11C1Ev();
extern void _ZN7S705C11D1Ev();
Name_Map name_map_S705C11[] = {
  NSPAIR(_ZN7S705C11C1Ev),
  NSPAIR(_ZN7S705C11D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S705C11[];
extern void _ZN7S705C11D1Ev();
extern void _ZN7S705C11D0Ev();
extern void _ZN7S705C113v86Ev();
extern void _ZN7S705C113v87Ev();
extern void _ZN7S705C113v88Ev();
extern void _ZN7S705C113v89Ev();
static  VTBL_ENTRY vtc_S705C11[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S705C11[0]),
  (VTBL_ENTRY)&_ZN7S705C11D1Ev,
  (VTBL_ENTRY)&_ZN7S705C11D0Ev,
  (VTBL_ENTRY)&_ZN7S705C113v86Ev,
  (VTBL_ENTRY)&_ZN7S705C113v87Ev,
  (VTBL_ENTRY)&_ZN7S705C113v88Ev,
  (VTBL_ENTRY)&_ZN7S705C113v89Ev,
};
extern VTBL_ENTRY _ZTI7S705C11[];
extern  VTBL_ENTRY _ZTV7S705C11[];
Class_Descriptor cd_S705C11 = {  "S705C11", // class name
  0,0,//no base classes
  &(vtc_S705C11[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S705C11),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S705C11),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S705C2  : S705C3 , S705C11 {
  virtual  ~S705C2(); // _ZN6S705C2D1Ev
  virtual void  v90(); // _ZN6S705C23v90Ev
  virtual void  v91(); // _ZN6S705C23v91Ev
  virtual void  v92(); // _ZN6S705C23v92Ev
  virtual void  v93(); // _ZN6S705C23v93Ev
  virtual void  v94(); // _ZN6S705C23v94Ev
  virtual void  v95(); // _ZN6S705C23v95Ev
  virtual void  v96(); // _ZN6S705C23v96Ev
  virtual void  v97(); // _ZN6S705C23v97Ev
  virtual void  v98(); // _ZN6S705C23v98Ev
  virtual void  v99(); // _ZN6S705C23v99Ev
  S705C2(); // tgen
};
//SIG(-1 S705C2) C1{ BC2{ BC3{ BC4{ vd 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 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v75 v76} vd v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 Fc FC6{ BC7{ BC8{ m Fp Fi[2]}}} FC9{ m Fp FC5}} BC10{ vd v89 v90 v91 v92} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10}


 S705C2 ::~S705C2(){ note_dtor("S705C2", this);}
void  S705C2 ::v90(){vfunc_called(this, "_ZN6S705C23v90Ev");}
void  S705C2 ::v91(){vfunc_called(this, "_ZN6S705C23v91Ev");}
void  S705C2 ::v92(){vfunc_called(this, "_ZN6S705C23v92Ev");}
void  S705C2 ::v93(){vfunc_called(this, "_ZN6S705C23v93Ev");}
void  S705C2 ::v94(){vfunc_called(this, "_ZN6S705C23v94Ev");}
void  S705C2 ::v95(){vfunc_called(this, "_ZN6S705C23v95Ev");}
void  S705C2 ::v96(){vfunc_called(this, "_ZN6S705C23v96Ev");}
void  S705C2 ::v97(){vfunc_called(this, "_ZN6S705C23v97Ev");}
void  S705C2 ::v98(){vfunc_called(this, "_ZN6S705C23v98Ev");}
void  S705C2 ::v99(){vfunc_called(this, "_ZN6S705C23v99Ev");}
S705C2 ::S705C2(){ note_ctor("S705C2", this);} // tgen

static void Test_S705C2()
{
  extern Class_Descriptor cd_S705C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(19,24)];
    init_test(&cd_S705C2, buf);
    S705C2 *dp, &lv = *(dp=new (buf) S705C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,92), "sizeof(S705C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S705C2)");
    check_base_class_offset(lv, (S705C5*)(S705C4*)(S705C3*), 0, "S705C2");
    check_base_class_offset(lv, (S705C4*)(S705C3*), 0, "S705C2");
    check_base_class_offset(lv, (S705C3*), 0, "S705C2");
    check_base_class_offset(lv, (S705C11*), ABISELECT(136,88), "S705C2");
    test_class_info(&lv, &cd_S705C2);
    dp->~S705C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS705C2(Test_S705C2, "S705C2", ABISELECT(144,92));

#else // __cplusplus

extern void _ZN6S705C2C1Ev();
extern void _ZN6S705C2D1Ev();
Name_Map name_map_S705C2[] = {
  NSPAIR(_ZN6S705C2C1Ev),
  NSPAIR(_ZN6S705C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S705C5;
extern VTBL_ENTRY _ZTI6S705C5[];
extern  VTBL_ENTRY _ZTV6S705C5[];
extern Class_Descriptor cd_S705C4;
extern VTBL_ENTRY _ZTI6S705C4[];
extern  VTBL_ENTRY _ZTV6S705C4[];
extern Class_Descriptor cd_S705C3;
extern VTBL_ENTRY _ZTI6S705C3[];
extern  VTBL_ENTRY _ZTV6S705C3[];
extern Class_Descriptor cd_S705C11;
extern VTBL_ENTRY _ZTI7S705C11[];
extern  VTBL_ENTRY _ZTV7S705C11[];
static Base_Class bases_S705C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S705C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S705C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S705C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S705C11,    ABISELECT(136,88), //bcp->offset
    92, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S705C2[];
extern void _ZN6S705C2D1Ev();
extern void _ZN6S705C2D0Ev();
extern void _ZN6S705C52v8Ev();
extern void _ZN6S705C52v9Ev();
extern void _ZN6S705C53v10Ev();
extern void _ZN6S705C53v11Ev();
extern void _ZN6S705C53v12Ev();
extern void _ZN6S705C53v13Ev();
extern void _ZN6S705C53v14Ev();
extern void _ZN6S705C53v15Ev();
extern void _ZN6S705C53v16Ev();
extern void _ZN6S705C53v17Ev();
extern void _ZN6S705C53v18Ev();
extern void _ZN6S705C53v19Ev();
extern void _ZN6S705C53v20Ev();
extern void _ZN6S705C53v21Ev();
extern void _ZN6S705C53v22Ev();
extern void _ZN6S705C53v23Ev();
extern void _ZN6S705C53v24Ev();
extern void _ZN6S705C53v25Ev();
extern void _ZN6S705C53v26Ev();
extern void _ZN6S705C53v27Ev();
extern void _ZN6S705C53v28Ev();
extern void _ZN6S705C53v29Ev();
extern void _ZN6S705C53v30Ev();
extern void _ZN6S705C53v31Ev();
extern void _ZN6S705C53v32Ev();
extern void _ZN6S705C53v33Ev();
extern void _ZN6S705C53v34Ev();
extern void _ZN6S705C53v35Ev();
extern void _ZN6S705C53v36Ev();
extern void _ZN6S705C53v37Ev();
extern void _ZN6S705C53v38Ev();
extern void _ZN6S705C53v39Ev();
extern void _ZN6S705C53v40Ev();
extern void _ZN6S705C53v41Ev();
extern void _ZN6S705C53v42Ev();
extern void _ZN6S705C53v43Ev();
extern void _ZN6S705C53v44Ev();
extern void _ZN6S705C53v45Ev();
extern void _ZN6S705C53v46Ev();
extern void _ZN6S705C53v47Ev();
extern void _ZN6S705C53v48Ev();
extern void _ZN6S705C53v49Ev();
extern void _ZN6S705C53v50Ev();
extern void _ZN6S705C53v51Ev();
extern void _ZN6S705C53v52Ev();
extern void _ZN6S705C53v53Ev();
extern void _ZN6S705C53v54Ev();
extern void _ZN6S705C53v55Ev();
extern void _ZN6S705C53v56Ev();
extern void _ZN6S705C53v57Ev();
extern void _ZN6S705C53v58Ev();
extern void _ZN6S705C53v59Ev();
extern void _ZN6S705C53v60Ev();
extern void _ZN6S705C53v61Ev();
extern void _ZN6S705C53v62Ev();
extern void _ZN6S705C53v63Ev();
extern void _ZN6S705C53v64Ev();
extern void _ZN6S705C53v65Ev();
extern void _ZN6S705C53v66Ev();
extern void _ZN6S705C53v67Ev();
extern void _ZN6S705C53v68Ev();
extern void _ZN6S705C53v69Ev();
extern void _ZN6S705C53v70Ev();
extern void _ZN6S705C53v71Ev();
extern void _ZN6S705C43v72Ev();
extern void _ZN6S705C43v73Ev();
extern void _ZN6S705C33v74Ev();
extern void _ZN6S705C33v75Ev();
extern void _ZN6S705C33v76Ev();
extern void _ZN6S705C33v77Ev();
extern void _ZN6S705C33v78Ev();
extern void _ZN6S705C33v79Ev();
extern void _ZN6S705C33v80Ev();
extern void _ZN6S705C33v81Ev();
extern void _ZN6S705C33v82Ev();
extern void _ZN6S705C33v83Ev();
extern void _ZN6S705C33v84Ev();
extern void _ZN6S705C33v85Ev();
extern void _ZN6S705C23v90Ev();
extern void _ZN6S705C23v91Ev();
extern void _ZN6S705C23v92Ev();
extern void _ZN6S705C23v93Ev();
extern void _ZN6S705C23v94Ev();
extern void _ZN6S705C23v95Ev();
extern void _ZN6S705C23v96Ev();
extern void _ZN6S705C23v97Ev();
extern void _ZN6S705C23v98Ev();
extern void _ZN6S705C23v99Ev();
extern void ABISELECT(_ZThn136_N6S705C2D1Ev,_ZThn88_N6S705C2D1Ev)();
extern void ABISELECT(_ZThn136_N6S705C2D0Ev,_ZThn88_N6S705C2D0Ev)();
extern void _ZN7S705C113v86Ev();
extern void _ZN7S705C113v87Ev();
extern void _ZN7S705C113v88Ev();
extern void _ZN7S705C113v89Ev();
static  VTBL_ENTRY vtc_S705C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S705C2[0]),
  (VTBL_ENTRY)&_ZN6S705C2D1Ev,
  (VTBL_ENTRY)&_ZN6S705C2D0Ev,
  (VTBL_ENTRY)&_ZN6S705C52v8Ev,
  (VTBL_ENTRY)&_ZN6S705C52v9Ev,
  (VTBL_ENTRY)&_ZN6S705C53v10Ev,
  (VTBL_ENTRY)&_ZN6S705C53v11Ev,
  (VTBL_ENTRY)&_ZN6S705C53v12Ev,
  (VTBL_ENTRY)&_ZN6S705C53v13Ev,
  (VTBL_ENTRY)&_ZN6S705C53v14Ev,
  (VTBL_ENTRY)&_ZN6S705C53v15Ev,
  (VTBL_ENTRY)&_ZN6S705C53v16Ev,
  (VTBL_ENTRY)&_ZN6S705C53v17Ev,
  (VTBL_ENTRY)&_ZN6S705C53v18Ev,
  (VTBL_ENTRY)&_ZN6S705C53v19Ev,
  (VTBL_ENTRY)&_ZN6S705C53v20Ev,
  (VTBL_ENTRY)&_ZN6S705C53v21Ev,
  (VTBL_ENTRY)&_ZN6S705C53v22Ev,
  (VTBL_ENTRY)&_ZN6S705C53v23Ev,
  (VTBL_ENTRY)&_ZN6S705C53v24Ev,
  (VTBL_ENTRY)&_ZN6S705C53v25Ev,
  (VTBL_ENTRY)&_ZN6S705C53v26Ev,
  (VTBL_ENTRY)&_ZN6S705C53v27Ev,
  (VTBL_ENTRY)&_ZN6S705C53v28Ev,
  (VTBL_ENTRY)&_ZN6S705C53v29Ev,
  (VTBL_ENTRY)&_ZN6S705C53v30Ev,
  (VTBL_ENTRY)&_ZN6S705C53v31Ev,
  (VTBL_ENTRY)&_ZN6S705C53v32Ev,
  (VTBL_ENTRY)&_ZN6S705C53v33Ev,
  (VTBL_ENTRY)&_ZN6S705C53v34Ev,
  (VTBL_ENTRY)&_ZN6S705C53v35Ev,
  (VTBL_ENTRY)&_ZN6S705C53v36Ev,
  (VTBL_ENTRY)&_ZN6S705C53v37Ev,
  (VTBL_ENTRY)&_ZN6S705C53v38Ev,
  (VTBL_ENTRY)&_ZN6S705C53v39Ev,
  (VTBL_ENTRY)&_ZN6S705C53v40Ev,
  (VTBL_ENTRY)&_ZN6S705C53v41Ev,
  (VTBL_ENTRY)&_ZN6S705C53v42Ev,
  (VTBL_ENTRY)&_ZN6S705C53v43Ev,
  (VTBL_ENTRY)&_ZN6S705C53v44Ev,
  (VTBL_ENTRY)&_ZN6S705C53v45Ev,
  (VTBL_ENTRY)&_ZN6S705C53v46Ev,
  (VTBL_ENTRY)&_ZN6S705C53v47Ev,
  (VTBL_ENTRY)&_ZN6S705C53v48Ev,
  (VTBL_ENTRY)&_ZN6S705C53v49Ev,
  (VTBL_ENTRY)&_ZN6S705C53v50Ev,
  (VTBL_ENTRY)&_ZN6S705C53v51Ev,
  (VTBL_ENTRY)&_ZN6S705C53v52Ev,
  (VTBL_ENTRY)&_ZN6S705C53v53Ev,
  (VTBL_ENTRY)&_ZN6S705C53v54Ev,
  (VTBL_ENTRY)&_ZN6S705C53v55Ev,
  (VTBL_ENTRY)&_ZN6S705C53v56Ev,
  (VTBL_ENTRY)&_ZN6S705C53v57Ev,
  (VTBL_ENTRY)&_ZN6S705C53v58Ev,
  (VTBL_ENTRY)&_ZN6S705C53v59Ev,
  (VTBL_ENTRY)&_ZN6S705C53v60Ev,
  (VTBL_ENTRY)&_ZN6S705C53v61Ev,
  (VTBL_ENTRY)&_ZN6S705C53v62Ev,
  (VTBL_ENTRY)&_ZN6S705C53v63Ev,
  (VTBL_ENTRY)&_ZN6S705C53v64Ev,
  (VTBL_ENTRY)&_ZN6S705C53v65Ev,
  (VTBL_ENTRY)&_ZN6S705C53v66Ev,
  (VTBL_ENTRY)&_ZN6S705C53v67Ev,
  (VTBL_ENTRY)&_ZN6S705C53v68Ev,
  (VTBL_ENTRY)&_ZN6S705C53v69Ev,
  (VTBL_ENTRY)&_ZN6S705C53v70Ev,
  (VTBL_ENTRY)&_ZN6S705C53v71Ev,
  (VTBL_ENTRY)&_ZN6S705C43v72Ev,
  (VTBL_ENTRY)&_ZN6S705C43v73Ev,
  (VTBL_ENTRY)&_ZN6S705C33v74Ev,
  (VTBL_ENTRY)&_ZN6S705C33v75Ev,
  (VTBL_ENTRY)&_ZN6S705C33v76Ev,
  (VTBL_ENTRY)&_ZN6S705C33v77Ev,
  (VTBL_ENTRY)&_ZN6S705C33v78Ev,
  (VTBL_ENTRY)&_ZN6S705C33v79Ev,
  (VTBL_ENTRY)&_ZN6S705C33v80Ev,
  (VTBL_ENTRY)&_ZN6S705C33v81Ev,
  (VTBL_ENTRY)&_ZN6S705C33v82Ev,
  (VTBL_ENTRY)&_ZN6S705C33v83Ev,
  (VTBL_ENTRY)&_ZN6S705C33v84Ev,
  (VTBL_ENTRY)&_ZN6S705C33v85Ev,
  (VTBL_ENTRY)&_ZN6S705C23v90Ev,
  (VTBL_ENTRY)&_ZN6S705C23v91Ev,
  (VTBL_ENTRY)&_ZN6S705C23v92Ev,
  (VTBL_ENTRY)&_ZN6S705C23v93Ev,
  (VTBL_ENTRY)&_ZN6S705C23v94Ev,
  (VTBL_ENTRY)&_ZN6S705C23v95Ev,
  (VTBL_ENTRY)&_ZN6S705C23v96Ev,
  (VTBL_ENTRY)&_ZN6S705C23v97Ev,
  (VTBL_ENTRY)&_ZN6S705C23v98Ev,
  (VTBL_ENTRY)&_ZN6S705C23v99Ev,
  ABISELECT(-136,-88),
  (VTBL_ENTRY)&(_ZTI6S705C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn136_N6S705C2D1Ev,_ZThn88_N6S705C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn136_N6S705C2D0Ev,_ZThn88_N6S705C2D0Ev),
  (VTBL_ENTRY)&_ZN7S705C113v86Ev,
  (VTBL_ENTRY)&_ZN7S705C113v87Ev,
  (VTBL_ENTRY)&_ZN7S705C113v88Ev,
  (VTBL_ENTRY)&_ZN7S705C113v89Ev,
};
extern VTBL_ENTRY _ZTI6S705C2[];
extern  VTBL_ENTRY _ZTV6S705C2[];
Class_Descriptor cd_S705C2 = {  "S705C2", // class name
  bases_S705C2, 4,
  &(vtc_S705C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(144,92), // object size
  NSPAIRA(_ZTI6S705C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV6S705C2),100, //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  S705C1  : S705C2 {
  int s705c1f0;
  virtual  ~S705C1(); // _ZN6S705C1D1Ev
  virtual void  v1(); // _ZN6S705C12v1Ev
  virtual void  v2(); // _ZN6S705C12v2Ev
  virtual void  v3(); // _ZN6S705C12v3Ev
  virtual void  v4(); // _ZN6S705C12v4Ev
  virtual void  v5(); // _ZN6S705C12v5Ev
  virtual void  v6(); // _ZN6S705C12v6Ev
  virtual void  v7(); // _ZN6S705C12v7Ev
  S705C1(); // tgen
};
//SIG(1 S705C1) C1{ BC2{ BC3{ BC4{ BC5{ 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 FC6{ m Fi[2]} Fp[2]} vd v72 v73} vd v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 Fc FC7{ BC8{ BC9{ m Fp Fi[2]}}} FC10{ m Fp FC6}} BC11{ vd v86 v87 v88 v89} vd v90 v91 v92 v93 v94 v95 v96 v97 v98 v99} vd v1 v2 v3 v4 v5 v6 v7 Fi}


 S705C1 ::~S705C1(){ note_dtor("S705C1", this);}
void  S705C1 ::v1(){vfunc_called(this, "_ZN6S705C12v1Ev");}
void  S705C1 ::v2(){vfunc_called(this, "_ZN6S705C12v2Ev");}
void  S705C1 ::v3(){vfunc_called(this, "_ZN6S705C12v3Ev");}
void  S705C1 ::v4(){vfunc_called(this, "_ZN6S705C12v4Ev");}
void  S705C1 ::v5(){vfunc_called(this, "_ZN6S705C12v5Ev");}
void  S705C1 ::v6(){vfunc_called(this, "_ZN6S705C12v6Ev");}
void  S705C1 ::v7(){vfunc_called(this, "_ZN6S705C12v7Ev");}
S705C1 ::S705C1(){ note_ctor("S705C1", this);} // tgen

static void Test_S705C1()
{
  extern Class_Descriptor cd_S705C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,25)];
    init_test(&cd_S705C1, buf);
    S705C1 *dp, &lv = *(dp=new (buf) S705C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,96), "sizeof(S705C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S705C1)");
    check_base_class_offset(lv, (S705C5*)(S705C4*)(S705C3*)(S705C2*), 0, "S705C1");
    check_base_class_offset(lv, (S705C4*)(S705C3*)(S705C2*), 0, "S705C1");
    check_base_class_offset(lv, (S705C3*)(S705C2*), 0, "S705C1");
    check_base_class_offset(lv, (S705C11*)(S705C2*), ABISELECT(136,88), "S705C1");
    check_base_class_offset(lv, (S705C2*), 0, "S705C1");
    check_field_offset(lv, s705c1f0, ABISELECT(144,92), "S705C1.s705c1f0");
    test_class_info(&lv, &cd_S705C1);
    dp->~S705C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS705C1(Test_S705C1, "S705C1", ABISELECT(152,96));

#else // __cplusplus

extern void _ZN6S705C1C1Ev();
extern void _ZN6S705C1D1Ev();
Name_Map name_map_S705C1[] = {
  NSPAIR(_ZN6S705C1C1Ev),
  NSPAIR(_ZN6S705C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S705C5;
extern VTBL_ENTRY _ZTI6S705C5[];
extern  VTBL_ENTRY _ZTV6S705C5[];
extern Class_Descriptor cd_S705C4;
extern VTBL_ENTRY _ZTI6S705C4[];
extern  VTBL_ENTRY _ZTV6S705C4[];
extern Class_Descriptor cd_S705C3;
extern VTBL_ENTRY _ZTI6S705C3[];
extern  VTBL_ENTRY _ZTV6S705C3[];
extern Class_Descriptor cd_S705C11;
extern VTBL_ENTRY _ZTI7S705C11[];
extern  VTBL_ENTRY _ZTV7S705C11[];
extern Class_Descriptor cd_S705C2;
extern VTBL_ENTRY _ZTI6S705C2[];
extern  VTBL_ENTRY _ZTV6S705C2[];
static Base_Class bases_S705C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S705C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S705C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S705C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S705C11,    ABISELECT(136,88), //bcp->offset
    99, //bcp->virtual_function_table_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_S705C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S705C1[];
extern void _ZN6S705C1D1Ev();
extern void _ZN6S705C1D0Ev();
extern void _ZN6S705C52v8Ev();
extern void _ZN6S705C52v9Ev();
extern void _ZN6S705C53v10Ev();
extern void _ZN6S705C53v11Ev();
extern void _ZN6S705C53v12Ev();
extern void _ZN6S705C53v13Ev();
extern void _ZN6S705C53v14Ev();
extern void _ZN6S705C53v15Ev();
extern void _ZN6S705C53v16Ev();
extern void _ZN6S705C53v17Ev();
extern void _ZN6S705C53v18Ev();
extern void _ZN6S705C53v19Ev();
extern void _ZN6S705C53v20Ev();
extern void _ZN6S705C53v21Ev();
extern void _ZN6S705C53v22Ev();
extern void _ZN6S705C53v23Ev();
extern void _ZN6S705C53v24Ev();
extern void _ZN6S705C53v25Ev();
extern void _ZN6S705C53v26Ev();
extern void _ZN6S705C53v27Ev();
extern void _ZN6S705C53v28Ev();
extern void _ZN6S705C53v29Ev();
extern void _ZN6S705C53v30Ev();
extern void _ZN6S705C53v31Ev();
extern void _ZN6S705C53v32Ev();
extern void _ZN6S705C53v33Ev();
extern void _ZN6S705C53v34Ev();
extern void _ZN6S705C53v35Ev();
extern void _ZN6S705C53v36Ev();
extern void _ZN6S705C53v37Ev();
extern void _ZN6S705C53v38Ev();
extern void _ZN6S705C53v39Ev();
extern void _ZN6S705C53v40Ev();
extern void _ZN6S705C53v41Ev();
extern void _ZN6S705C53v42Ev();
extern void _ZN6S705C53v43Ev();
extern void _ZN6S705C53v44Ev();
extern void _ZN6S705C53v45Ev();
extern void _ZN6S705C53v46Ev();
extern void _ZN6S705C53v47Ev();
extern void _ZN6S705C53v48Ev();
extern void _ZN6S705C53v49Ev();
extern void _ZN6S705C53v50Ev();
extern void _ZN6S705C53v51Ev();
extern void _ZN6S705C53v52Ev();
extern void _ZN6S705C53v53Ev();
extern void _ZN6S705C53v54Ev();
extern void _ZN6S705C53v55Ev();
extern void _ZN6S705C53v56Ev();
extern void _ZN6S705C53v57Ev();
extern void _ZN6S705C53v58Ev();
extern void _ZN6S705C53v59Ev();
extern void _ZN6S705C53v60Ev();
extern void _ZN6S705C53v61Ev();
extern void _ZN6S705C53v62Ev();
extern void _ZN6S705C53v63Ev();
extern void _ZN6S705C53v64Ev();
extern void _ZN6S705C53v65Ev();
extern void _ZN6S705C53v66Ev();
extern void _ZN6S705C53v67Ev();
extern void _ZN6S705C53v68Ev();
extern void _ZN6S705C53v69Ev();
extern void _ZN6S705C53v70Ev();
extern void _ZN6S705C53v71Ev();
extern void _ZN6S705C43v72Ev();
extern void _ZN6S705C43v73Ev();
extern void _ZN6S705C33v74Ev();
extern void _ZN6S705C33v75Ev();
extern void _ZN6S705C33v76Ev();
extern void _ZN6S705C33v77Ev();
extern void _ZN6S705C33v78Ev();
extern void _ZN6S705C33v79Ev();
extern void _ZN6S705C33v80Ev();
extern void _ZN6S705C33v81Ev();
extern void _ZN6S705C33v82Ev();
extern void _ZN6S705C33v83Ev();
extern void _ZN6S705C33v84Ev();
extern void _ZN6S705C33v85Ev();
extern void _ZN6S705C23v90Ev();
extern void _ZN6S705C23v91Ev();
extern void _ZN6S705C23v92Ev();
extern void _ZN6S705C23v93Ev();
extern void _ZN6S705C23v94Ev();
extern void _ZN6S705C23v95Ev();
extern void _ZN6S705C23v96Ev();
extern void _ZN6S705C23v97Ev();
extern void _ZN6S705C23v98Ev();
extern void _ZN6S705C23v99Ev();
extern void _ZN6S705C12v1Ev();
extern void _ZN6S705C12v2Ev();
extern void _ZN6S705C12v3Ev();
extern void _ZN6S705C12v4Ev();
extern void _ZN6S705C12v5Ev();
extern void _ZN6S705C12v6Ev();
extern void _ZN6S705C12v7Ev();
extern void ABISELECT(_ZThn136_N6S705C1D1Ev,_ZThn88_N6S705C1D1Ev)();
extern void ABISELECT(_ZThn136_N6S705C1D0Ev,_ZThn88_N6S705C1D0Ev)();
extern void _ZN7S705C113v86Ev();
extern void _ZN7S705C113v87Ev();
extern void _ZN7S705C113v88Ev();
extern void _ZN7S705C113v89Ev();
static  VTBL_ENTRY vtc_S705C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S705C1[0]),
  (VTBL_ENTRY)&_ZN6S705C1D1Ev,
  (VTBL_ENTRY)&_ZN6S705C1D0Ev,
  (VTBL_ENTRY)&_ZN6S705C52v8Ev,
  (VTBL_ENTRY)&_ZN6S705C52v9Ev,
  (VTBL_ENTRY)&_ZN6S705C53v10Ev,
  (VTBL_ENTRY)&_ZN6S705C53v11Ev,
  (VTBL_ENTRY)&_ZN6S705C53v12Ev,
  (VTBL_ENTRY)&_ZN6S705C53v13Ev,
  (VTBL_ENTRY)&_ZN6S705C53v14Ev,
  (VTBL_ENTRY)&_ZN6S705C53v15Ev,
  (VTBL_ENTRY)&_ZN6S705C53v16Ev,
  (VTBL_ENTRY)&_ZN6S705C53v17Ev,
  (VTBL_ENTRY)&_ZN6S705C53v18Ev,
  (VTBL_ENTRY)&_ZN6S705C53v19Ev,
  (VTBL_ENTRY)&_ZN6S705C53v20Ev,
  (VTBL_ENTRY)&_ZN6S705C53v21Ev,
  (VTBL_ENTRY)&_ZN6S705C53v22Ev,
  (VTBL_ENTRY)&_ZN6S705C53v23Ev,
  (VTBL_ENTRY)&_ZN6S705C53v24Ev,
  (VTBL_ENTRY)&_ZN6S705C53v25Ev,
  (VTBL_ENTRY)&_ZN6S705C53v26Ev,
  (VTBL_ENTRY)&_ZN6S705C53v27Ev,
  (VTBL_ENTRY)&_ZN6S705C53v28Ev,
  (VTBL_ENTRY)&_ZN6S705C53v29Ev,
  (VTBL_ENTRY)&_ZN6S705C53v30Ev,
  (VTBL_ENTRY)&_ZN6S705C53v31Ev,
  (VTBL_ENTRY)&_ZN6S705C53v32Ev,
  (VTBL_ENTRY)&_ZN6S705C53v33Ev,
  (VTBL_ENTRY)&_ZN6S705C53v34Ev,
  (VTBL_ENTRY)&_ZN6S705C53v35Ev,
  (VTBL_ENTRY)&_ZN6S705C53v36Ev,
  (VTBL_ENTRY)&_ZN6S705C53v37Ev,
  (VTBL_ENTRY)&_ZN6S705C53v38Ev,
  (VTBL_ENTRY)&_ZN6S705C53v39Ev,
  (VTBL_ENTRY)&_ZN6S705C53v40Ev,
  (VTBL_ENTRY)&_ZN6S705C53v41Ev,
  (VTBL_ENTRY)&_ZN6S705C53v42Ev,
  (VTBL_ENTRY)&_ZN6S705C53v43Ev,
  (VTBL_ENTRY)&_ZN6S705C53v44Ev,
  (VTBL_ENTRY)&_ZN6S705C53v45Ev,
  (VTBL_ENTRY)&_ZN6S705C53v46Ev,
  (VTBL_ENTRY)&_ZN6S705C53v47Ev,
  (VTBL_ENTRY)&_ZN6S705C53v48Ev,
  (VTBL_ENTRY)&_ZN6S705C53v49Ev,
  (VTBL_ENTRY)&_ZN6S705C53v50Ev,
  (VTBL_ENTRY)&_ZN6S705C53v51Ev,
  (VTBL_ENTRY)&_ZN6S705C53v52Ev,
  (VTBL_ENTRY)&_ZN6S705C53v53Ev,
  (VTBL_ENTRY)&_ZN6S705C53v54Ev,
  (VTBL_ENTRY)&_ZN6S705C53v55Ev,
  (VTBL_ENTRY)&_ZN6S705C53v56Ev,
  (VTBL_ENTRY)&_ZN6S705C53v57Ev,
  (VTBL_ENTRY)&_ZN6S705C53v58Ev,
  (VTBL_ENTRY)&_ZN6S705C53v59Ev,
  (VTBL_ENTRY)&_ZN6S705C53v60Ev,
  (VTBL_ENTRY)&_ZN6S705C53v61Ev,
  (VTBL_ENTRY)&_ZN6S705C53v62Ev,
  (VTBL_ENTRY)&_ZN6S705C53v63Ev,
  (VTBL_ENTRY)&_ZN6S705C53v64Ev,
  (VTBL_ENTRY)&_ZN6S705C53v65Ev,
  (VTBL_ENTRY)&_ZN6S705C53v66Ev,
  (VTBL_ENTRY)&_ZN6S705C53v67Ev,
  (VTBL_ENTRY)&_ZN6S705C53v68Ev,
  (VTBL_ENTRY)&_ZN6S705C53v69Ev,
  (VTBL_ENTRY)&_ZN6S705C53v70Ev,
  (VTBL_ENTRY)&_ZN6S705C53v71Ev,
  (VTBL_ENTRY)&_ZN6S705C43v72Ev,
  (VTBL_ENTRY)&_ZN6S705C43v73Ev,
  (VTBL_ENTRY)&_ZN6S705C33v74Ev,
  (VTBL_ENTRY)&_ZN6S705C33v75Ev,
  (VTBL_ENTRY)&_ZN6S705C33v76Ev,
  (VTBL_ENTRY)&_ZN6S705C33v77Ev,
  (VTBL_ENTRY)&_ZN6S705C33v78Ev,
  (VTBL_ENTRY)&_ZN6S705C33v79Ev,
  (VTBL_ENTRY)&_ZN6S705C33v80Ev,
  (VTBL_ENTRY)&_ZN6S705C33v81Ev,
  (VTBL_ENTRY)&_ZN6S705C33v82Ev,
  (VTBL_ENTRY)&_ZN6S705C33v83Ev,
  (VTBL_ENTRY)&_ZN6S705C33v84Ev,
  (VTBL_ENTRY)&_ZN6S705C33v85Ev,
  (VTBL_ENTRY)&_ZN6S705C23v90Ev,
  (VTBL_ENTRY)&_ZN6S705C23v91Ev,
  (VTBL_ENTRY)&_ZN6S705C23v92Ev,
  (VTBL_ENTRY)&_ZN6S705C23v93Ev,
  (VTBL_ENTRY)&_ZN6S705C23v94Ev,
  (VTBL_ENTRY)&_ZN6S705C23v95Ev,
  (VTBL_ENTRY)&_ZN6S705C23v96Ev,
  (VTBL_ENTRY)&_ZN6S705C23v97Ev,
  (VTBL_ENTRY)&_ZN6S705C23v98Ev,
  (VTBL_ENTRY)&_ZN6S705C23v99Ev,
  (VTBL_ENTRY)&_ZN6S705C12v1Ev,
  (VTBL_ENTRY)&_ZN6S705C12v2Ev,
  (VTBL_ENTRY)&_ZN6S705C12v3Ev,
  (VTBL_ENTRY)&_ZN6S705C12v4Ev,
  (VTBL_ENTRY)&_ZN6S705C12v5Ev,
  (VTBL_ENTRY)&_ZN6S705C12v6Ev,
  (VTBL_ENTRY)&_ZN6S705C12v7Ev,
  ABISELECT(-136,-88),
  (VTBL_ENTRY)&(_ZTI6S705C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn136_N6S705C1D1Ev,_ZThn88_N6S705C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn136_N6S705C1D0Ev,_ZThn88_N6S705C1D0Ev),
  (VTBL_ENTRY)&_ZN7S705C113v86Ev,
  (VTBL_ENTRY)&_ZN7S705C113v87Ev,
  (VTBL_ENTRY)&_ZN7S705C113v88Ev,
  (VTBL_ENTRY)&_ZN7S705C113v89Ev,
};
extern VTBL_ENTRY _ZTI6S705C1[];
extern  VTBL_ENTRY _ZTV6S705C1[];
Class_Descriptor cd_S705C1 = {  "S705C1", // class name
  bases_S705C1, 5,
  &(vtc_S705C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(152,96), // object size
  NSPAIRA(_ZTI6S705C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S705C1),107, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  5, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S677C5  {
  int s677c5f0;
  __tsi64 s677c5f1;
  void *s677c5f2[4];
  int s677c5f3[2];
  void *s677c5f4;
  ::S3352C4_nt s677c5f5;
  void *s677c5f6[2];
  virtual  ~S677C5(); // _ZN6S677C5D1Ev
  virtual void  v6(); // _ZN6S677C52v6Ev
  virtual void  v7(); // _ZN6S677C52v7Ev
  virtual void  v8(); // _ZN6S677C52v8Ev
  virtual void  v9(); // _ZN6S677C52v9Ev
  virtual void  v10(); // _ZN6S677C53v10Ev
  virtual void  v11(); // _ZN6S677C53v11Ev
  virtual void  v12(); // _ZN6S677C53v12Ev
  virtual void  v13(); // _ZN6S677C53v13Ev
  virtual void  v14(); // _ZN6S677C53v14Ev
  virtual void  v15(); // _ZN6S677C53v15Ev
  virtual void  v16(); // _ZN6S677C53v16Ev
  virtual void  v17(); // _ZN6S677C53v17Ev
  virtual void  v18(); // _ZN6S677C53v18Ev
  virtual void  v19(); // _ZN6S677C53v19Ev
  virtual void  v20(); // _ZN6S677C53v20Ev
  virtual void  v21(); // _ZN6S677C53v21Ev
  virtual void  v22(); // _ZN6S677C53v22Ev
  virtual void  v23(); // _ZN6S677C53v23Ev
  virtual void  v24(); // _ZN6S677C53v24Ev
  virtual void  v25(); // _ZN6S677C53v25Ev
  virtual void  v26(); // _ZN6S677C53v26Ev
  virtual void  v27(); // _ZN6S677C53v27Ev
  virtual void  v28(); // _ZN6S677C53v28Ev
  virtual void  v29(); // _ZN6S677C53v29Ev
  virtual void  v30(); // _ZN6S677C53v30Ev
  virtual void  v31(); // _ZN6S677C53v31Ev
  virtual void  v32(); // _ZN6S677C53v32Ev
  virtual void  v33(); // _ZN6S677C53v33Ev
  virtual void  v34(); // _ZN6S677C53v34Ev
  virtual void  v35(); // _ZN6S677C53v35Ev
  virtual void  v36(); // _ZN6S677C53v36Ev
  virtual void  v37(); // _ZN6S677C53v37Ev
  virtual void  v38(); // _ZN6S677C53v38Ev
  virtual void  v39(); // _ZN6S677C53v39Ev
  virtual void  v40(); // _ZN6S677C53v40Ev
  virtual void  v41(); // _ZN6S677C53v41Ev
  virtual void  v42(); // _ZN6S677C53v42Ev
  virtual void  v43(); // _ZN6S677C53v43Ev
  virtual void  v44(); // _ZN6S677C53v44Ev
  virtual void  v45(); // _ZN6S677C53v45Ev
  virtual void  v46(); // _ZN6S677C53v46Ev
  virtual void  v47(); // _ZN6S677C53v47Ev
  virtual void  v48(); // _ZN6S677C53v48Ev
  virtual void  v49(); // _ZN6S677C53v49Ev
  virtual void  v50(); // _ZN6S677C53v50Ev
  virtual void  v51(); // _ZN6S677C53v51Ev
  virtual void  v52(); // _ZN6S677C53v52Ev
  virtual void  v53(); // _ZN6S677C53v53Ev
  virtual void  v54(); // _ZN6S677C53v54Ev
  virtual void  v55(); // _ZN6S677C53v55Ev
  virtual void  v56(); // _ZN6S677C53v56Ev
  virtual void  v57(); // _ZN6S677C53v57Ev
  virtual void  v58(); // _ZN6S677C53v58Ev
  virtual void  v59(); // _ZN6S677C53v59Ev
  virtual void  v60(); // _ZN6S677C53v60Ev
  virtual void  v61(); // _ZN6S677C53v61Ev
  virtual void  v62(); // _ZN6S677C53v62Ev
  virtual void  v63(); // _ZN6S677C53v63Ev
  virtual void  v64(); // _ZN6S677C53v64Ev
  virtual void  v65(); // _ZN6S677C53v65Ev
  virtual void  v66(); // _ZN6S677C53v66Ev
  virtual void  v67(); // _ZN6S677C53v67Ev
  virtual void  v68(); // _ZN6S677C53v68Ev
  virtual void  v69(); // _ZN6S677C53v69Ev
  S677C5(); // tgen
};
//SIG(-1 S677C5) 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]}


 S677C5 ::~S677C5(){ note_dtor("S677C5", this);}
void  S677C5 ::v6(){vfunc_called(this, "_ZN6S677C52v6Ev");}
void  S677C5 ::v7(){vfunc_called(this, "_ZN6S677C52v7Ev");}
void  S677C5 ::v8(){vfunc_called(this, "_ZN6S677C52v8Ev");}
void  S677C5 ::v9(){vfunc_called(this, "_ZN6S677C52v9Ev");}
void  S677C5 ::v10(){vfunc_called(this, "_ZN6S677C53v10Ev");}
void  S677C5 ::v11(){vfunc_called(this, "_ZN6S677C53v11Ev");}
void  S677C5 ::v12(){vfunc_called(this, "_ZN6S677C53v12Ev");}
void  S677C5 ::v13(){vfunc_called(this, "_ZN6S677C53v13Ev");}
void  S677C5 ::v14(){vfunc_called(this, "_ZN6S677C53v14Ev");}
void  S677C5 ::v15(){vfunc_called(this, "_ZN6S677C53v15Ev");}
void  S677C5 ::v16(){vfunc_called(this, "_ZN6S677C53v16Ev");}
void  S677C5 ::v17(){vfunc_called(this, "_ZN6S677C53v17Ev");}
void  S677C5 ::v18(){vfunc_called(this, "_ZN6S677C53v18Ev");}
void  S677C5 ::v19(){vfunc_called(this, "_ZN6S677C53v19Ev");}
void  S677C5 ::v20(){vfunc_called(this, "_ZN6S677C53v20Ev");}
void  S677C5 ::v21(){vfunc_called(this, "_ZN6S677C53v21Ev");}
void  S677C5 ::v22(){vfunc_called(this, "_ZN6S677C53v22Ev");}
void  S677C5 ::v23(){vfunc_called(this, "_ZN6S677C53v23Ev");}
void  S677C5 ::v24(){vfunc_called(this, "_ZN6S677C53v24Ev");}
void  S677C5 ::v25(){vfunc_called(this, "_ZN6S677C53v25Ev");}
void  S677C5 ::v26(){vfunc_called(this, "_ZN6S677C53v26Ev");}
void  S677C5 ::v27(){vfunc_called(this, "_ZN6S677C53v27Ev");}
void  S677C5 ::v28(){vfunc_called(this, "_ZN6S677C53v28Ev");}
void  S677C5 ::v29(){vfunc_called(this, "_ZN6S677C53v29Ev");}
void  S677C5 ::v30(){vfunc_called(this, "_ZN6S677C53v30Ev");}
void  S677C5 ::v31(){vfunc_called(this, "_ZN6S677C53v31Ev");}
void  S677C5 ::v32(){vfunc_called(this, "_ZN6S677C53v32Ev");}
void  S677C5 ::v33(){vfunc_called(this, "_ZN6S677C53v33Ev");}
void  S677C5 ::v34(){vfunc_called(this, "_ZN6S677C53v34Ev");}
void  S677C5 ::v35(){vfunc_called(this, "_ZN6S677C53v35Ev");}
void  S677C5 ::v36(){vfunc_called(this, "_ZN6S677C53v36Ev");}
void  S677C5 ::v37(){vfunc_called(this, "_ZN6S677C53v37Ev");}
void  S677C5 ::v38(){vfunc_called(this, "_ZN6S677C53v38Ev");}
void  S677C5 ::v39(){vfunc_called(this, "_ZN6S677C53v39Ev");}
void  S677C5 ::v40(){vfunc_called(this, "_ZN6S677C53v40Ev");}
void  S677C5 ::v41(){vfunc_called(this, "_ZN6S677C53v41Ev");}
void  S677C5 ::v42(){vfunc_called(this, "_ZN6S677C53v42Ev");}
void  S677C5 ::v43(){vfunc_called(this, "_ZN6S677C53v43Ev");}
void  S677C5 ::v44(){vfunc_called(this, "_ZN6S677C53v44Ev");}
void  S677C5 ::v45(){vfunc_called(this, "_ZN6S677C53v45Ev");}
void  S677C5 ::v46(){vfunc_called(this, "_ZN6S677C53v46Ev");}
void  S677C5 ::v47(){vfunc_called(this, "_ZN6S677C53v47Ev");}
void  S677C5 ::v48(){vfunc_called(this, "_ZN6S677C53v48Ev");}
void  S677C5 ::v49(){vfunc_called(this, "_ZN6S677C53v49Ev");}
void  S677C5 ::v50(){vfunc_called(this, "_ZN6S677C53v50Ev");}
void  S677C5 ::v51(){vfunc_called(this, "_ZN6S677C53v51Ev");}
void  S677C5 ::v52(){vfunc_called(this, "_ZN6S677C53v52Ev");}
void  S677C5 ::v53(){vfunc_called(this, "_ZN6S677C53v53Ev");}
void  S677C5 ::v54(){vfunc_called(this, "_ZN6S677C53v54Ev");}
void  S677C5 ::v55(){vfunc_called(this, "_ZN6S677C53v55Ev");}
void  S677C5 ::v56(){vfunc_called(this, "_ZN6S677C53v56Ev");}
void  S677C5 ::v57(){vfunc_called(this, "_ZN6S677C53v57Ev");}
void  S677C5 ::v58(){vfunc_called(this, "_ZN6S677C53v58Ev");}
void  S677C5 ::v59(){vfunc_called(this, "_ZN6S677C53v59Ev");}
void  S677C5 ::v60(){vfunc_called(this, "_ZN6S677C53v60Ev");}
void  S677C5 ::v61(){vfunc_called(this, "_ZN6S677C53v61Ev");}
void  S677C5 ::v62(){vfunc_called(this, "_ZN6S677C53v62Ev");}
void  S677C5 ::v63(){vfunc_called(this, "_ZN6S677C53v63Ev");}
void  S677C5 ::v64(){vfunc_called(this, "_ZN6S677C53v64Ev");}
void  S677C5 ::v65(){vfunc_called(this, "_ZN6S677C53v65Ev");}
void  S677C5 ::v66(){vfunc_called(this, "_ZN6S677C53v66Ev");}
void  S677C5 ::v67(){vfunc_called(this, "_ZN6S677C53v67Ev");}
void  S677C5 ::v68(){vfunc_called(this, "_ZN6S677C53v68Ev");}
void  S677C5 ::v69(){vfunc_called(this, "_ZN6S677C53v69Ev");}
S677C5 ::S677C5(){ note_ctor("S677C5", this);} // tgen

static void Test_S677C5()
{
  extern Class_Descriptor cd_S677C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S677C5, buf);
    S677C5 *dp, &lv = *(dp=new (buf) S677C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S677C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S677C5)");
    check_field_offset(lv, s677c5f0, ABISELECT(8,4), "S677C5.s677c5f0");
    check_field_offset(lv, s677c5f1, ABISELECT(16,8), "S677C5.s677c5f1");
    check_field_offset(lv, s677c5f2, ABISELECT(24,16), "S677C5.s677c5f2");
    check_field_offset(lv, s677c5f3, ABISELECT(56,32), "S677C5.s677c5f3");
    check_field_offset(lv, s677c5f4, ABISELECT(64,40), "S677C5.s677c5f4");
    check_field_offset(lv, s677c5f5, ABISELECT(72,44), "S677C5.s677c5f5");
    check_field_offset(lv, s677c5f6, ABISELECT(80,52), "S677C5.s677c5f6");
    test_class_info(&lv, &cd_S677C5);
    dp->~S677C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS677C5(Test_S677C5, "S677C5", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN6S677C5C1Ev();
extern void _ZN6S677C5D1Ev();
Name_Map name_map_S677C5[] = {
  NSPAIR(_ZN6S677C5C1Ev),
  NSPAIR(_ZN6S677C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S677C5[];
extern void _ZN6S677C5D1Ev();
extern void _ZN6S677C5D0Ev();
extern void _ZN6S677C52v6Ev();
extern void _ZN6S677C52v7Ev();
extern void _ZN6S677C52v8Ev();
extern void _ZN6S677C52v9Ev();
extern void _ZN6S677C53v10Ev();
extern void _ZN6S677C53v11Ev();
extern void _ZN6S677C53v12Ev();
extern void _ZN6S677C53v13Ev();
extern void _ZN6S677C53v14Ev();
extern void _ZN6S677C53v15Ev();
extern void _ZN6S677C53v16Ev();
extern void _ZN6S677C53v17Ev();
extern void _ZN6S677C53v18Ev();
extern void _ZN6S677C53v19Ev();
extern void _ZN6S677C53v20Ev();
extern void _ZN6S677C53v21Ev();
extern void _ZN6S677C53v22Ev();
extern void _ZN6S677C53v23Ev();
extern void _ZN6S677C53v24Ev();
extern void _ZN6S677C53v25Ev();
extern void _ZN6S677C53v26Ev();
extern void _ZN6S677C53v27Ev();
extern void _ZN6S677C53v28Ev();
extern void _ZN6S677C53v29Ev();
extern void _ZN6S677C53v30Ev();
extern void _ZN6S677C53v31Ev();
extern void _ZN6S677C53v32Ev();
extern void _ZN6S677C53v33Ev();
extern void _ZN6S677C53v34Ev();
extern void _ZN6S677C53v35Ev();
extern void _ZN6S677C53v36Ev();
extern void _ZN6S677C53v37Ev();
extern void _ZN6S677C53v38Ev();
extern void _ZN6S677C53v39Ev();
extern void _ZN6S677C53v40Ev();
extern void _ZN6S677C53v41Ev();
extern void _ZN6S677C53v42Ev();
extern void _ZN6S677C53v43Ev();
extern void _ZN6S677C53v44Ev();
extern void _ZN6S677C53v45Ev();
extern void _ZN6S677C53v46Ev();
extern void _ZN6S677C53v47Ev();
extern void _ZN6S677C53v48Ev();
extern void _ZN6S677C53v49Ev();
extern void _ZN6S677C53v50Ev();
extern void _ZN6S677C53v51Ev();
extern void _ZN6S677C53v52Ev();
extern void _ZN6S677C53v53Ev();
extern void _ZN6S677C53v54Ev();
extern void _ZN6S677C53v55Ev();
extern void _ZN6S677C53v56Ev();
extern void _ZN6S677C53v57Ev();
extern void _ZN6S677C53v58Ev();
extern void _ZN6S677C53v59Ev();
extern void _ZN6S677C53v60Ev();
extern void _ZN6S677C53v61Ev();
extern void _ZN6S677C53v62Ev();
extern void _ZN6S677C53v63Ev();
extern void _ZN6S677C53v64Ev();
extern void _ZN6S677C53v65Ev();
extern void _ZN6S677C53v66Ev();
extern void _ZN6S677C53v67Ev();
extern void _ZN6S677C53v68Ev();
extern void _ZN6S677C53v69Ev();
static  VTBL_ENTRY vtc_S677C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S677C5[0]),
  (VTBL_ENTRY)&_ZN6S677C5D1Ev,
  (VTBL_ENTRY)&_ZN6S677C5D0Ev,
  (VTBL_ENTRY)&_ZN6S677C52v6Ev,
  (VTBL_ENTRY)&_ZN6S677C52v7Ev,
  (VTBL_ENTRY)&_ZN6S677C52v8Ev,
  (VTBL_ENTRY)&_ZN6S677C52v9Ev,
  (VTBL_ENTRY)&_ZN6S677C53v10Ev,
  (VTBL_ENTRY)&_ZN6S677C53v11Ev,
  (VTBL_ENTRY)&_ZN6S677C53v12Ev,
  (VTBL_ENTRY)&_ZN6S677C53v13Ev,
  (VTBL_ENTRY)&_ZN6S677C53v14Ev,
  (VTBL_ENTRY)&_ZN6S677C53v15Ev,
  (VTBL_ENTRY)&_ZN6S677C53v16Ev,
  (VTBL_ENTRY)&_ZN6S677C53v17Ev,
  (VTBL_ENTRY)&_ZN6S677C53v18Ev,
  (VTBL_ENTRY)&_ZN6S677C53v19Ev,
  (VTBL_ENTRY)&_ZN6S677C53v20Ev,
  (VTBL_ENTRY)&_ZN6S677C53v21Ev,
  (VTBL_ENTRY)&_ZN6S677C53v22Ev,
  (VTBL_ENTRY)&_ZN6S677C53v23Ev,
  (VTBL_ENTRY)&_ZN6S677C53v24Ev,
  (VTBL_ENTRY)&_ZN6S677C53v25Ev,
  (VTBL_ENTRY)&_ZN6S677C53v26Ev,
  (VTBL_ENTRY)&_ZN6S677C53v27Ev,
  (VTBL_ENTRY)&_ZN6S677C53v28Ev,
  (VTBL_ENTRY)&_ZN6S677C53v29Ev,
  (VTBL_ENTRY)&_ZN6S677C53v30Ev,
  (VTBL_ENTRY)&_ZN6S677C53v31Ev,
  (VTBL_ENTRY)&_ZN6S677C53v32Ev,
  (VTBL_ENTRY)&_ZN6S677C53v33Ev,
  (VTBL_ENTRY)&_ZN6S677C53v34Ev,
  (VTBL_ENTRY)&_ZN6S677C53v35Ev,
  (VTBL_ENTRY)&_ZN6S677C53v36Ev,
  (VTBL_ENTRY)&_ZN6S677C53v37Ev,
  (VTBL_ENTRY)&_ZN6S677C53v38Ev,
  (VTBL_ENTRY)&_ZN6S677C53v39Ev,
  (VTBL_ENTRY)&_ZN6S677C53v40Ev,
  (VTBL_ENTRY)&_ZN6S677C53v41Ev,
  (VTBL_ENTRY)&_ZN6S677C53v42Ev,
  (VTBL_ENTRY)&_ZN6S677C53v43Ev,
  (VTBL_ENTRY)&_ZN6S677C53v44Ev,
  (VTBL_ENTRY)&_ZN6S677C53v45Ev,
  (VTBL_ENTRY)&_ZN6S677C53v46Ev,
  (VTBL_ENTRY)&_ZN6S677C53v47Ev,
  (VTBL_ENTRY)&_ZN6S677C53v48Ev,
  (VTBL_ENTRY)&_ZN6S677C53v49Ev,
  (VTBL_ENTRY)&_ZN6S677C53v50Ev,
  (VTBL_ENTRY)&_ZN6S677C53v51Ev,
  (VTBL_ENTRY)&_ZN6S677C53v52Ev,
  (VTBL_ENTRY)&_ZN6S677C53v53Ev,
  (VTBL_ENTRY)&_ZN6S677C53v54Ev,
  (VTBL_ENTRY)&_ZN6S677C53v55Ev,
  (VTBL_ENTRY)&_ZN6S677C53v56Ev,
  (VTBL_ENTRY)&_ZN6S677C53v57Ev,
  (VTBL_ENTRY)&_ZN6S677C53v58Ev,
  (VTBL_ENTRY)&_ZN6S677C53v59Ev,
  (VTBL_ENTRY)&_ZN6S677C53v60Ev,
  (VTBL_ENTRY)&_ZN6S677C53v61Ev,
  (VTBL_ENTRY)&_ZN6S677C53v62Ev,
  (VTBL_ENTRY)&_ZN6S677C53v63Ev,
  (VTBL_ENTRY)&_ZN6S677C53v64Ev,
  (VTBL_ENTRY)&_ZN6S677C53v65Ev,
  (VTBL_ENTRY)&_ZN6S677C53v66Ev,
  (VTBL_ENTRY)&_ZN6S677C53v67Ev,
  (VTBL_ENTRY)&_ZN6S677C53v68Ev,
  (VTBL_ENTRY)&_ZN6S677C53v69Ev,
};
extern VTBL_ENTRY _ZTI6S677C5[];
extern  VTBL_ENTRY _ZTV6S677C5[];
Class_Descriptor cd_S677C5 = {  "S677C5", // class name
  0,0,//no base classes
  &(vtc_S677C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI6S677C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S677C5),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  S677C4  : S677C5 {
  virtual  ~S677C4(); // _ZN6S677C4D1Ev
  virtual void  v70(); // _ZN6S677C43v70Ev
  virtual void  v71(); // _ZN6S677C43v71Ev
  S677C4(); // tgen
};
//SIG(-1 S677C4) C1{ BC2{ vd v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2}


 S677C4 ::~S677C4(){ note_dtor("S677C4", this);}
void  S677C4 ::v70(){vfunc_called(this, "_ZN6S677C43v70Ev");}
void  S677C4 ::v71(){vfunc_called(this, "_ZN6S677C43v71Ev");}
S677C4 ::S677C4(){ note_ctor("S677C4", this);} // tgen

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

#else // __cplusplus

extern void _ZN6S677C4C1Ev();
extern void _ZN6S677C4D1Ev();
Name_Map name_map_S677C4[] = {
  NSPAIR(_ZN6S677C4C1Ev),
  NSPAIR(_ZN6S677C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S677C5;
extern VTBL_ENTRY _ZTI6S677C5[];
extern  VTBL_ENTRY _ZTV6S677C5[];
static Base_Class bases_S677C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S677C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S677C4[];
extern void _ZN6S677C4D1Ev();
extern void _ZN6S677C4D0Ev();
extern void _ZN6S677C52v6Ev();
extern void _ZN6S677C52v7Ev();
extern void _ZN6S677C52v8Ev();
extern void _ZN6S677C52v9Ev();
extern void _ZN6S677C53v10Ev();
extern void _ZN6S677C53v11Ev();
extern void _ZN6S677C53v12Ev();
extern void _ZN6S677C53v13Ev();
extern void _ZN6S677C53v14Ev();
extern void _ZN6S677C53v15Ev();
extern void _ZN6S677C53v16Ev();
extern void _ZN6S677C53v17Ev();
extern void _ZN6S677C53v18Ev();
extern void _ZN6S677C53v19Ev();
extern void _ZN6S677C53v20Ev();
extern void _ZN6S677C53v21Ev();
extern void _ZN6S677C53v22Ev();
extern void _ZN6S677C53v23Ev();
extern void _ZN6S677C53v24Ev();
extern void _ZN6S677C53v25Ev();
extern void _ZN6S677C53v26Ev();
extern void _ZN6S677C53v27Ev();
extern void _ZN6S677C53v28Ev();
extern void _ZN6S677C53v29Ev();
extern void _ZN6S677C53v30Ev();
extern void _ZN6S677C53v31Ev();
extern void _ZN6S677C53v32Ev();
extern void _ZN6S677C53v33Ev();
extern void _ZN6S677C53v34Ev();
extern void _ZN6S677C53v35Ev();
extern void _ZN6S677C53v36Ev();
extern void _ZN6S677C53v37Ev();
extern void _ZN6S677C53v38Ev();
extern void _ZN6S677C53v39Ev();
extern void _ZN6S677C53v40Ev();
extern void _ZN6S677C53v41Ev();
extern void _ZN6S677C53v42Ev();
extern void _ZN6S677C53v43Ev();
extern void _ZN6S677C53v44Ev();
extern void _ZN6S677C53v45Ev();
extern void _ZN6S677C53v46Ev();
extern void _ZN6S677C53v47Ev();
extern void _ZN6S677C53v48Ev();
extern void _ZN6S677C53v49Ev();
extern void _ZN6S677C53v50Ev();
extern void _ZN6S677C53v51Ev();
extern void _ZN6S677C53v52Ev();
extern void _ZN6S677C53v53Ev();
extern void _ZN6S677C53v54Ev();
extern void _ZN6S677C53v55Ev();
extern void _ZN6S677C53v56Ev();
extern void _ZN6S677C53v57Ev();
extern void _ZN6S677C53v58Ev();
extern void _ZN6S677C53v59Ev();
extern void _ZN6S677C53v60Ev();
extern void _ZN6S677C53v61Ev();
extern void _ZN6S677C53v62Ev();
extern void _ZN6S677C53v63Ev();
extern void _ZN6S677C53v64Ev();
extern void _ZN6S677C53v65Ev();
extern void _ZN6S677C53v66Ev();
extern void _ZN6S677C53v67Ev();
extern void _ZN6S677C53v68Ev();
extern void _ZN6S677C53v69Ev();
extern void _ZN6S677C43v70Ev();
extern void _ZN6S677C43v71Ev();
static  VTBL_ENTRY vtc_S677C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S677C4[0]),
  (VTBL_ENTRY)&_ZN6S677C4D1Ev,
  (VTBL_ENTRY)&_ZN6S677C4D0Ev,
  (VTBL_ENTRY)&_ZN6S677C52v6Ev,
  (VTBL_ENTRY)&_ZN6S677C52v7Ev,
  (VTBL_ENTRY)&_ZN6S677C52v8Ev,
  (VTBL_ENTRY)&_ZN6S677C52v9Ev,
  (VTBL_ENTRY)&_ZN6S677C53v10Ev,
  (VTBL_ENTRY)&_ZN6S677C53v11Ev,
  (VTBL_ENTRY)&_ZN6S677C53v12Ev,
  (VTBL_ENTRY)&_ZN6S677C53v13Ev,
  (VTBL_ENTRY)&_ZN6S677C53v14Ev,
  (VTBL_ENTRY)&_ZN6S677C53v15Ev,
  (VTBL_ENTRY)&_ZN6S677C53v16Ev,
  (VTBL_ENTRY)&_ZN6S677C53v17Ev,
  (VTBL_ENTRY)&_ZN6S677C53v18Ev,
  (VTBL_ENTRY)&_ZN6S677C53v19Ev,
  (VTBL_ENTRY)&_ZN6S677C53v20Ev,
  (VTBL_ENTRY)&_ZN6S677C53v21Ev,
  (VTBL_ENTRY)&_ZN6S677C53v22Ev,
  (VTBL_ENTRY)&_ZN6S677C53v23Ev,
  (VTBL_ENTRY)&_ZN6S677C53v24Ev,
  (VTBL_ENTRY)&_ZN6S677C53v25Ev,
  (VTBL_ENTRY)&_ZN6S677C53v26Ev,
  (VTBL_ENTRY)&_ZN6S677C53v27Ev,
  (VTBL_ENTRY)&_ZN6S677C53v28Ev,
  (VTBL_ENTRY)&_ZN6S677C53v29Ev,
  (VTBL_ENTRY)&_ZN6S677C53v30Ev,
  (VTBL_ENTRY)&_ZN6S677C53v31Ev,
  (VTBL_ENTRY)&_ZN6S677C53v32Ev,
  (VTBL_ENTRY)&_ZN6S677C53v33Ev,
  (VTBL_ENTRY)&_ZN6S677C53v34Ev,
  (VTBL_ENTRY)&_ZN6S677C53v35Ev,
  (VTBL_ENTRY)&_ZN6S677C53v36Ev,
  (VTBL_ENTRY)&_ZN6S677C53v37Ev,
  (VTBL_ENTRY)&_ZN6S677C53v38Ev,
  (VTBL_ENTRY)&_ZN6S677C53v39Ev,
  (VTBL_ENTRY)&_ZN6S677C53v40Ev,
  (VTBL_ENTRY)&_ZN6S677C53v41Ev,
  (VTBL_ENTRY)&_ZN6S677C53v42Ev,
  (VTBL_ENTRY)&_ZN6S677C53v43Ev,
  (VTBL_ENTRY)&_ZN6S677C53v44Ev,
  (VTBL_ENTRY)&_ZN6S677C53v45Ev,
  (VTBL_ENTRY)&_ZN6S677C53v46Ev,
  (VTBL_ENTRY)&_ZN6S677C53v47Ev,
  (VTBL_ENTRY)&_ZN6S677C53v48Ev,
  (VTBL_ENTRY)&_ZN6S677C53v49Ev,
  (VTBL_ENTRY)&_ZN6S677C53v50Ev,
  (VTBL_ENTRY)&_ZN6S677C53v51Ev,
  (VTBL_ENTRY)&_ZN6S677C53v52Ev,
  (VTBL_ENTRY)&_ZN6S677C53v53Ev,
  (VTBL_ENTRY)&_ZN6S677C53v54Ev,
  (VTBL_ENTRY)&_ZN6S677C53v55Ev,
  (VTBL_ENTRY)&_ZN6S677C53v56Ev,
  (VTBL_ENTRY)&_ZN6S677C53v57Ev,
  (VTBL_ENTRY)&_ZN6S677C53v58Ev,
  (VTBL_ENTRY)&_ZN6S677C53v59Ev,
  (VTBL_ENTRY)&_ZN6S677C53v60Ev,
  (VTBL_ENTRY)&_ZN6S677C53v61Ev,
  (VTBL_ENTRY)&_ZN6S677C53v62Ev,
  (VTBL_ENTRY)&_ZN6S677C53v63Ev,
  (VTBL_ENTRY)&_ZN6S677C53v64Ev,
  (VTBL_ENTRY)&_ZN6S677C53v65Ev,
  (VTBL_ENTRY)&_ZN6S677C53v66Ev,
  (VTBL_ENTRY)&_ZN6S677C53v67Ev,
  (VTBL_ENTRY)&_ZN6S677C53v68Ev,
  (VTBL_ENTRY)&_ZN6S677C53v69Ev,
  (VTBL_ENTRY)&_ZN6S677C43v70Ev,
  (VTBL_ENTRY)&_ZN6S677C43v71Ev,
};
extern VTBL_ENTRY _ZTI6S677C4[];
extern  VTBL_ENTRY _ZTV6S677C4[];
Class_Descriptor cd_S677C4 = {  "S677C4", // class name
  bases_S677C4, 1,
  &(vtc_S677C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI6S677C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S677C4),70, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S677C3  : S677C4 {
  char s677c3f0;
  ::S3352C17 s677c3f1;
  ::S87C12_nt s677c3f2;
  virtual  ~S677C3(); // _ZN6S677C3D1Ev
  virtual void  v72(); // _ZN6S677C33v72Ev
  virtual void  v73(); // _ZN6S677C33v73Ev
  virtual void  v74(); // _ZN6S677C33v74Ev
  virtual void  v75(); // _ZN6S677C33v75Ev
  virtual void  v76(); // _ZN6S677C33v76Ev
  virtual void  v77(); // _ZN6S677C33v77Ev
  virtual void  v78(); // _ZN6S677C33v78Ev
  virtual void  v79(); // _ZN6S677C33v79Ev
  virtual void  v80(); // _ZN6S677C33v80Ev
  virtual void  v81(); // _ZN6S677C33v81Ev
  virtual void  v82(); // _ZN6S677C33v82Ev
  virtual void  v83(); // _ZN6S677C33v83Ev
  S677C3(); // tgen
};
//SIG(-1 S677C3) C1{ BC2{ BC3{ vd v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v77 v78} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 Fc FC5{ BC6{ BC7{ m Fp Fi[2]}}} FC8{ m Fp FC4}}


 S677C3 ::~S677C3(){ note_dtor("S677C3", this);}
void  S677C3 ::v72(){vfunc_called(this, "_ZN6S677C33v72Ev");}
void  S677C3 ::v73(){vfunc_called(this, "_ZN6S677C33v73Ev");}
void  S677C3 ::v74(){vfunc_called(this, "_ZN6S677C33v74Ev");}
void  S677C3 ::v75(){vfunc_called(this, "_ZN6S677C33v75Ev");}
void  S677C3 ::v76(){vfunc_called(this, "_ZN6S677C33v76Ev");}
void  S677C3 ::v77(){vfunc_called(this, "_ZN6S677C33v77Ev");}
void  S677C3 ::v78(){vfunc_called(this, "_ZN6S677C33v78Ev");}
void  S677C3 ::v79(){vfunc_called(this, "_ZN6S677C33v79Ev");}
void  S677C3 ::v80(){vfunc_called(this, "_ZN6S677C33v80Ev");}
void  S677C3 ::v81(){vfunc_called(this, "_ZN6S677C33v81Ev");}
void  S677C3 ::v82(){vfunc_called(this, "_ZN6S677C33v82Ev");}
void  S677C3 ::v83(){vfunc_called(this, "_ZN6S677C33v83Ev");}
S677C3 ::S677C3(){ note_ctor("S677C3", this);} // tgen

static void Test_S677C3()
{
  extern Class_Descriptor cd_S677C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,23)];
    init_test(&cd_S677C3, buf);
    S677C3 *dp, &lv = *(dp=new (buf) S677C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,88), "sizeof(S677C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S677C3)");
    check_base_class_offset(lv, (S677C5*)(S677C4*), 0, "S677C3");
    check_base_class_offset(lv, (S677C4*), 0, "S677C3");
    check_field_offset(lv, s677c3f0, ABISELECT(96,60), "S677C3.s677c3f0");
    check_field_offset(lv, s677c3f1, ABISELECT(104,64), "S677C3.s677c3f1");
    check_field_offset(lv, s677c3f2, ABISELECT(120,76), "S677C3.s677c3f2");
    test_class_info(&lv, &cd_S677C3);
    dp->~S677C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS677C3(Test_S677C3, "S677C3", ABISELECT(136,88));

#else // __cplusplus

extern void _ZN6S677C3C1Ev();
extern void _ZN6S677C3D1Ev();
Name_Map name_map_S677C3[] = {
  NSPAIR(_ZN6S677C3C1Ev),
  NSPAIR(_ZN6S677C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S677C5;
extern VTBL_ENTRY _ZTI6S677C5[];
extern  VTBL_ENTRY _ZTV6S677C5[];
extern Class_Descriptor cd_S677C4;
extern VTBL_ENTRY _ZTI6S677C4[];
extern  VTBL_ENTRY _ZTV6S677C4[];
static Base_Class bases_S677C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S677C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S677C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI6S677C3[];
extern void _ZN6S677C3D1Ev();
extern void _ZN6S677C3D0Ev();
extern void _ZN6S677C52v6Ev();
extern void _ZN6S677C52v7Ev();
extern void _ZN6S677C52v8Ev();
extern void _ZN6S677C52v9Ev();
extern void _ZN6S677C53v10Ev();
extern void _ZN6S677C53v11Ev();
extern void _ZN6S677C53v12Ev();
extern void _ZN6S677C53v13Ev();
extern void _ZN6S677C53v14Ev();
extern void _ZN6S677C53v15Ev();
extern void _ZN6S677C53v16Ev();
extern void _ZN6S677C53v17Ev();
extern void _ZN6S677C53v18Ev();
extern void _ZN6S677C53v19Ev();
extern void _ZN6S677C53v20Ev();
extern void _ZN6S677C53v21Ev();
extern void _ZN6S677C53v22Ev();
extern void _ZN6S677C53v23Ev();
extern void _ZN6S677C53v24Ev();
extern void _ZN6S677C53v25Ev();
extern void _ZN6S677C53v26Ev();
extern void _ZN6S677C53v27Ev();
extern void _ZN6S677C53v28Ev();
extern void _ZN6S677C53v29Ev();
extern void _ZN6S677C53v30Ev();
extern void _ZN6S677C53v31Ev();
extern void _ZN6S677C53v32Ev();
extern void _ZN6S677C53v33Ev();
extern void _ZN6S677C53v34Ev();
extern void _ZN6S677C53v35Ev();
extern void _ZN6S677C53v36Ev();
extern void _ZN6S677C53v37Ev();
extern void _ZN6S677C53v38Ev();
extern void _ZN6S677C53v39Ev();
extern void _ZN6S677C53v40Ev();
extern void _ZN6S677C53v41Ev();
extern void _ZN6S677C53v42Ev();
extern void _ZN6S677C53v43Ev();
extern void _ZN6S677C53v44Ev();
extern void _ZN6S677C53v45Ev();
extern void _ZN6S677C53v46Ev();
extern void _ZN6S677C53v47Ev();
extern void _ZN6S677C53v48Ev();
extern void _ZN6S677C53v49Ev();
extern void _ZN6S677C53v50Ev();
extern void _ZN6S677C53v51Ev();
extern void _ZN6S677C53v52Ev();
extern void _ZN6S677C53v53Ev();
extern void _ZN6S677C53v54Ev();
extern void _ZN6S677C53v55Ev();
extern void _ZN6S677C53v56Ev();
extern void _ZN6S677C53v57Ev();
extern void _ZN6S677C53v58Ev();
extern void _ZN6S677C53v59Ev();
extern void _ZN6S677C53v60Ev();
extern void _ZN6S677C53v61Ev();
extern void _ZN6S677C53v62Ev();
extern void _ZN6S677C53v63Ev();
extern void _ZN6S677C53v64Ev();
extern void _ZN6S677C53v65Ev();
extern void _ZN6S677C53v66Ev();
extern void _ZN6S677C53v67Ev();
extern void _ZN6S677C53v68Ev();
extern void _ZN6S677C53v69Ev();
extern void _ZN6S677C43v70Ev();
extern void _ZN6S677C43v71Ev();
extern void _ZN6S677C33v72Ev();
extern void _ZN6S677C33v73Ev();
extern void _ZN6S677C33v74Ev();
extern void _ZN6S677C33v75Ev();
extern void _ZN6S677C33v76Ev();
extern void _ZN6S677C33v77Ev();
extern void _ZN6S677C33v78Ev();
extern void _ZN6S677C33v79Ev();
extern void _ZN6S677C33v80Ev();
extern void _ZN6S677C33v81Ev();
extern void _ZN6S677C33v82Ev();
extern void _ZN6S677C33v83Ev();
static  VTBL_ENTRY vtc_S677C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S677C3[0]),
  (VTBL_ENTRY)&_ZN6S677C3D1Ev,
  (VTBL_ENTRY)&_ZN6S677C3D0Ev,
  (VTBL_ENTRY)&_ZN6S677C52v6Ev,
  (VTBL_ENTRY)&_ZN6S677C52v7Ev,
  (VTBL_ENTRY)&_ZN6S677C52v8Ev,
  (VTBL_ENTRY)&_ZN6S677C52v9Ev,
  (VTBL_ENTRY)&_ZN6S677C53v10Ev,
  (VTBL_ENTRY)&_ZN6S677C53v11Ev,
  (VTBL_ENTRY)&_ZN6S677C53v12Ev,
  (VTBL_ENTRY)&_ZN6S677C53v13Ev,
  (VTBL_ENTRY)&_ZN6S677C53v14Ev,
  (VTBL_ENTRY)&_ZN6S677C53v15Ev,
  (VTBL_ENTRY)&_ZN6S677C53v16Ev,
  (VTBL_ENTRY)&_ZN6S677C53v17Ev,
  (VTBL_ENTRY)&_ZN6S677C53v18Ev,
  (VTBL_ENTRY)&_ZN6S677C53v19Ev,
  (VTBL_ENTRY)&_ZN6S677C53v20Ev,
  (VTBL_ENTRY)&_ZN6S677C53v21Ev,
  (VTBL_ENTRY)&_ZN6S677C53v22Ev,
  (VTBL_ENTRY)&_ZN6S677C53v23Ev,
  (VTBL_ENTRY)&_ZN6S677C53v24Ev,
  (VTBL_ENTRY)&_ZN6S677C53v25Ev,
  (VTBL_ENTRY)&_ZN6S677C53v26Ev,
  (VTBL_ENTRY)&_ZN6S677C53v27Ev,
  (VTBL_ENTRY)&_ZN6S677C53v28Ev,
  (VTBL_ENTRY)&_ZN6S677C53v29Ev,
  (VTBL_ENTRY)&_ZN6S677C53v30Ev,
  (VTBL_ENTRY)&_ZN6S677C53v31Ev,
  (VTBL_ENTRY)&_ZN6S677C53v32Ev,
  (VTBL_ENTRY)&_ZN6S677C53v33Ev,
  (VTBL_ENTRY)&_ZN6S677C53v34Ev,
  (VTBL_ENTRY)&_ZN6S677C53v35Ev,
  (VTBL_ENTRY)&_ZN6S677C53v36Ev,
  (VTBL_ENTRY)&_ZN6S677C53v37Ev,
  (VTBL_ENTRY)&_ZN6S677C53v38Ev,
  (VTBL_ENTRY)&_ZN6S677C53v39Ev,
  (VTBL_ENTRY)&_ZN6S677C53v40Ev,
  (VTBL_ENTRY)&_ZN6S677C53v41Ev,
  (VTBL_ENTRY)&_ZN6S677C53v42Ev,
  (VTBL_ENTRY)&_ZN6S677C53v43Ev,
  (VTBL_ENTRY)&_ZN6S677C53v44Ev,
  (VTBL_ENTRY)&_ZN6S677C53v45Ev,
  (VTBL_ENTRY)&_ZN6S677C53v46Ev,
  (VTBL_ENTRY)&_ZN6S677C53v47Ev,
  (VTBL_ENTRY)&_ZN6S677C53v48Ev,
  (VTBL_ENTRY)&_ZN6S677C53v49Ev,
  (VTBL_ENTRY)&_ZN6S677C53v50Ev,
  (VTBL_ENTRY)&_ZN6S677C53v51Ev,
  (VTBL_ENTRY)&_ZN6S677C53v52Ev,
  (VTBL_ENTRY)&_ZN6S677C53v53Ev,
  (VTBL_ENTRY)&_ZN6S677C53v54Ev,
  (VTBL_ENTRY)&_ZN6S677C53v55Ev,
  (VTBL_ENTRY)&_ZN6S677C53v56Ev,
  (VTBL_ENTRY)&_ZN6S677C53v57Ev,
  (VTBL_ENTRY)&_ZN6S677C53v58Ev,
  (VTBL_ENTRY)&_ZN6S677C53v59Ev,
  (VTBL_ENTRY)&_ZN6S677C53v60Ev,
  (VTBL_ENTRY)&_ZN6S677C53v61Ev,
  (VTBL_ENTRY)&_ZN6S677C53v62Ev,
  (VTBL_ENTRY)&_ZN6S677C53v63Ev,
  (VTBL_ENTRY)&_ZN6S677C53v64Ev,
  (VTBL_ENTRY)&_ZN6S677C53v65Ev,
  (VTBL_ENTRY)&_ZN6S677C53v66Ev,
  (VTBL_ENTRY)&_ZN6S677C53v67Ev,
  (VTBL_ENTRY)&_ZN6S677C53v68Ev,
  (VTBL_ENTRY)&_ZN6S677C53v69Ev,
  (VTBL_ENTRY)&_ZN6S677C43v70Ev,
  (VTBL_ENTRY)&_ZN6S677C43v71Ev,
  (VTBL_ENTRY)&_ZN6S677C33v72Ev,
  (VTBL_ENTRY)&_ZN6S677C33v73Ev,
  (VTBL_ENTRY)&_ZN6S677C33v74Ev,
  (VTBL_ENTRY)&_ZN6S677C33v75Ev,
  (VTBL_ENTRY)&_ZN6S677C33v76Ev,
  (VTBL_ENTRY)&_ZN6S677C33v77Ev,
  (VTBL_ENTRY)&_ZN6S677C33v78Ev,
  (VTBL_ENTRY)&_ZN6S677C33v79Ev,
  (VTBL_ENTRY)&_ZN6S677C33v80Ev,
  (VTBL_ENTRY)&_ZN6S677C33v81Ev,
  (VTBL_ENTRY)&_ZN6S677C33v82Ev,
  (VTBL_ENTRY)&_ZN6S677C33v83Ev,
};
extern VTBL_ENTRY _ZTI6S677C3[];
extern  VTBL_ENTRY _ZTV6S677C3[];
Class_Descriptor cd_S677C3 = {  "S677C3", // class name
  bases_S677C3, 2,
  &(vtc_S677C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(136,88), // object size
  NSPAIRA(_ZTI6S677C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S677C3),82, //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  S677C11  {
  virtual  ~S677C11(); // _ZN7S677C11D1Ev
  virtual void  v84(); // _ZN7S677C113v84Ev
  virtual void  v85(); // _ZN7S677C113v85Ev
  virtual void  v86(); // _ZN7S677C113v86Ev
  virtual void  v87(); // _ZN7S677C113v87Ev
  S677C11(); // tgen
};
//SIG(-1 S677C11) C1{ vd v1 v2 v3 v4}


 S677C11 ::~S677C11(){ note_dtor("S677C11", this);}
void  S677C11 ::v84(){vfunc_called(this, "_ZN7S677C113v84Ev");}
void  S677C11 ::v85(){vfunc_called(this, "_ZN7S677C113v85Ev");}
void  S677C11 ::v86(){vfunc_called(this, "_ZN7S677C113v86Ev");}
void  S677C11 ::v87(){vfunc_called(this, "_ZN7S677C113v87Ev");}
S677C11 ::S677C11(){ note_ctor("S677C11", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S677C11C1Ev();
extern void _ZN7S677C11D1Ev();
Name_Map name_map_S677C11[] = {
  NSPAIR(_ZN7S677C11C1Ev),
  NSPAIR(_ZN7S677C11D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S677C11[];
extern void _ZN7S677C11D1Ev();
extern void _ZN7S677C11D0Ev();
extern void _ZN7S677C113v84Ev();
extern void _ZN7S677C113v85Ev();
extern void _ZN7S677C113v86Ev();
extern void _ZN7S677C113v87Ev();
static  VTBL_ENTRY vtc_S677C11[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S677C11[0]),
  (VTBL_ENTRY)&_ZN7S677C11D1Ev,
  (VTBL_ENTRY)&_ZN7S677C11D0Ev,
  (VTBL_ENTRY)&_ZN7S677C113v84Ev,
  (VTBL_ENTRY)&_ZN7S677C113v85Ev,
  (VTBL_ENTRY)&_ZN7S677C113v86Ev,
  (VTBL_ENTRY)&_ZN7S677C113v87Ev,
};
extern VTBL_ENTRY _ZTI7S677C11[];
extern  VTBL_ENTRY _ZTV7S677C11[];
Class_Descriptor cd_S677C11 = {  "S677C11", // class name
  0,0,//no base classes
  &(vtc_S677C11[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S677C11),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S677C11),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S677C2  : S677C3 , S677C11 {
  virtual  ~S677C2(); // _ZN6S677C2D1Ev
  virtual void  v88(); // _ZN6S677C23v88Ev
  virtual void  v89(); // _ZN6S677C23v89Ev
  virtual void  v90(); // _ZN6S677C23v90Ev
  virtual void  v91(); // _ZN6S677C23v91Ev
  virtual void  v92(); // _ZN6S677C23v92Ev
  virtual void  v93(); // _ZN6S677C23v93Ev
  virtual void  v94(); // _ZN6S677C23v94Ev
  virtual void  v95(); // _ZN6S677C23v95Ev
  virtual void  v96(); // _ZN6S677C23v96Ev
  virtual void  v97(); // _ZN6S677C23v97Ev
  S677C2(); // tgen
};
//SIG(-1 S677C2) C1{ BC2{ BC3{ BC4{ vd 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 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v75 v76} vd v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 Fc FC6{ BC7{ BC8{ m Fp Fi[2]}}} FC9{ m Fp FC5}} BC10{ vd v89 v90 v91 v92} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10}


 S677C2 ::~S677C2(){ note_dtor("S677C2", this);}
void  S677C2 ::v88(){vfunc_called(this, "_ZN6S677C23v88Ev");}
void  S677C2 ::v89(){vfunc_called(this, "_ZN6S677C23v89Ev");}
void  S677C2 ::v90(){vfunc_called(this, "_ZN6S677C23v90Ev");}
void  S677C2 ::v91(){vfunc_called(this, "_ZN6S677C23v91Ev");}
void  S677C2 ::v92(){vfunc_called(this, "_ZN6S677C23v92Ev");}
void  S677C2 ::v93(){vfunc_called(this, "_ZN6S677C23v93Ev");}
void  S677C2 ::v94(){vfunc_called(this, "_ZN6S677C23v94Ev");}
void  S677C2 ::v95(){vfunc_called(this, "_ZN6S677C23v95Ev");}
void  S677C2 ::v96(){vfunc_called(this, "_ZN6S677C23v96Ev");}
void  S677C2 ::v97(){vfunc_called(this, "_ZN6S677C23v97Ev");}
S677C2 ::S677C2(){ note_ctor("S677C2", this);} // tgen

static void Test_S677C2()
{
  extern Class_Descriptor cd_S677C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(19,24)];
    init_test(&cd_S677C2, buf);
    S677C2 *dp, &lv = *(dp=new (buf) S677C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,92), "sizeof(S677C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S677C2)");
    check_base_class_offset(lv, (S677C5*)(S677C4*)(S677C3*), 0, "S677C2");
    check_base_class_offset(lv, (S677C4*)(S677C3*), 0, "S677C2");
    check_base_class_offset(lv, (S677C3*), 0, "S677C2");
    check_base_class_offset(lv, (S677C11*), ABISELECT(136,88), "S677C2");
    test_class_info(&lv, &cd_S677C2);
    dp->~S677C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS677C2(Test_S677C2, "S677C2", ABISELECT(144,92));

#else // __cplusplus

extern void _ZN6S677C2C1Ev();
extern void _ZN6S677C2D1Ev();
Name_Map name_map_S677C2[] = {
  NSPAIR(_ZN6S677C2C1Ev),
  NSPAIR(_ZN6S677C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S677C5;
extern VTBL_ENTRY _ZTI6S677C5[];
extern  VTBL_ENTRY _ZTV6S677C5[];
extern Class_Descriptor cd_S677C4;
extern VTBL_ENTRY _ZTI6S677C4[];
extern  VTBL_ENTRY _ZTV6S677C4[];
extern Class_Descriptor cd_S677C3;
extern VTBL_ENTRY _ZTI6S677C3[];
extern  VTBL_ENTRY _ZTV6S677C3[];
extern Class_Descriptor cd_S677C11;
extern VTBL_ENTRY _ZTI7S677C11[];
extern  VTBL_ENTRY _ZTV7S677C11[];
static Base_Class bases_S677C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S677C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S677C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S677C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S677C11,    ABISELECT(136,88), //bcp->offset
    92, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S677C2[];
extern void _ZN6S677C2D1Ev();
extern void _ZN6S677C2D0Ev();
extern void _ZN6S677C52v6Ev();
extern void _ZN6S677C52v7Ev();
extern void _ZN6S677C52v8Ev();
extern void _ZN6S677C52v9Ev();
extern void _ZN6S677C53v10Ev();
extern void _ZN6S677C53v11Ev();
extern void _ZN6S677C53v12Ev();
extern void _ZN6S677C53v13Ev();
extern void _ZN6S677C53v14Ev();
extern void _ZN6S677C53v15Ev();
extern void _ZN6S677C53v16Ev();
extern void _ZN6S677C53v17Ev();
extern void _ZN6S677C53v18Ev();
extern void _ZN6S677C53v19Ev();
extern void _ZN6S677C53v20Ev();
extern void _ZN6S677C53v21Ev();
extern void _ZN6S677C53v22Ev();
extern void _ZN6S677C53v23Ev();
extern void _ZN6S677C53v24Ev();
extern void _ZN6S677C53v25Ev();
extern void _ZN6S677C53v26Ev();
extern void _ZN6S677C53v27Ev();
extern void _ZN6S677C53v28Ev();
extern void _ZN6S677C53v29Ev();
extern void _ZN6S677C53v30Ev();
extern void _ZN6S677C53v31Ev();
extern void _ZN6S677C53v32Ev();
extern void _ZN6S677C53v33Ev();
extern void _ZN6S677C53v34Ev();
extern void _ZN6S677C53v35Ev();
extern void _ZN6S677C53v36Ev();
extern void _ZN6S677C53v37Ev();
extern void _ZN6S677C53v38Ev();
extern void _ZN6S677C53v39Ev();
extern void _ZN6S677C53v40Ev();
extern void _ZN6S677C53v41Ev();
extern void _ZN6S677C53v42Ev();
extern void _ZN6S677C53v43Ev();
extern void _ZN6S677C53v44Ev();
extern void _ZN6S677C53v45Ev();
extern void _ZN6S677C53v46Ev();
extern void _ZN6S677C53v47Ev();
extern void _ZN6S677C53v48Ev();
extern void _ZN6S677C53v49Ev();
extern void _ZN6S677C53v50Ev();
extern void _ZN6S677C53v51Ev();
extern void _ZN6S677C53v52Ev();
extern void _ZN6S677C53v53Ev();
extern void _ZN6S677C53v54Ev();
extern void _ZN6S677C53v55Ev();
extern void _ZN6S677C53v56Ev();
extern void _ZN6S677C53v57Ev();
extern void _ZN6S677C53v58Ev();
extern void _ZN6S677C53v59Ev();
extern void _ZN6S677C53v60Ev();
extern void _ZN6S677C53v61Ev();
extern void _ZN6S677C53v62Ev();
extern void _ZN6S677C53v63Ev();
extern void _ZN6S677C53v64Ev();
extern void _ZN6S677C53v65Ev();
extern void _ZN6S677C53v66Ev();
extern void _ZN6S677C53v67Ev();
extern void _ZN6S677C53v68Ev();
extern void _ZN6S677C53v69Ev();
extern void _ZN6S677C43v70Ev();
extern void _ZN6S677C43v71Ev();
extern void _ZN6S677C33v72Ev();
extern void _ZN6S677C33v73Ev();
extern void _ZN6S677C33v74Ev();
extern void _ZN6S677C33v75Ev();
extern void _ZN6S677C33v76Ev();
extern void _ZN6S677C33v77Ev();
extern void _ZN6S677C33v78Ev();
extern void _ZN6S677C33v79Ev();
extern void _ZN6S677C33v80Ev();
extern void _ZN6S677C33v81Ev();
extern void _ZN6S677C33v82Ev();
extern void _ZN6S677C33v83Ev();
extern void _ZN6S677C23v88Ev();
extern void _ZN6S677C23v89Ev();
extern void _ZN6S677C23v90Ev();
extern void _ZN6S677C23v91Ev();
extern void _ZN6S677C23v92Ev();
extern void _ZN6S677C23v93Ev();
extern void _ZN6S677C23v94Ev();
extern void _ZN6S677C23v95Ev();
extern void _ZN6S677C23v96Ev();
extern void _ZN6S677C23v97Ev();
extern void ABISELECT(_ZThn136_N6S677C2D1Ev,_ZThn88_N6S677C2D1Ev)();
extern void ABISELECT(_ZThn136_N6S677C2D0Ev,_ZThn88_N6S677C2D0Ev)();
extern void _ZN7S677C113v84Ev();
extern void _ZN7S677C113v85Ev();
extern void _ZN7S677C113v86Ev();
extern void _ZN7S677C113v87Ev();
static  VTBL_ENTRY vtc_S677C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S677C2[0]),
  (VTBL_ENTRY)&_ZN6S677C2D1Ev,
  (VTBL_ENTRY)&_ZN6S677C2D0Ev,
  (VTBL_ENTRY)&_ZN6S677C52v6Ev,
  (VTBL_ENTRY)&_ZN6S677C52v7Ev,
  (VTBL_ENTRY)&_ZN6S677C52v8Ev,
  (VTBL_ENTRY)&_ZN6S677C52v9Ev,
  (VTBL_ENTRY)&_ZN6S677C53v10Ev,
  (VTBL_ENTRY)&_ZN6S677C53v11Ev,
  (VTBL_ENTRY)&_ZN6S677C53v12Ev,
  (VTBL_ENTRY)&_ZN6S677C53v13Ev,
  (VTBL_ENTRY)&_ZN6S677C53v14Ev,
  (VTBL_ENTRY)&_ZN6S677C53v15Ev,
  (VTBL_ENTRY)&_ZN6S677C53v16Ev,
  (VTBL_ENTRY)&_ZN6S677C53v17Ev,
  (VTBL_ENTRY)&_ZN6S677C53v18Ev,
  (VTBL_ENTRY)&_ZN6S677C53v19Ev,
  (VTBL_ENTRY)&_ZN6S677C53v20Ev,
  (VTBL_ENTRY)&_ZN6S677C53v21Ev,
  (VTBL_ENTRY)&_ZN6S677C53v22Ev,
  (VTBL_ENTRY)&_ZN6S677C53v23Ev,
  (VTBL_ENTRY)&_ZN6S677C53v24Ev,
  (VTBL_ENTRY)&_ZN6S677C53v25Ev,
  (VTBL_ENTRY)&_ZN6S677C53v26Ev,
  (VTBL_ENTRY)&_ZN6S677C53v27Ev,
  (VTBL_ENTRY)&_ZN6S677C53v28Ev,
  (VTBL_ENTRY)&_ZN6S677C53v29Ev,
  (VTBL_ENTRY)&_ZN6S677C53v30Ev,
  (VTBL_ENTRY)&_ZN6S677C53v31Ev,
  (VTBL_ENTRY)&_ZN6S677C53v32Ev,
  (VTBL_ENTRY)&_ZN6S677C53v33Ev,
  (VTBL_ENTRY)&_ZN6S677C53v34Ev,
  (VTBL_ENTRY)&_ZN6S677C53v35Ev,
  (VTBL_ENTRY)&_ZN6S677C53v36Ev,
  (VTBL_ENTRY)&_ZN6S677C53v37Ev,
  (VTBL_ENTRY)&_ZN6S677C53v38Ev,
  (VTBL_ENTRY)&_ZN6S677C53v39Ev,
  (VTBL_ENTRY)&_ZN6S677C53v40Ev,
  (VTBL_ENTRY)&_ZN6S677C53v41Ev,
  (VTBL_ENTRY)&_ZN6S677C53v42Ev,
  (VTBL_ENTRY)&_ZN6S677C53v43Ev,
  (VTBL_ENTRY)&_ZN6S677C53v44Ev,
  (VTBL_ENTRY)&_ZN6S677C53v45Ev,
  (VTBL_ENTRY)&_ZN6S677C53v46Ev,
  (VTBL_ENTRY)&_ZN6S677C53v47Ev,
  (VTBL_ENTRY)&_ZN6S677C53v48Ev,
  (VTBL_ENTRY)&_ZN6S677C53v49Ev,
  (VTBL_ENTRY)&_ZN6S677C53v50Ev,
  (VTBL_ENTRY)&_ZN6S677C53v51Ev,
  (VTBL_ENTRY)&_ZN6S677C53v52Ev,
  (VTBL_ENTRY)&_ZN6S677C53v53Ev,
  (VTBL_ENTRY)&_ZN6S677C53v54Ev,
  (VTBL_ENTRY)&_ZN6S677C53v55Ev,
  (VTBL_ENTRY)&_ZN6S677C53v56Ev,
  (VTBL_ENTRY)&_ZN6S677C53v57Ev,
  (VTBL_ENTRY)&_ZN6S677C53v58Ev,
  (VTBL_ENTRY)&_ZN6S677C53v59Ev,
  (VTBL_ENTRY)&_ZN6S677C53v60Ev,
  (VTBL_ENTRY)&_ZN6S677C53v61Ev,
  (VTBL_ENTRY)&_ZN6S677C53v62Ev,
  (VTBL_ENTRY)&_ZN6S677C53v63Ev,
  (VTBL_ENTRY)&_ZN6S677C53v64Ev,
  (VTBL_ENTRY)&_ZN6S677C53v65Ev,
  (VTBL_ENTRY)&_ZN6S677C53v66Ev,
  (VTBL_ENTRY)&_ZN6S677C53v67Ev,
  (VTBL_ENTRY)&_ZN6S677C53v68Ev,
  (VTBL_ENTRY)&_ZN6S677C53v69Ev,
  (VTBL_ENTRY)&_ZN6S677C43v70Ev,
  (VTBL_ENTRY)&_ZN6S677C43v71Ev,
  (VTBL_ENTRY)&_ZN6S677C33v72Ev,
  (VTBL_ENTRY)&_ZN6S677C33v73Ev,
  (VTBL_ENTRY)&_ZN6S677C33v74Ev,
  (VTBL_ENTRY)&_ZN6S677C33v75Ev,
  (VTBL_ENTRY)&_ZN6S677C33v76Ev,
  (VTBL_ENTRY)&_ZN6S677C33v77Ev,
  (VTBL_ENTRY)&_ZN6S677C33v78Ev,
  (VTBL_ENTRY)&_ZN6S677C33v79Ev,
  (VTBL_ENTRY)&_ZN6S677C33v80Ev,
  (VTBL_ENTRY)&_ZN6S677C33v81Ev,
  (VTBL_ENTRY)&_ZN6S677C33v82Ev,
  (VTBL_ENTRY)&_ZN6S677C33v83Ev,
  (VTBL_ENTRY)&_ZN6S677C23v88Ev,
  (VTBL_ENTRY)&_ZN6S677C23v89Ev,
  (VTBL_ENTRY)&_ZN6S677C23v90Ev,
  (VTBL_ENTRY)&_ZN6S677C23v91Ev,
  (VTBL_ENTRY)&_ZN6S677C23v92Ev,
  (VTBL_ENTRY)&_ZN6S677C23v93Ev,
  (VTBL_ENTRY)&_ZN6S677C23v94Ev,
  (VTBL_ENTRY)&_ZN6S677C23v95Ev,
  (VTBL_ENTRY)&_ZN6S677C23v96Ev,
  (VTBL_ENTRY)&_ZN6S677C23v97Ev,
  ABISELECT(-136,-88),
  (VTBL_ENTRY)&(_ZTI6S677C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn136_N6S677C2D1Ev,_ZThn88_N6S677C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn136_N6S677C2D0Ev,_ZThn88_N6S677C2D0Ev),
  (VTBL_ENTRY)&_ZN7S677C113v84Ev,
  (VTBL_ENTRY)&_ZN7S677C113v85Ev,
  (VTBL_ENTRY)&_ZN7S677C113v86Ev,
  (VTBL_ENTRY)&_ZN7S677C113v87Ev,
};
extern VTBL_ENTRY _ZTI6S677C2[];
extern  VTBL_ENTRY _ZTV6S677C2[];
Class_Descriptor cd_S677C2 = {  "S677C2", // class name
  bases_S677C2, 4,
  &(vtc_S677C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(144,92), // object size
  NSPAIRA(_ZTI6S677C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV6S677C2),100, //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  S677C1  : S677C2 {
  virtual  ~S677C1(); // _ZN6S677C1D1Ev
  virtual void  v1(); // _ZN6S677C12v1Ev
  virtual void  v2(); // _ZN6S677C12v2Ev
  virtual void  v3(); // _ZN6S677C12v3Ev
  virtual void  v4(); // _ZN6S677C12v4Ev
  virtual void  v5(); // _ZN6S677C12v5Ev
  S677C1(); // tgen
};
//SIG(1 S677C1) C1{ BC2{ BC3{ BC4{ BC5{ vd v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 Fi FL Fp[4] Fi[2] Fp FC6{ m Fi[2]} Fp[2]} vd v70 v71} vd v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 Fc FC7{ BC8{ BC9{ m Fp Fi[2]}}} FC10{ m Fp FC6}} BC11{ vd v84 v85 v86 v87} vd v88 v89 v90 v91 v92 v93 v94 v95 v96 v97} vd v1 v2 v3 v4 v5}


 S677C1 ::~S677C1(){ note_dtor("S677C1", this);}
void  S677C1 ::v1(){vfunc_called(this, "_ZN6S677C12v1Ev");}
void  S677C1 ::v2(){vfunc_called(this, "_ZN6S677C12v2Ev");}
void  S677C1 ::v3(){vfunc_called(this, "_ZN6S677C12v3Ev");}
void  S677C1 ::v4(){vfunc_called(this, "_ZN6S677C12v4Ev");}
void  S677C1 ::v5(){vfunc_called(this, "_ZN6S677C12v5Ev");}
S677C1 ::S677C1(){ note_ctor("S677C1", this);} // tgen

static void Test_S677C1()
{
  extern Class_Descriptor cd_S677C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(19,24)];
    init_test(&cd_S677C1, buf);
    S677C1 *dp, &lv = *(dp=new (buf) S677C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,92), "sizeof(S677C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S677C1)");
    check_base_class_offset(lv, (S677C5*)(S677C4*)(S677C3*)(S677C2*), 0, "S677C1");
    check_base_class_offset(lv, (S677C4*)(S677C3*)(S677C2*), 0, "S677C1");
    check_base_class_offset(lv, (S677C3*)(S677C2*), 0, "S677C1");
    check_base_class_offset(lv, (S677C11*)(S677C2*), ABISELECT(136,88), "S677C1");
    check_base_class_offset(lv, (S677C2*), 0, "S677C1");
    test_class_info(&lv, &cd_S677C1);
    dp->~S677C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS677C1(Test_S677C1, "S677C1", ABISELECT(144,92));

#else // __cplusplus

extern void _ZN6S677C1C1Ev();
extern void _ZN6S677C1D1Ev();
Name_Map name_map_S677C1[] = {
  NSPAIR(_ZN6S677C1C1Ev),
  NSPAIR(_ZN6S677C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S677C5;
extern VTBL_ENTRY _ZTI6S677C5[];
extern  VTBL_ENTRY _ZTV6S677C5[];
extern Class_Descriptor cd_S677C4;
extern VTBL_ENTRY _ZTI6S677C4[];
extern  VTBL_ENTRY _ZTV6S677C4[];
extern Class_Descriptor cd_S677C3;
extern VTBL_ENTRY _ZTI6S677C3[];
extern  VTBL_ENTRY _ZTV6S677C3[];
extern Class_Descriptor cd_S677C11;
extern VTBL_ENTRY _ZTI7S677C11[];
extern  VTBL_ENTRY _ZTV7S677C11[];
extern Class_Descriptor cd_S677C2;
extern VTBL_ENTRY _ZTI6S677C2[];
extern  VTBL_ENTRY _ZTV6S677C2[];
static Base_Class bases_S677C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S677C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S677C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S677C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S677C11,    ABISELECT(136,88), //bcp->offset
    97, //bcp->virtual_function_table_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_S677C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S677C1[];
extern void _ZN6S677C1D1Ev();
extern void _ZN6S677C1D0Ev();
extern void _ZN6S677C52v6Ev();
extern void _ZN6S677C52v7Ev();
extern void _ZN6S677C52v8Ev();
extern void _ZN6S677C52v9Ev();
extern void _ZN6S677C53v10Ev();
extern void _ZN6S677C53v11Ev();
extern void _ZN6S677C53v12Ev();
extern void _ZN6S677C53v13Ev();
extern void _ZN6S677C53v14Ev();
extern void _ZN6S677C53v15Ev();
extern void _ZN6S677C53v16Ev();
extern void _ZN6S677C53v17Ev();
extern void _ZN6S677C53v18Ev();
extern void _ZN6S677C53v19Ev();
extern void _ZN6S677C53v20Ev();
extern void _ZN6S677C53v21Ev();
extern void _ZN6S677C53v22Ev();
extern void _ZN6S677C53v23Ev();
extern void _ZN6S677C53v24Ev();
extern void _ZN6S677C53v25Ev();
extern void _ZN6S677C53v26Ev();
extern void _ZN6S677C53v27Ev();
extern void _ZN6S677C53v28Ev();
extern void _ZN6S677C53v29Ev();
extern void _ZN6S677C53v30Ev();
extern void _ZN6S677C53v31Ev();
extern void _ZN6S677C53v32Ev();
extern void _ZN6S677C53v33Ev();
extern void _ZN6S677C53v34Ev();
extern void _ZN6S677C53v35Ev();
extern void _ZN6S677C53v36Ev();
extern void _ZN6S677C53v37Ev();
extern void _ZN6S677C53v38Ev();
extern void _ZN6S677C53v39Ev();
extern void _ZN6S677C53v40Ev();
extern void _ZN6S677C53v41Ev();
extern void _ZN6S677C53v42Ev();
extern void _ZN6S677C53v43Ev();
extern void _ZN6S677C53v44Ev();
extern void _ZN6S677C53v45Ev();
extern void _ZN6S677C53v46Ev();
extern void _ZN6S677C53v47Ev();
extern void _ZN6S677C53v48Ev();
extern void _ZN6S677C53v49Ev();
extern void _ZN6S677C53v50Ev();
extern void _ZN6S677C53v51Ev();
extern void _ZN6S677C53v52Ev();
extern void _ZN6S677C53v53Ev();
extern void _ZN6S677C53v54Ev();
extern void _ZN6S677C53v55Ev();
extern void _ZN6S677C53v56Ev();
extern void _ZN6S677C53v57Ev();
extern void _ZN6S677C53v58Ev();
extern void _ZN6S677C53v59Ev();
extern void _ZN6S677C53v60Ev();
extern void _ZN6S677C53v61Ev();
extern void _ZN6S677C53v62Ev();
extern void _ZN6S677C53v63Ev();
extern void _ZN6S677C53v64Ev();
extern void _ZN6S677C53v65Ev();
extern void _ZN6S677C53v66Ev();
extern void _ZN6S677C53v67Ev();
extern void _ZN6S677C53v68Ev();
extern void _ZN6S677C53v69Ev();
extern void _ZN6S677C43v70Ev();
extern void _ZN6S677C43v71Ev();
extern void _ZN6S677C33v72Ev();
extern void _ZN6S677C33v73Ev();
extern void _ZN6S677C33v74Ev();
extern void _ZN6S677C33v75Ev();
extern void _ZN6S677C33v76Ev();
extern void _ZN6S677C33v77Ev();
extern void _ZN6S677C33v78Ev();
extern void _ZN6S677C33v79Ev();
extern void _ZN6S677C33v80Ev();
extern void _ZN6S677C33v81Ev();
extern void _ZN6S677C33v82Ev();
extern void _ZN6S677C33v83Ev();
extern void _ZN6S677C23v88Ev();
extern void _ZN6S677C23v89Ev();
extern void _ZN6S677C23v90Ev();
extern void _ZN6S677C23v91Ev();
extern void _ZN6S677C23v92Ev();
extern void _ZN6S677C23v93Ev();
extern void _ZN6S677C23v94Ev();
extern void _ZN6S677C23v95Ev();
extern void _ZN6S677C23v96Ev();
extern void _ZN6S677C23v97Ev();
extern void _ZN6S677C12v1Ev();
extern void _ZN6S677C12v2Ev();
extern void _ZN6S677C12v3Ev();
extern void _ZN6S677C12v4Ev();
extern void _ZN6S677C12v5Ev();
extern void ABISELECT(_ZThn136_N6S677C1D1Ev,_ZThn88_N6S677C1D1Ev)();
extern void ABISELECT(_ZThn136_N6S677C1D0Ev,_ZThn88_N6S677C1D0Ev)();
extern void _ZN7S677C113v84Ev();
extern void _ZN7S677C113v85Ev();
extern void _ZN7S677C113v86Ev();
extern void _ZN7S677C113v87Ev();
static  VTBL_ENTRY vtc_S677C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S677C1[0]),
  (VTBL_ENTRY)&_ZN6S677C1D1Ev,
  (VTBL_ENTRY)&_ZN6S677C1D0Ev,
  (VTBL_ENTRY)&_ZN6S677C52v6Ev,
  (VTBL_ENTRY)&_ZN6S677C52v7Ev,
  (VTBL_ENTRY)&_ZN6S677C52v8Ev,
  (VTBL_ENTRY)&_ZN6S677C52v9Ev,
  (VTBL_ENTRY)&_ZN6S677C53v10Ev,
  (VTBL_ENTRY)&_ZN6S677C53v11Ev,
  (VTBL_ENTRY)&_ZN6S677C53v12Ev,
  (VTBL_ENTRY)&_ZN6S677C53v13Ev,
  (VTBL_ENTRY)&_ZN6S677C53v14Ev,
  (VTBL_ENTRY)&_ZN6S677C53v15Ev,
  (VTBL_ENTRY)&_ZN6S677C53v16Ev,
  (VTBL_ENTRY)&_ZN6S677C53v17Ev,
  (VTBL_ENTRY)&_ZN6S677C53v18Ev,
  (VTBL_ENTRY)&_ZN6S677C53v19Ev,
  (VTBL_ENTRY)&_ZN6S677C53v20Ev,
  (VTBL_ENTRY)&_ZN6S677C53v21Ev,
  (VTBL_ENTRY)&_ZN6S677C53v22Ev,
  (VTBL_ENTRY)&_ZN6S677C53v23Ev,
  (VTBL_ENTRY)&_ZN6S677C53v24Ev,
  (VTBL_ENTRY)&_ZN6S677C53v25Ev,
  (VTBL_ENTRY)&_ZN6S677C53v26Ev,
  (VTBL_ENTRY)&_ZN6S677C53v27Ev,
  (VTBL_ENTRY)&_ZN6S677C53v28Ev,
  (VTBL_ENTRY)&_ZN6S677C53v29Ev,
  (VTBL_ENTRY)&_ZN6S677C53v30Ev,
  (VTBL_ENTRY)&_ZN6S677C53v31Ev,
  (VTBL_ENTRY)&_ZN6S677C53v32Ev,
  (VTBL_ENTRY)&_ZN6S677C53v33Ev,
  (VTBL_ENTRY)&_ZN6S677C53v34Ev,
  (VTBL_ENTRY)&_ZN6S677C53v35Ev,
  (VTBL_ENTRY)&_ZN6S677C53v36Ev,
  (VTBL_ENTRY)&_ZN6S677C53v37Ev,
  (VTBL_ENTRY)&_ZN6S677C53v38Ev,
  (VTBL_ENTRY)&_ZN6S677C53v39Ev,
  (VTBL_ENTRY)&_ZN6S677C53v40Ev,
  (VTBL_ENTRY)&_ZN6S677C53v41Ev,
  (VTBL_ENTRY)&_ZN6S677C53v42Ev,
  (VTBL_ENTRY)&_ZN6S677C53v43Ev,
  (VTBL_ENTRY)&_ZN6S677C53v44Ev,
  (VTBL_ENTRY)&_ZN6S677C53v45Ev,
  (VTBL_ENTRY)&_ZN6S677C53v46Ev,
  (VTBL_ENTRY)&_ZN6S677C53v47Ev,
  (VTBL_ENTRY)&_ZN6S677C53v48Ev,
  (VTBL_ENTRY)&_ZN6S677C53v49Ev,
  (VTBL_ENTRY)&_ZN6S677C53v50Ev,
  (VTBL_ENTRY)&_ZN6S677C53v51Ev,
  (VTBL_ENTRY)&_ZN6S677C53v52Ev,
  (VTBL_ENTRY)&_ZN6S677C53v53Ev,
  (VTBL_ENTRY)&_ZN6S677C53v54Ev,
  (VTBL_ENTRY)&_ZN6S677C53v55Ev,
  (VTBL_ENTRY)&_ZN6S677C53v56Ev,
  (VTBL_ENTRY)&_ZN6S677C53v57Ev,
  (VTBL_ENTRY)&_ZN6S677C53v58Ev,
  (VTBL_ENTRY)&_ZN6S677C53v59Ev,
  (VTBL_ENTRY)&_ZN6S677C53v60Ev,
  (VTBL_ENTRY)&_ZN6S677C53v61Ev,
  (VTBL_ENTRY)&_ZN6S677C53v62Ev,
  (VTBL_ENTRY)&_ZN6S677C53v63Ev,
  (VTBL_ENTRY)&_ZN6S677C53v64Ev,
  (VTBL_ENTRY)&_ZN6S677C53v65Ev,
  (VTBL_ENTRY)&_ZN6S677C53v66Ev,
  (VTBL_ENTRY)&_ZN6S677C53v67Ev,
  (VTBL_ENTRY)&_ZN6S677C53v68Ev,
  (VTBL_ENTRY)&_ZN6S677C53v69Ev,
  (VTBL_ENTRY)&_ZN6S677C43v70Ev,
  (VTBL_ENTRY)&_ZN6S677C43v71Ev,
  (VTBL_ENTRY)&_ZN6S677C33v72Ev,
  (VTBL_ENTRY)&_ZN6S677C33v73Ev,
  (VTBL_ENTRY)&_ZN6S677C33v74Ev,
  (VTBL_ENTRY)&_ZN6S677C33v75Ev,
  (VTBL_ENTRY)&_ZN6S677C33v76Ev,
  (VTBL_ENTRY)&_ZN6S677C33v77Ev,
  (VTBL_ENTRY)&_ZN6S677C33v78Ev,
  (VTBL_ENTRY)&_ZN6S677C33v79Ev,
  (VTBL_ENTRY)&_ZN6S677C33v80Ev,
  (VTBL_ENTRY)&_ZN6S677C33v81Ev,
  (VTBL_ENTRY)&_ZN6S677C33v82Ev,
  (VTBL_ENTRY)&_ZN6S677C33v83Ev,
  (VTBL_ENTRY)&_ZN6S677C23v88Ev,
  (VTBL_ENTRY)&_ZN6S677C23v89Ev,
  (VTBL_ENTRY)&_ZN6S677C23v90Ev,
  (VTBL_ENTRY)&_ZN6S677C23v91Ev,
  (VTBL_ENTRY)&_ZN6S677C23v92Ev,
  (VTBL_ENTRY)&_ZN6S677C23v93Ev,
  (VTBL_ENTRY)&_ZN6S677C23v94Ev,
  (VTBL_ENTRY)&_ZN6S677C23v95Ev,
  (VTBL_ENTRY)&_ZN6S677C23v96Ev,
  (VTBL_ENTRY)&_ZN6S677C23v97Ev,
  (VTBL_ENTRY)&_ZN6S677C12v1Ev,
  (VTBL_ENTRY)&_ZN6S677C12v2Ev,
  (VTBL_ENTRY)&_ZN6S677C12v3Ev,
  (VTBL_ENTRY)&_ZN6S677C12v4Ev,
  (VTBL_ENTRY)&_ZN6S677C12v5Ev,
  ABISELECT(-136,-88),
  (VTBL_ENTRY)&(_ZTI6S677C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn136_N6S677C1D1Ev,_ZThn88_N6S677C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn136_N6S677C1D0Ev,_ZThn88_N6S677C1D0Ev),
  (VTBL_ENTRY)&_ZN7S677C113v84Ev,
  (VTBL_ENTRY)&_ZN7S677C113v85Ev,
  (VTBL_ENTRY)&_ZN7S677C113v86Ev,
  (VTBL_ENTRY)&_ZN7S677C113v87Ev,
};
extern VTBL_ENTRY _ZTI6S677C1[];
extern  VTBL_ENTRY _ZTV6S677C1[];
Class_Descriptor cd_S677C1 = {  "S677C1", // class name
  bases_S677C1, 5,
  &(vtc_S677C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(144,92), // object size
  NSPAIRA(_ZTI6S677C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S677C1),105, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  5, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20657C7  {
  long double s20657c7f0;
  int s20657c7f1:3;
  char s20657c7f2:8;
  long double s20657c7f3[2];
  __tsi64 s20657c7f4;
  virtual void  v1(); // _ZN8S20657C72v1Ev
  ~S20657C7(); // tgen
  S20657C7(); // tgen
};
//SIG(-1 S20657C7) C1{ v1 FD Fi:3 Fc:8 FD[2] FL}


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

static void Test_S20657C7()
{
  extern Class_Descriptor cd_S20657C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7,14)];
    init_test(&cd_S20657C7, buf);
    S20657C7 *dp, &lv = *(dp=new (buf) S20657C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,52), "sizeof(S20657C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20657C7)");
    check_field_offset(lv, s20657c7f0, ABISELECT(16,4), "S20657C7.s20657c7f0");
    set_bf_and_test(lv, s20657c7f1, ABISELECT(32,16), 0, 3, 1, "S20657C7");
    set_bf_and_test(lv, s20657c7f1, ABISELECT(32,16), 0, 3, hide_sll(1LL<<2), "S20657C7");
    set_bf_and_test(lv, s20657c7f2, ABISELECT(33,17), 0, 8, 1, "S20657C7");
    set_bf_and_test(lv, s20657c7f2, ABISELECT(33,17), 0, 8, hide_sll(1LL<<7), "S20657C7");
    check_field_offset(lv, s20657c7f3, ABISELECT(48,20), "S20657C7.s20657c7f3");
    check_field_offset(lv, s20657c7f4, ABISELECT(80,44), "S20657C7.s20657c7f4");
    test_class_info(&lv, &cd_S20657C7);
    dp->~S20657C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20657C7(Test_S20657C7, "S20657C7", ABISELECT(96,52));

#else // __cplusplus

extern void _ZN8S20657C7C1Ev();
extern void _ZN8S20657C7D1Ev();
Name_Map name_map_S20657C7[] = {
  NSPAIR(_ZN8S20657C7C1Ev),
  NSPAIR(_ZN8S20657C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20657C7[];
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY vtc_S20657C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20657C7[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern VTBL_ENTRY _ZTI8S20657C7[];
extern  VTBL_ENTRY _ZTV8S20657C7[];
Class_Descriptor cd_S20657C7 = {  "S20657C7", // class name
  0,0,//no base classes
  &(vtc_S20657C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,52), // object size
  NSPAIRA(_ZTI8S20657C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20657C7),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  S20657C8  : virtual S20657C7 {
  ::S3490C4 s20657c8f0;
  __tsi64 s20657c8f1;
  ::S3490C4 s20657c8f2[7];
  void *s20657c8f3;
  __tsi64 s20657c8f4;
  ::S3490C4 s20657c8f5;
  void *s20657c8f6;
  char s20657c8f7;
  short s20657c8f8;
  int s20657c8f9;
  ::S20657C7 s20657c8f10;
  virtual void  v2(); // _ZN8S20657C82v2Ev
  ~S20657C8(); // tgen
  S20657C8(); // tgen
};
//SIG(-1 S20657C8) C1{ VBC2{ v2 FD Fi:3 Fc:8 FD[2] FL} v1 FC3{ m FL Fi Fc} FL FC3[7] Fp FL FC3 Fp Fc Fs Fi FC2}


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

static void Test_S20657C8()
{
  extern Class_Descriptor cd_S20657C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(25,72)];
    init_test(&cd_S20657C8, buf);
    S20657C8 *dp, &lv = *(dp=new (buf) S20657C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(384,284), "sizeof(S20657C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20657C8)");
    check_base_class_offset(lv, (S20657C7*), ABISELECT(288,232), "S20657C8");
    check_field_offset(lv, s20657c8f0, ABISELECT(8,4), "S20657C8.s20657c8f0");
    check_field_offset(lv, s20657c8f1, ABISELECT(24,20), "S20657C8.s20657c8f1");
    check_field_offset(lv, s20657c8f2, ABISELECT(32,28), "S20657C8.s20657c8f2");
    check_field_offset(lv, s20657c8f3, ABISELECT(144,140), "S20657C8.s20657c8f3");
    check_field_offset(lv, s20657c8f4, ABISELECT(152,144), "S20657C8.s20657c8f4");
    check_field_offset(lv, s20657c8f5, ABISELECT(160,152), "S20657C8.s20657c8f5");
    check_field_offset(lv, s20657c8f6, ABISELECT(176,168), "S20657C8.s20657c8f6");
    check_field_offset(lv, s20657c8f7, ABISELECT(184,172), "S20657C8.s20657c8f7");
    check_field_offset(lv, s20657c8f8, ABISELECT(186,174), "S20657C8.s20657c8f8");
    check_field_offset(lv, s20657c8f9, ABISELECT(188,176), "S20657C8.s20657c8f9");
    check_field_offset(lv, s20657c8f10, ABISELECT(192,180), "S20657C8.s20657c8f10");
    test_class_info(&lv, &cd_S20657C8);
    dp->~S20657C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20657C8(Test_S20657C8, "S20657C8", ABISELECT(384,284));

#else // __cplusplus

extern void _ZN8S20657C8C1Ev();
extern void _ZN8S20657C8D1Ev();
Name_Map name_map_S20657C8[] = {
  NSPAIR(_ZN8S20657C8C1Ev),
  NSPAIR(_ZN8S20657C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20657C7;
extern VTBL_ENTRY _ZTI8S20657C7[];
extern  VTBL_ENTRY _ZTV8S20657C7[];
static Base_Class bases_S20657C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20657C7,    ABISELECT(288,232), //bcp->offset
    4, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20657C8[];
extern void _ZN8S20657C82v2Ev();
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY vtc_S20657C8[] = {
  ABISELECT(288,232),
  0,
  (VTBL_ENTRY)&(_ZTI8S20657C8[0]),
  (VTBL_ENTRY)&_ZN8S20657C82v2Ev,
  0,
  ABISELECT(-288,-232),
  (VTBL_ENTRY)&(_ZTI8S20657C8[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern VTBL_ENTRY _ZTV8S20657C8[];
static  VTT_ENTRY vtt_S20657C8[] = {
  {&(_ZTV8S20657C8[3]),  3,8},
  {&(_ZTV8S20657C8[7]),  7,8},
};
extern VTBL_ENTRY _ZTI8S20657C8[];
extern  VTBL_ENTRY _ZTV8S20657C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20657C8[];
Class_Descriptor cd_S20657C8 = {  "S20657C8", // class name
  bases_S20657C8, 1,
  &(vtc_S20657C8[0]), // expected_vtbl_contents
  &(vtt_S20657C8[0]), // expected_vtt_contents
  ABISELECT(384,284), // object size
  NSPAIRA(_ZTI8S20657C8),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20657C8),8, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20657C8),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  S20657C6  : S20657C7 , virtual S3490C4 {
  char s20657c6f0[10];
  int s20657c6f1;
  ::S20657C8 s20657c6f2;
  __tsi64 s20657c6f3;
  ~S20657C6(); // tgen
  S20657C6(); // tgen
};
//SIG(-1 S20657C6) C1{ BC2{ v1 FD Fi:3 Fc:8 FD[2] FL} VBC3{ m FL Fi Fc} Fc[10] Fi FC4{ VBC2 v2 FC3 FL FC3[7] Fp FL FC3 Fp Fc Fs Fi FC2} FL}


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

static void Test_S20657C6()
{
  extern Class_Descriptor cd_S20657C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(34,95)];
    init_test(&cd_S20657C6, buf);
    S20657C6 *dp, &lv = *(dp=new (buf) S20657C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(528,376), "sizeof(S20657C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20657C6)");
    check_base_class_offset(lv, (S20657C7*), 0, "S20657C6");
    check_base_class_offset(lv, (S3490C4*), ABISELECT(504,360), "S20657C6");
    check_field_offset(lv, s20657c6f0, ABISELECT(88,52), "S20657C6.s20657c6f0");
    check_field_offset(lv, s20657c6f1, ABISELECT(100,64), "S20657C6.s20657c6f1");
    check_field_offset(lv, s20657c6f2, ABISELECT(112,68), "S20657C6.s20657c6f2");
    check_field_offset(lv, s20657c6f3, ABISELECT(496,352), "S20657C6.s20657c6f3");
    test_class_info(&lv, &cd_S20657C6);
    dp->~S20657C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20657C6(Test_S20657C6, "S20657C6", ABISELECT(528,376));

#else // __cplusplus

extern void _ZN8S20657C6C1Ev();
extern void _ZN8S20657C6D1Ev();
Name_Map name_map_S20657C6[] = {
  NSPAIR(_ZN8S20657C6C1Ev),
  NSPAIR(_ZN8S20657C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20657C7;
extern VTBL_ENTRY _ZTI8S20657C7[];
extern  VTBL_ENTRY _ZTV8S20657C7[];
extern Class_Descriptor cd_S3490C4;
extern VTBL_ENTRY _ZTI7S3490C4[];
static Base_Class bases_S20657C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20657C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S3490C4,    ABISELECT(504,360), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI8S20657C6[];
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY vtc_S20657C6[] = {
  ABISELECT(504,360),
  0,
  (VTBL_ENTRY)&(_ZTI8S20657C6[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern VTBL_ENTRY _ZTV8S20657C6[];
static  VTT_ENTRY vtt_S20657C6[] = {
  {&(_ZTV8S20657C6[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S20657C6[];
extern  VTBL_ENTRY _ZTV8S20657C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20657C6[];
Class_Descriptor cd_S20657C6 = {  "S20657C6", // class name
  bases_S20657C6, 2,
  &(vtc_S20657C6[0]), // expected_vtbl_contents
  &(vtt_S20657C6[0]), // expected_vtt_contents
  ABISELECT(528,376), // object size
  NSPAIRA(_ZTI8S20657C6),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20657C6),4, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20657C6),1, //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  S20657C5  : virtual S3490C4 , virtual S20657C6 , virtual S20657C7 , virtual S20657C8 {
  void *s20657c5f0;
  ~S20657C5(); // tgen
  S20657C5(); // tgen
};
//SIG(-1 S20657C5) C1{ VBC2{ m FL Fi Fc} VBC3{ BC4{ v1 FD Fi:3 Fc:8 FD[2] FL} VBC2 Fc[10] Fi FC5{ VBC4 v2 FC2 FL FC2[7] Fp FL FC2 Fp Fc Fs Fi FC4} FL} VBC4 VBC5 Fp}


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

static void Test_S20657C5()
{
  extern Class_Descriptor cd_S20657C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(59,168)];
    init_test(&cd_S20657C5, buf);
    S20657C5 *dp, &lv = *(dp=new (buf) S20657C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(928,668), "sizeof(S20657C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20657C5)");
    check_base_class_offset(lv, (S3490C4*), ABISELECT(16,8), "S20657C5");
    check_base_class_offset(lv, (S3490C4*)(S20657C6*), ABISELECT(16,8), "S20657C5");
    check_base_class_offset(lv, (S20657C7*)(S20657C6*), ABISELECT(32,24), "S20657C5");
    check_base_class_offset(lv, (S20657C6*), ABISELECT(32,24), "S20657C5");
    /*is_ambiguous_... S20657C5::S20657C7 */ AMB_check_base_class_offset(lv, (S20657C7*), ABISELECT(544,384), "S20657C5");
    check_base_class_offset(lv, (S20657C7*)(S20657C8*), ABISELECT(544,384), "S20657C5");
    check_base_class_offset(lv, (S20657C8*), ABISELECT(640,436), "S20657C5");
    check_field_offset(lv, s20657c5f0, ABISELECT(8,4), "S20657C5.s20657c5f0");
    test_class_info(&lv, &cd_S20657C5);
    dp->~S20657C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20657C5(Test_S20657C5, "S20657C5", ABISELECT(928,668));

#else // __cplusplus

extern void _ZN8S20657C5C1Ev();
extern void _ZN8S20657C5D1Ev();
Name_Map name_map_S20657C5[] = {
  NSPAIR(_ZN8S20657C5C1Ev),
  NSPAIR(_ZN8S20657C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3490C4;
extern VTBL_ENTRY _ZTI7S3490C4[];
extern Class_Descriptor cd_S20657C7;
extern VTBL_ENTRY _ZTI8S20657C7[];
extern  VTBL_ENTRY _ZTV8S20657C7[];
extern Class_Descriptor cd_S20657C6;
extern VTBL_ENTRY _ZTI8S20657C6[];
extern  VTBL_ENTRY _ZTV8S20657C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20657C6[];
extern Class_Descriptor cd_S20657C7;
extern VTBL_ENTRY _ZTI8S20657C7[];
extern  VTBL_ENTRY _ZTV8S20657C7[];
extern Class_Descriptor cd_S20657C8;
extern VTBL_ENTRY _ZTI8S20657C8[];
extern  VTBL_ENTRY _ZTV8S20657C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20657C8[];
static Base_Class bases_S20657C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3490C4,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20657C7,    ABISELECT(32,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20657C6,    ABISELECT(32,24), //bcp->offset
    6, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20657C7,    ABISELECT(544,384), //bcp->offset
    11, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20657C8,    ABISELECT(640,436), //bcp->offset
    15, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20657C5[];
extern void _ZN8S20657C72v1Ev();
extern void _ZN8S20657C72v1Ev();
extern void _ZN8S20657C82v2Ev();
static  VTBL_ENTRY vtc_S20657C5[] = {
  ABISELECT(640,436),
  ABISELECT(544,384),
  ABISELECT(32,24),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20657C5[0]),
  0,
  -16,
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI8S20657C5[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
  0,
  ABISELECT(-544,-384),
  (VTBL_ENTRY)&(_ZTI8S20657C5[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
  0,
  ABISELECT(-96,-52),
  ABISELECT(-640,-436),
  (VTBL_ENTRY)&(_ZTI8S20657C5[0]),
  (VTBL_ENTRY)&_ZN8S20657C82v2Ev,
};
extern VTBL_ENTRY _ZTV8S20657C5[];
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C6__8S20657C5[] = {
  -16,
  0,
  (VTBL_ENTRY)&(_ZTI8S20657C6[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C8__8S20657C5[] = {
  ABISELECT(-96,-52),
  0,
  (VTBL_ENTRY)&(_ZTI8S20657C8[0]),
  (VTBL_ENTRY)&_ZN8S20657C82v2Ev,
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C7__8S20657C8__8S20657C5[] = {
  0,
  ABISELECT(96,52),
  (VTBL_ENTRY)&(_ZTI8S20657C8[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
static  VTT_ENTRY vtt_S20657C5[] = {
  {&(_ZTV8S20657C5[6]),  6,20},
  {&(_ZTV8S20657C5[10]),  10,20},
  {&(_ZTV8S20657C5[14]),  14,20},
  {&(_ZTV8S20657C5[19]),  19,20},
  {&(_tg__ZTV8S20657C6__8S20657C5[3]),  3,4},
  {&(_tg__ZTV8S20657C8__8S20657C5[3]),  3,4},
  {&(_tg__ZTV8S20657C7__8S20657C8__8S20657C5[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S20657C5[];
extern  VTBL_ENTRY _ZTV8S20657C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20657C5[];
Class_Descriptor cd_S20657C5 = {  "S20657C5", // class name
  bases_S20657C5, 5,
  &(vtc_S20657C5[0]), // expected_vtbl_contents
  &(vtt_S20657C5[0]), // expected_vtt_contents
  ABISELECT(928,668), // object size
  NSPAIRA(_ZTI8S20657C5),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S20657C5),20, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20657C5),7, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20657C10  : S20657C7 , virtual S3490C4 , S20657C6 , S20657C8 , virtual S20657C5 {
  ::S20657C8 s20657c10f0;
  ::S20657C5 s20657c10f1;
  void *s20657c10f2;
  int s20657c10f3;
  ::S20657C7 s20657c10f4;
  ::S20657C8 s20657c10f5;
  virtual  ~S20657C10(); // _ZN9S20657C10D2Ev
  S20657C10(); // tgen
};
//SIG(-1 S20657C10) C1{ BC2{ v1 FD Fi:3 Fc:8 FD[2] FL} VBC3{ m FL Fi Fc} BC4{ BC2 VBC3 Fc[10] Fi FC5{ VBC2 v2 FC3 FL FC3[7] Fp FL FC3 Fp Fc Fs Fi FC2} FL} BC5 VBC6{ VBC3 VBC4 VBC2 VBC5 Fp} vd FC5 FC6 Fp Fi FC2 FC5}


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

static void Test_S20657C10()
{
  extern Class_Descriptor cd_S20657C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(228,653)];
    init_test(&cd_S20657C10, buf);
    S20657C10 *dp, &lv = *(dp=new (buf) S20657C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(3632,2608), "sizeof(S20657C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20657C10)");
    /*is_ambiguous_... S20657C10::S20657C7 */ AMB_check_base_class_offset(lv, (S20657C7*), 0, "S20657C10");
    check_base_class_offset(lv, (S3490C4*), ABISELECT(2704,1940), "S20657C10");
    /*is_ambiguous_... S20657C10::S20657C6 */ AMB_check_base_class_offset(lv, (S3490C4*)(S20657C6*), ABISELECT(2704,1940), "S20657C10");
    check_base_class_offset(lv, (S3490C4*)(S20657C5*), ABISELECT(2704,1940), "S20657C10");
    /*is_ambiguous_... S20657C10::S20657C6 */ AMB_check_base_class_offset(lv, (S3490C4*)(S20657C6*), ABISELECT(2704,1940), "S20657C10");
    /*is_ambiguous_... S20657C10::S20657C6 */ AMB_check_base_class_offset(lv, (S20657C7*)(S20657C6*), ABISELECT(96,52), "S20657C10");
    /*is_ambiguous_... S20657C10::S20657C6 */ AMB_check_base_class_offset(lv, (S20657C6*), ABISELECT(96,52), "S20657C10");
    /*is_ambiguous_... S20657C10::S20657C8 */ AMB_check_base_class_offset(lv, (S20657C7*)(S20657C8*), ABISELECT(2720,1956), "S20657C10");
    /*is_ambiguous_... S20657C5::S20657C7 */ AMB_check_base_class_offset(lv, (S20657C7*)(S20657C5*), ABISELECT(2720,1956), "S20657C10");
    /*is_ambiguous_... S20657C10::S20657C8 */ AMB_check_base_class_offset(lv, (S20657C7*)(S20657C8*), ABISELECT(2720,1956), "S20657C10");
    /*is_ambiguous_... S20657C10::S20657C8 */ AMB_check_base_class_offset(lv, (S20657C8*), ABISELECT(608,412), "S20657C10");
    /*is_ambiguous_... S20657C10::S20657C6 */ AMB_check_base_class_offset(lv, (S20657C7*)(S20657C6*), ABISELECT(2832,2016), "S20657C10");
    check_base_class_offset(lv, (S20657C6*)(S20657C5*), ABISELECT(2832,2016), "S20657C10");
    check_base_class_offset(lv, (S20657C8*)(S20657C5*), ABISELECT(3344,2376), "S20657C10");
    check_base_class_offset(lv, (S20657C5*), ABISELECT(2808,2008), "S20657C10");
    check_field_offset(lv, s20657c10f0, ABISELECT(896,644), "S20657C10.s20657c10f0");
    check_field_offset(lv, s20657c10f1, ABISELECT(1280,928), "S20657C10.s20657c10f1");
    check_field_offset(lv, s20657c10f2, ABISELECT(2208,1596), "S20657C10.s20657c10f2");
    check_field_offset(lv, s20657c10f3, ABISELECT(2216,1600), "S20657C10.s20657c10f3");
    check_field_offset(lv, s20657c10f4, ABISELECT(2224,1604), "S20657C10.s20657c10f4");
    check_field_offset(lv, s20657c10f5, ABISELECT(2320,1656), "S20657C10.s20657c10f5");
    test_class_info(&lv, &cd_S20657C10);
    dp->~S20657C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20657C10(Test_S20657C10, "S20657C10", ABISELECT(3632,2608));

#else // __cplusplus

extern void _ZN9S20657C10C1Ev();
extern void _ZN9S20657C10D2Ev();
Name_Map name_map_S20657C10[] = {
  NSPAIR(_ZN9S20657C10C1Ev),
  NSPAIR(_ZN9S20657C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20657C7;
extern VTBL_ENTRY _ZTI8S20657C7[];
extern  VTBL_ENTRY _ZTV8S20657C7[];
extern Class_Descriptor cd_S3490C4;
extern VTBL_ENTRY _ZTI7S3490C4[];
extern Class_Descriptor cd_S20657C7;
extern VTBL_ENTRY _ZTI8S20657C7[];
extern  VTBL_ENTRY _ZTV8S20657C7[];
extern Class_Descriptor cd_S20657C6;
extern VTBL_ENTRY _ZTI8S20657C6[];
extern  VTBL_ENTRY _ZTV8S20657C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20657C6[];
extern Class_Descriptor cd_S20657C7;
extern VTBL_ENTRY _ZTI8S20657C7[];
extern  VTBL_ENTRY _ZTV8S20657C7[];
extern Class_Descriptor cd_S20657C8;
extern VTBL_ENTRY _ZTI8S20657C8[];
extern  VTBL_ENTRY _ZTV8S20657C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20657C8[];
extern Class_Descriptor cd_S20657C7;
extern VTBL_ENTRY _ZTI8S20657C7[];
extern  VTBL_ENTRY _ZTV8S20657C7[];
extern Class_Descriptor cd_S20657C6;
extern VTBL_ENTRY _ZTI8S20657C6[];
extern  VTBL_ENTRY _ZTV8S20657C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20657C6[];
extern Class_Descriptor cd_S20657C8;
extern VTBL_ENTRY _ZTI8S20657C8[];
extern  VTBL_ENTRY _ZTV8S20657C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20657C8[];
extern Class_Descriptor cd_S20657C5;
extern VTBL_ENTRY _ZTI8S20657C5[];
extern  VTBL_ENTRY _ZTV8S20657C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20657C5[];
static Base_Class bases_S20657C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20657C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S3490C4,    ABISELECT(2704,1940), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20657C7,    ABISELECT(96,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20657C6,    ABISELECT(96,52), //bcp->offset
    10, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20657C7,    ABISELECT(2720,1956), //bcp->offset
    18, //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
    5, //immediately_derived
  0, 1},
  {&cd_S20657C8,    ABISELECT(608,412), //bcp->offset
    14, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20657C7,    ABISELECT(2832,2016), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20657C6,    ABISELECT(2832,2016), //bcp->offset
    28, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S20657C8,    ABISELECT(3344,2376), //bcp->offset
    33, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S20657C5,    ABISELECT(2808,2008), //bcp->offset
    22, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20657C10[];
extern void _ZN8S20657C72v1Ev();
extern void _ZN9S20657C10D1Ev();
extern void _ZN9S20657C10D0Ev();
extern void _ZN8S20657C72v1Ev();
extern void _ZN8S20657C82v2Ev();
extern void _ZN8S20657C72v1Ev();
extern void _ZN8S20657C72v1Ev();
extern void _ZN8S20657C82v2Ev();
static  VTBL_ENTRY vtc_S20657C10[] = {
  ABISELECT(3344,2376),
  ABISELECT(2832,2016),
  ABISELECT(2808,2008),
  ABISELECT(2720,1956),
  ABISELECT(2704,1940),
  0,
  (VTBL_ENTRY)&(_ZTI9S20657C10[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
  (VTBL_ENTRY)&_ZN9S20657C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20657C10D0Ev,
  ABISELECT(2608,1888),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI9S20657C10[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
  ABISELECT(2112,1544),
  ABISELECT(-608,-412),
  (VTBL_ENTRY)&(_ZTI9S20657C10[0]),
  (VTBL_ENTRY)&_ZN8S20657C82v2Ev,
  0,
  ABISELECT(-2720,-1956),
  (VTBL_ENTRY)&(_ZTI9S20657C10[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
  ABISELECT(536,368),
  ABISELECT(-88,-52),
  ABISELECT(24,8),
  ABISELECT(-104,-68),
  ABISELECT(-2808,-2008),
  (VTBL_ENTRY)&(_ZTI9S20657C10[0]),
  0,
  ABISELECT(-128,-76),
  ABISELECT(-2832,-2016),
  (VTBL_ENTRY)&(_ZTI9S20657C10[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
  0,
  ABISELECT(-624,-420),
  ABISELECT(-3344,-2376),
  (VTBL_ENTRY)&(_ZTI9S20657C10[0]),
  (VTBL_ENTRY)&_ZN8S20657C82v2Ev,
};
extern VTBL_ENTRY _ZTV9S20657C10[];
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C6__A__9S20657C10[] = {
  ABISELECT(2608,1888),
  0,
  (VTBL_ENTRY)&(_ZTI8S20657C6[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C8__A__9S20657C10[] = {
  ABISELECT(2112,1544),
  0,
  (VTBL_ENTRY)&(_ZTI8S20657C8[0]),
  (VTBL_ENTRY)&_ZN8S20657C82v2Ev,
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C7__8S20657C8__A__9S20657C10[] = {
  0,
  ABISELECT(-2112,-1544),
  (VTBL_ENTRY)&(_ZTI8S20657C8[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20657C5__9S20657C10[] = {
  ABISELECT(536,368),
  ABISELECT(-88,-52),
  ABISELECT(24,8),
  ABISELECT(-104,-68),
  0,
  (VTBL_ENTRY)&(_ZTI8S20657C5[0]),
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C6__8S20657C5__9S20657C10[] = {
  0,
  ABISELECT(-128,-76),
  ABISELECT(-24,-8),
  (VTBL_ENTRY)&(_ZTI8S20657C5[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C7__A1__8S20657C5__9S20657C10[] = {
  0,
  ABISELECT(88,52),
  (VTBL_ENTRY)&(_ZTI8S20657C5[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C8__8S20657C5__9S20657C10[] = {
  0,
  ABISELECT(-624,-420),
  ABISELECT(-536,-368),
  (VTBL_ENTRY)&(_ZTI8S20657C5[0]),
  (VTBL_ENTRY)&_ZN8S20657C82v2Ev,
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C6__A1__9S20657C10[] = {
  ABISELECT(-128,-76),
  0,
  (VTBL_ENTRY)&(_ZTI8S20657C6[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C8__A1__9S20657C10[] = {
  ABISELECT(-624,-420),
  0,
  (VTBL_ENTRY)&(_ZTI8S20657C8[0]),
  (VTBL_ENTRY)&_ZN8S20657C82v2Ev,
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C7__8S20657C8__A1__9S20657C10[] = {
  0,
  ABISELECT(624,420),
  (VTBL_ENTRY)&(_ZTI8S20657C8[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
static  VTT_ENTRY vtt_S20657C10[] = {
  {&(_ZTV9S20657C10[7]),  7,38},
  {&(_tg__ZTV8S20657C6__A__9S20657C10[3]),  3,4},
  {&(_tg__ZTV8S20657C8__A__9S20657C10[3]),  3,4},
  {&(_tg__ZTV8S20657C7__8S20657C8__A__9S20657C10[3]),  3,4},
  {&(_ZTV9S20657C10[13]),  13,38},
  {&(_ZTV9S20657C10[17]),  17,38},
  {&(_ZTV9S20657C10[21]),  21,38},
  {&(_ZTV9S20657C10[28]),  28,38},
  {&(_ZTV9S20657C10[32]),  32,38},
  {&(_ZTV9S20657C10[37]),  37,38},
  {&(_tg__ZTV8S20657C5__9S20657C10[6]),  6,6},
  {&(_tg__ZTV8S20657C6__8S20657C5__9S20657C10[4]),  4,5},
  {&(_tg__ZTV8S20657C7__A1__8S20657C5__9S20657C10[3]),  3,4},
  {&(_tg__ZTV8S20657C8__8S20657C5__9S20657C10[4]),  4,5},
  {&(_tg__ZTV8S20657C6__A1__9S20657C10[3]),  3,4},
  {&(_tg__ZTV8S20657C8__A1__9S20657C10[3]),  3,4},
  {&(_tg__ZTV8S20657C7__8S20657C8__A1__9S20657C10[3]),  3,4},
};
extern VTBL_ENTRY _ZTI9S20657C10[];
extern  VTBL_ENTRY _ZTV9S20657C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20657C10[];
Class_Descriptor cd_S20657C10 = {  "S20657C10", // class name
  bases_S20657C10, 10,
  &(vtc_S20657C10[0]), // expected_vtbl_contents
  &(vtt_S20657C10[0]), // expected_vtt_contents
  ABISELECT(3632,2608), // object size
  NSPAIRA(_ZTI9S20657C10),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S20657C10),38, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20657C10),17, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20657C9  : S20657C10 {
  void *s20657c9f0;
  short s20657c9f1:6;
  ::S20657C7 s20657c9f2;
  long double s20657c9f3;
  int s20657c9f4;
  ::S3490C4 s20657c9f5;
  ::S20657C8 s20657c9f6;
  void *s20657c9f7;
  int s20657c9f8;
  void *s20657c9f9[2];
  virtual  ~S20657C9(); // _ZN8S20657C9D2Ev
  virtual void  v3(); // _ZN8S20657C92v3Ev
  virtual void  v4(); // _ZN8S20657C92v4Ev
  S20657C9(); // tgen
};
//SIG(-1 S20657C9) C1{ BC2{ BC3{ v3 FD Fi:3 Fc:8 FD[2] FL} VBC4{ m FL Fi Fc} BC5{ BC3 VBC4 Fc[10] Fi FC6{ VBC3 v4 FC4 FL FC4[7] Fp FL FC4 Fp Fc Fs Fi FC3} FL} BC6 VBC7{ VBC4 VBC5 VBC3 VBC6 Fp} vd FC6 FC7 Fp Fi FC3 FC6} vd v1 v2 Fp Fs:6 FC3 FD Fi FC4 FC6 Fp Fi Fp[2]}


 S20657C9 ::~S20657C9(){ note_dtor("S20657C9", this);}
void  S20657C9 ::v3(){vfunc_called(this, "_ZN8S20657C92v3Ev");}
void  S20657C9 ::v4(){vfunc_called(this, "_ZN8S20657C92v4Ev");}
S20657C9 ::S20657C9(){ note_ctor("S20657C9", this);} // tgen

static void Test_S20657C9()
{
  extern Class_Descriptor cd_S20657C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(264,751)];
    init_test(&cd_S20657C9, buf);
    S20657C9 *dp, &lv = *(dp=new (buf) S20657C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(4208,3000), "sizeof(S20657C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20657C9)");
    /*is_ambiguous_... S20657C10::S20657C7 */ AMB_check_base_class_offset(lv, (S20657C7*)(S20657C10*), 0, "S20657C9");
    check_base_class_offset(lv, (S3490C4*)(S20657C10*), ABISELECT(3280,2332), "S20657C9");
    /*is_ambiguous_... S20657C10::S20657C6 */ AMB_check_base_class_offset(lv, (S3490C4*)(S20657C6*)(S20657C10*), ABISELECT(3280,2332), "S20657C9");
    check_base_class_offset(lv, (S3490C4*)(S20657C5*), ABISELECT(3280,2332), "S20657C9");
    /*is_ambiguous_... S20657C9::S20657C6 */ AMB_check_base_class_offset(lv, (S3490C4*)(S20657C6*), ABISELECT(3280,2332), "S20657C9");
    /*is_ambiguous_... S20657C10::S20657C6 */ AMB_check_base_class_offset(lv, (S20657C7*)(S20657C6*)(S20657C10*), ABISELECT(96,52), "S20657C9");
    /*is_ambiguous_... S20657C10::S20657C6 */ AMB_check_base_class_offset(lv, (S20657C6*)(S20657C10*), ABISELECT(96,52), "S20657C9");
    /*is_ambiguous_... S20657C10::S20657C8 */ AMB_check_base_class_offset(lv, (S20657C7*)(S20657C8*)(S20657C10*), ABISELECT(3296,2348), "S20657C9");
    /*is_ambiguous_... S20657C5::S20657C7 */ AMB_check_base_class_offset(lv, (S20657C7*)(S20657C5*), ABISELECT(3296,2348), "S20657C9");
    /*is_ambiguous_... S20657C9::S20657C8 */ AMB_check_base_class_offset(lv, (S20657C7*)(S20657C8*), ABISELECT(3296,2348), "S20657C9");
    /*is_ambiguous_... S20657C10::S20657C8 */ AMB_check_base_class_offset(lv, (S20657C8*)(S20657C10*), ABISELECT(608,412), "S20657C9");
    /*is_ambiguous_... S20657C9::S20657C6 */ AMB_check_base_class_offset(lv, (S20657C7*)(S20657C6*), ABISELECT(3408,2408), "S20657C9");
    check_base_class_offset(lv, (S20657C6*)(S20657C5*), ABISELECT(3408,2408), "S20657C9");
    check_base_class_offset(lv, (S20657C8*)(S20657C5*), ABISELECT(3920,2768), "S20657C9");
    check_base_class_offset(lv, (S20657C5*)(S20657C10*), ABISELECT(3384,2400), "S20657C9");
    check_base_class_offset(lv, (S20657C10*), 0, "S20657C9");
    check_field_offset(lv, s20657c9f0, ABISELECT(2704,1940), "S20657C9.s20657c9f0");
    set_bf_and_test(lv, s20657c9f1, ABISELECT(2712,1944), 0, 6, 1, "S20657C9");
    set_bf_and_test(lv, s20657c9f1, ABISELECT(2712,1944), 0, 6, hide_sll(1LL<<5), "S20657C9");
    check_field_offset(lv, s20657c9f2, ABISELECT(2720,1948), "S20657C9.s20657c9f2");
    check_field_offset(lv, s20657c9f3, ABISELECT(2816,2000), "S20657C9.s20657c9f3");
    check_field_offset(lv, s20657c9f4, ABISELECT(2832,2012), "S20657C9.s20657c9f4");
    check_field_offset(lv, s20657c9f5, ABISELECT(2840,2016), "S20657C9.s20657c9f5");
    check_field_offset(lv, s20657c9f6, ABISELECT(2864,2032), "S20657C9.s20657c9f6");
    check_field_offset(lv, s20657c9f7, ABISELECT(3248,2316), "S20657C9.s20657c9f7");
    check_field_offset(lv, s20657c9f8, ABISELECT(3256,2320), "S20657C9.s20657c9f8");
    check_field_offset(lv, s20657c9f9, ABISELECT(3264,2324), "S20657C9.s20657c9f9");
    test_class_info(&lv, &cd_S20657C9);
    dp->~S20657C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20657C9(Test_S20657C9, "S20657C9", ABISELECT(4208,3000));

#else // __cplusplus

extern void _ZN8S20657C9C1Ev();
extern void _ZN8S20657C9D2Ev();
Name_Map name_map_S20657C9[] = {
  NSPAIR(_ZN8S20657C9C1Ev),
  NSPAIR(_ZN8S20657C9D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20657C7;
extern VTBL_ENTRY _ZTI8S20657C7[];
extern  VTBL_ENTRY _ZTV8S20657C7[];
extern Class_Descriptor cd_S3490C4;
extern VTBL_ENTRY _ZTI7S3490C4[];
extern Class_Descriptor cd_S20657C7;
extern VTBL_ENTRY _ZTI8S20657C7[];
extern  VTBL_ENTRY _ZTV8S20657C7[];
extern Class_Descriptor cd_S20657C6;
extern VTBL_ENTRY _ZTI8S20657C6[];
extern  VTBL_ENTRY _ZTV8S20657C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20657C6[];
extern Class_Descriptor cd_S20657C7;
extern VTBL_ENTRY _ZTI8S20657C7[];
extern  VTBL_ENTRY _ZTV8S20657C7[];
extern Class_Descriptor cd_S20657C8;
extern VTBL_ENTRY _ZTI8S20657C8[];
extern  VTBL_ENTRY _ZTV8S20657C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20657C8[];
extern Class_Descriptor cd_S20657C7;
extern VTBL_ENTRY _ZTI8S20657C7[];
extern  VTBL_ENTRY _ZTV8S20657C7[];
extern Class_Descriptor cd_S20657C6;
extern VTBL_ENTRY _ZTI8S20657C6[];
extern  VTBL_ENTRY _ZTV8S20657C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20657C6[];
extern Class_Descriptor cd_S20657C8;
extern VTBL_ENTRY _ZTI8S20657C8[];
extern  VTBL_ENTRY _ZTV8S20657C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20657C8[];
extern Class_Descriptor cd_S20657C5;
extern VTBL_ENTRY _ZTI8S20657C5[];
extern  VTBL_ENTRY _ZTV8S20657C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20657C5[];
extern Class_Descriptor cd_S20657C10;
extern VTBL_ENTRY _ZTI9S20657C10[];
extern  VTBL_ENTRY _ZTV9S20657C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20657C10[];
static Base_Class bases_S20657C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20657C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S3490C4,    ABISELECT(3280,2332), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20657C7,    ABISELECT(96,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20657C6,    ABISELECT(96,52), //bcp->offset
    12, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S20657C7,    ABISELECT(3296,2348), //bcp->offset
    20, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20657C8,    ABISELECT(608,412), //bcp->offset
    16, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S20657C7,    ABISELECT(3408,2408), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20657C6,    ABISELECT(3408,2408), //bcp->offset
    30, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S20657C8,    ABISELECT(3920,2768), //bcp->offset
    35, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S20657C5,    ABISELECT(3384,2400), //bcp->offset
    24, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S20657C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20657C9[];
extern void _ZN8S20657C72v1Ev();
extern void _ZN8S20657C9D1Ev();
extern void _ZN8S20657C9D0Ev();
extern void _ZN8S20657C92v3Ev();
extern void _ZN8S20657C92v4Ev();
extern void _ZN8S20657C72v1Ev();
extern void _ZN8S20657C82v2Ev();
extern void _ZN8S20657C72v1Ev();
extern void _ZN8S20657C72v1Ev();
extern void _ZN8S20657C82v2Ev();
static  VTBL_ENTRY vtc_S20657C9[] = {
  ABISELECT(3920,2768),
  ABISELECT(3408,2408),
  ABISELECT(3384,2400),
  ABISELECT(3296,2348),
  ABISELECT(3280,2332),
  0,
  (VTBL_ENTRY)&(_ZTI8S20657C9[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
  (VTBL_ENTRY)&_ZN8S20657C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20657C9D0Ev,
  (VTBL_ENTRY)&_ZN8S20657C92v3Ev,
  (VTBL_ENTRY)&_ZN8S20657C92v4Ev,
  ABISELECT(3184,2280),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI8S20657C9[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
  ABISELECT(2688,1936),
  ABISELECT(-608,-412),
  (VTBL_ENTRY)&(_ZTI8S20657C9[0]),
  (VTBL_ENTRY)&_ZN8S20657C82v2Ev,
  0,
  ABISELECT(-3296,-2348),
  (VTBL_ENTRY)&(_ZTI8S20657C9[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
  ABISELECT(536,368),
  ABISELECT(-88,-52),
  ABISELECT(24,8),
  ABISELECT(-104,-68),
  ABISELECT(-3384,-2400),
  (VTBL_ENTRY)&(_ZTI8S20657C9[0]),
  0,
  ABISELECT(-128,-76),
  ABISELECT(-3408,-2408),
  (VTBL_ENTRY)&(_ZTI8S20657C9[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
  0,
  ABISELECT(-624,-420),
  ABISELECT(-3920,-2768),
  (VTBL_ENTRY)&(_ZTI8S20657C9[0]),
  (VTBL_ENTRY)&_ZN8S20657C82v2Ev,
};
extern VTBL_ENTRY _ZTV8S20657C9[];
extern void _ZN8S20657C72v1Ev();
extern void _ZN9S20657C10D1Ev();
extern void _ZN9S20657C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20657C10__8S20657C9[] = {
  ABISELECT(3920,2768),
  ABISELECT(3408,2408),
  ABISELECT(3384,2400),
  ABISELECT(3296,2348),
  ABISELECT(3280,2332),
  0,
  (VTBL_ENTRY)&(_ZTI9S20657C10[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
  (VTBL_ENTRY)&_ZN9S20657C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20657C10D0Ev,
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C69S20657C10__8S20657C9[] = {
  ABISELECT(3184,2280),
  0,
  (VTBL_ENTRY)&(_ZTI8S20657C6[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C89S20657C10__8S20657C9[] = {
  ABISELECT(2688,1936),
  0,
  (VTBL_ENTRY)&(_ZTI8S20657C8[0]),
  (VTBL_ENTRY)&_ZN8S20657C82v2Ev,
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C7__8S20657C89S20657C10__8S20657C9[] = {
  0,
  ABISELECT(-2688,-1936),
  (VTBL_ENTRY)&(_ZTI8S20657C8[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C6__A__9S20657C10__8S20657C9[] = {
  ABISELECT(3184,2280),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI9S20657C10[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C8__A__9S20657C10__8S20657C9[] = {
  ABISELECT(2688,1936),
  ABISELECT(-608,-412),
  (VTBL_ENTRY)&(_ZTI9S20657C10[0]),
  (VTBL_ENTRY)&_ZN8S20657C82v2Ev,
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C7__A2__9S20657C10__8S20657C9[] = {
  0,
  ABISELECT(-3296,-2348),
  (VTBL_ENTRY)&(_ZTI9S20657C10[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20657C5__9S20657C10__8S20657C9[] = {
  ABISELECT(536,368),
  ABISELECT(-88,-52),
  ABISELECT(24,8),
  ABISELECT(-104,-68),
  ABISELECT(-3384,-2400),
  (VTBL_ENTRY)&(_ZTI9S20657C10[0]),
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C6__A1__9S20657C10__8S20657C9[] = {
  0,
  ABISELECT(-128,-76),
  ABISELECT(-3408,-2408),
  (VTBL_ENTRY)&(_ZTI9S20657C10[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C8__A1__9S20657C10__8S20657C9[] = {
  0,
  ABISELECT(-624,-420),
  ABISELECT(-3920,-2768),
  (VTBL_ENTRY)&(_ZTI9S20657C10[0]),
  (VTBL_ENTRY)&_ZN8S20657C82v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20657C5__8S20657C9[] = {
  ABISELECT(536,368),
  ABISELECT(-88,-52),
  ABISELECT(24,8),
  ABISELECT(-104,-68),
  0,
  (VTBL_ENTRY)&(_ZTI8S20657C5[0]),
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C6__8S20657C5__8S20657C9[] = {
  0,
  ABISELECT(-128,-76),
  ABISELECT(-24,-8),
  (VTBL_ENTRY)&(_ZTI8S20657C5[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C7__A1__8S20657C5__8S20657C9[] = {
  0,
  ABISELECT(88,52),
  (VTBL_ENTRY)&(_ZTI8S20657C5[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C8__8S20657C5__8S20657C9[] = {
  0,
  ABISELECT(-624,-420),
  ABISELECT(-536,-368),
  (VTBL_ENTRY)&(_ZTI8S20657C5[0]),
  (VTBL_ENTRY)&_ZN8S20657C82v2Ev,
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C6__A1__8S20657C9[] = {
  ABISELECT(-128,-76),
  0,
  (VTBL_ENTRY)&(_ZTI8S20657C6[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C8__A1__8S20657C9[] = {
  ABISELECT(-624,-420),
  0,
  (VTBL_ENTRY)&(_ZTI8S20657C8[0]),
  (VTBL_ENTRY)&_ZN8S20657C82v2Ev,
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C7__8S20657C8__A1__8S20657C9[] = {
  0,
  ABISELECT(624,420),
  (VTBL_ENTRY)&(_ZTI8S20657C8[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
static  VTT_ENTRY vtt_S20657C9[] = {
  {&(_ZTV8S20657C9[7]),  7,40},
  {&(_tg__ZTV9S20657C10__8S20657C9[7]),  7,10},
  {&(_tg__ZTV8S20657C69S20657C10__8S20657C9[3]),  3,4},
  {&(_tg__ZTV8S20657C89S20657C10__8S20657C9[3]),  3,4},
  {&(_tg__ZTV8S20657C7__8S20657C89S20657C10__8S20657C9[3]),  3,4},
  {&(_tg__ZTV8S20657C6__A__9S20657C10__8S20657C9[3]),  3,4},
  {&(_tg__ZTV8S20657C8__A__9S20657C10__8S20657C9[3]),  3,4},
  {&(_tg__ZTV8S20657C7__A2__9S20657C10__8S20657C9[3]),  3,4},
  {&(_tg__ZTV8S20657C5__9S20657C10__8S20657C9[6]),  6,6},
  {&(_tg__ZTV8S20657C6__A1__9S20657C10__8S20657C9[4]),  4,5},
  {&(_tg__ZTV8S20657C8__A1__9S20657C10__8S20657C9[4]),  4,5},
  {&(_ZTV8S20657C9[15]),  15,40},
  {&(_ZTV8S20657C9[19]),  19,40},
  {&(_ZTV8S20657C9[23]),  23,40},
  {&(_ZTV8S20657C9[30]),  30,40},
  {&(_ZTV8S20657C9[34]),  34,40},
  {&(_ZTV8S20657C9[39]),  39,40},
  {&(_tg__ZTV8S20657C5__8S20657C9[6]),  6,6},
  {&(_tg__ZTV8S20657C6__8S20657C5__8S20657C9[4]),  4,5},
  {&(_tg__ZTV8S20657C7__A1__8S20657C5__8S20657C9[3]),  3,4},
  {&(_tg__ZTV8S20657C8__8S20657C5__8S20657C9[4]),  4,5},
  {&(_tg__ZTV8S20657C6__A1__8S20657C9[3]),  3,4},
  {&(_tg__ZTV8S20657C8__A1__8S20657C9[3]),  3,4},
  {&(_tg__ZTV8S20657C7__8S20657C8__A1__8S20657C9[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S20657C9[];
extern  VTBL_ENTRY _ZTV8S20657C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20657C9[];
Class_Descriptor cd_S20657C9 = {  "S20657C9", // class name
  bases_S20657C9, 11,
  &(vtc_S20657C9[0]), // expected_vtbl_contents
  &(vtt_S20657C9[0]), // expected_vtt_contents
  ABISELECT(4208,3000), // object size
  NSPAIRA(_ZTI8S20657C9),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S20657C9),40, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20657C9),24, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20657C11  : S20657C5 , S20657C10 , S20657C6 , S20657C7 {
  ::S20657C6 s20657c11f0[2];
  ::S20657C7 s20657c11f1;
  int s20657c11f2;
  ::S3490C4 s20657c11f3;
  void *s20657c11f4[10];
  int s20657c11f5[2];
  __tsi64 s20657c11f6;
  long double s20657c11f7;
  __tsi64 s20657c11f8;
  int s20657c11f9;
  virtual void  v5(); // _ZN9S20657C112v5Ev
  ~S20657C11(); // tgen
  S20657C11(); // tgen
};
//SIG(-1 S20657C11) C1{ BC2{ VBC3{ m FL Fi Fc} VBC4{ BC5{ v2 FD Fi:3 Fc:8 FD[2] FL} VBC3 Fc[10] Fi FC6{ VBC5 v3 FC3 FL FC3[7] Fp FL FC3 Fp Fc Fs Fi FC5} FL} VBC5 VBC6 Fp} BC7{ BC5 VBC3 BC4 BC6 VBC2 vd FC6 FC2 Fp Fi FC5 FC6} BC4 BC5 v1 FC4[2] FC5 Fi FC3 Fp[10] Fi[2] FL FD FL Fi}


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

static void Test_S20657C11()
{
  extern Class_Descriptor cd_S20657C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(349,984)];
    init_test(&cd_S20657C11, buf);
    S20657C11 *dp, &lv = *(dp=new (buf) S20657C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(5568,3932), "sizeof(S20657C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20657C11)");
    /*is_ambiguous_... S20657C11::S20657C5 */ AMB_check_base_class_offset(lv, (S3490C4*)(S20657C5*), ABISELECT(4640,3264), "S20657C11");
    /*is_ambiguous_... S20657C11::S20657C6 */ AMB_check_base_class_offset(lv, (S3490C4*)(S20657C6*), ABISELECT(4640,3264), "S20657C11");
    check_base_class_offset(lv, (S3490C4*)(S20657C10*), ABISELECT(4640,3264), "S20657C11");
    /*is_ambiguous_... S20657C10::S20657C6 */ AMB_check_base_class_offset(lv, (S3490C4*)(S20657C6*)(S20657C10*), ABISELECT(4640,3264), "S20657C11");
    /*is_ambiguous_... S20657C11::S20657C5 */ AMB_check_base_class_offset(lv, (S3490C4*)(S20657C5*), ABISELECT(4640,3264), "S20657C11");
    /*is_ambiguous_... S20657C11::S20657C6 */ AMB_check_base_class_offset(lv, (S3490C4*)(S20657C6*), ABISELECT(4640,3264), "S20657C11");
    /*is_ambiguous_... S20657C11::S20657C6 */ AMB_check_base_class_offset(lv, (S20657C7*)(S20657C6*), ABISELECT(4656,3280), "S20657C11");
    /*is_ambiguous_... S20657C11::S20657C5 */ AMB_check_base_class_offset(lv, (S20657C6*)(S20657C5*), ABISELECT(4656,3280), "S20657C11");
    /*is_ambiguous_... S20657C11::S20657C5 */ AMB_check_base_class_offset(lv, (S20657C6*)(S20657C5*), ABISELECT(4656,3280), "S20657C11");
    /*is_ambiguous_... S20657C11::S20657C5 */ AMB_check_base_class_offset(lv, (S20657C7*)(S20657C5*), ABISELECT(5168,3640), "S20657C11");
    /*is_ambiguous_... S20657C11::S20657C8 */ AMB_check_base_class_offset(lv, (S20657C7*)(S20657C8*), ABISELECT(5168,3640), "S20657C11");
    /*is_ambiguous_... S20657C10::S20657C8 */ AMB_check_base_class_offset(lv, (S20657C7*)(S20657C8*)(S20657C10*), ABISELECT(5168,3640), "S20657C11");
    /*is_ambiguous_... S20657C11::S20657C5 */ AMB_check_base_class_offset(lv, (S20657C7*)(S20657C5*), ABISELECT(5168,3640), "S20657C11");
    /*is_ambiguous_... S20657C11::S20657C5 */ AMB_check_base_class_offset(lv, (S20657C8*)(S20657C5*), ABISELECT(5264,3692), "S20657C11");
    /*is_ambiguous_... S20657C11::S20657C5 */ AMB_check_base_class_offset(lv, (S20657C8*)(S20657C5*), ABISELECT(5264,3692), "S20657C11");
    /*is_ambiguous_... S20657C11::S20657C5 */ AMB_check_base_class_offset(lv, (S20657C5*), 0, "S20657C11");
    /*is_ambiguous_... S20657C10::S20657C7 */ AMB_check_base_class_offset(lv, (S20657C7*)(S20657C10*), ABISELECT(16,8), "S20657C11");
    /*is_ambiguous_... S20657C10::S20657C6 */ AMB_check_base_class_offset(lv, (S20657C7*)(S20657C6*)(S20657C10*), ABISELECT(112,60), "S20657C11");
    /*is_ambiguous_... S20657C10::S20657C6 */ AMB_check_base_class_offset(lv, (S20657C6*)(S20657C10*), ABISELECT(112,60), "S20657C11");
    /*is_ambiguous_... S20657C10::S20657C8 */ AMB_check_base_class_offset(lv, (S20657C8*)(S20657C10*), ABISELECT(624,420), "S20657C11");
    check_base_class_offset(lv, (S20657C5*)(S20657C10*), ABISELECT(5552,3924), "S20657C11");
    check_base_class_offset(lv, (S20657C10*), ABISELECT(16,8), "S20657C11");
    /*is_ambiguous_... S20657C11::S20657C6 */ AMB_check_base_class_offset(lv, (S20657C7*)(S20657C6*), ABISELECT(2720,1948), "S20657C11");
    /*is_ambiguous_... S20657C11::S20657C6 */ AMB_check_base_class_offset(lv, (S20657C6*), ABISELECT(2720,1948), "S20657C11");
    /*is_ambiguous_... S20657C11::S20657C7 */ AMB_check_base_class_offset(lv, (S20657C7*), ABISELECT(3232,2308), "S20657C11");
    check_field_offset(lv, s20657c11f0, ABISELECT(3328,2360), "S20657C11.s20657c11f0");
    check_field_offset(lv, s20657c11f1, ABISELECT(4384,3112), "S20657C11.s20657c11f1");
    check_field_offset(lv, s20657c11f2, ABISELECT(4480,3164), "S20657C11.s20657c11f2");
    check_field_offset(lv, s20657c11f3, ABISELECT(4488,3168), "S20657C11.s20657c11f3");
    check_field_offset(lv, s20657c11f4, ABISELECT(4504,3184), "S20657C11.s20657c11f4");
    check_field_offset(lv, s20657c11f5, ABISELECT(4584,3224), "S20657C11.s20657c11f5");
    check_field_offset(lv, s20657c11f6, ABISELECT(4592,3232), "S20657C11.s20657c11f6");
    check_field_offset(lv, s20657c11f7, ABISELECT(4608,3240), "S20657C11.s20657c11f7");
    check_field_offset(lv, s20657c11f8, ABISELECT(4624,3252), "S20657C11.s20657c11f8");
    check_field_offset(lv, s20657c11f9, ABISELECT(4632,3260), "S20657C11.s20657c11f9");
    test_class_info(&lv, &cd_S20657C11);
    dp->~S20657C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20657C11(Test_S20657C11, "S20657C11", ABISELECT(5568,3932));

#else // __cplusplus

extern void _ZN9S20657C11C1Ev();
extern void _ZN9S20657C11D1Ev();
Name_Map name_map_S20657C11[] = {
  NSPAIR(_ZN9S20657C11C1Ev),
  NSPAIR(_ZN9S20657C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3490C4;
extern VTBL_ENTRY _ZTI7S3490C4[];
extern Class_Descriptor cd_S20657C7;
extern VTBL_ENTRY _ZTI8S20657C7[];
extern  VTBL_ENTRY _ZTV8S20657C7[];
extern Class_Descriptor cd_S20657C6;
extern VTBL_ENTRY _ZTI8S20657C6[];
extern  VTBL_ENTRY _ZTV8S20657C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20657C6[];
extern Class_Descriptor cd_S20657C7;
extern VTBL_ENTRY _ZTI8S20657C7[];
extern  VTBL_ENTRY _ZTV8S20657C7[];
extern Class_Descriptor cd_S20657C8;
extern VTBL_ENTRY _ZTI8S20657C8[];
extern  VTBL_ENTRY _ZTV8S20657C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20657C8[];
extern Class_Descriptor cd_S20657C5;
extern VTBL_ENTRY _ZTI8S20657C5[];
extern  VTBL_ENTRY _ZTV8S20657C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20657C5[];
extern Class_Descriptor cd_S20657C7;
extern VTBL_ENTRY _ZTI8S20657C7[];
extern  VTBL_ENTRY _ZTV8S20657C7[];
extern Class_Descriptor cd_S20657C7;
extern VTBL_ENTRY _ZTI8S20657C7[];
extern  VTBL_ENTRY _ZTV8S20657C7[];
extern Class_Descriptor cd_S20657C6;
extern VTBL_ENTRY _ZTI8S20657C6[];
extern  VTBL_ENTRY _ZTV8S20657C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20657C6[];
extern Class_Descriptor cd_S20657C8;
extern VTBL_ENTRY _ZTI8S20657C8[];
extern  VTBL_ENTRY _ZTV8S20657C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20657C8[];
extern Class_Descriptor cd_S20657C5;
extern VTBL_ENTRY _ZTI8S20657C5[];
extern  VTBL_ENTRY _ZTV8S20657C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20657C5[];
extern Class_Descriptor cd_S20657C10;
extern VTBL_ENTRY _ZTI9S20657C10[];
extern  VTBL_ENTRY _ZTV9S20657C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20657C10[];
extern Class_Descriptor cd_S20657C7;
extern VTBL_ENTRY _ZTI8S20657C7[];
extern  VTBL_ENTRY _ZTV8S20657C7[];
extern Class_Descriptor cd_S20657C6;
extern VTBL_ENTRY _ZTI8S20657C6[];
extern  VTBL_ENTRY _ZTV8S20657C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20657C6[];
extern Class_Descriptor cd_S20657C7;
extern VTBL_ENTRY _ZTI8S20657C7[];
extern  VTBL_ENTRY _ZTV8S20657C7[];
static Base_Class bases_S20657C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3490C4,    ABISELECT(4640,3264), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20657C7,    ABISELECT(4656,3280), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20657C6,    ABISELECT(4656,3280), //bcp->offset
    35, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20657C7,    ABISELECT(5168,3640), //bcp->offset
    40, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20657C8,    ABISELECT(5264,3692), //bcp->offset
    44, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20657C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20657C7,    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
    7, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S20657C7,    ABISELECT(112,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20657C6,    ABISELECT(112,60), //bcp->offset
    20, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S20657C8,    ABISELECT(624,420), //bcp->offset
    24, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S20657C5,    ABISELECT(5552,3924), //bcp->offset
    49, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S20657C10,    ABISELECT(16,8), //bcp->offset
    10, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20657C7,    ABISELECT(2720,1948), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20657C6,    ABISELECT(2720,1948), //bcp->offset
    28, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20657C7,    ABISELECT(3232,2308), //bcp->offset
    32, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20657C11[];
extern void _ZN9S20657C112v5Ev();
extern void _ZN9S20657C11D1Ev();
extern void _ZN9S20657C11D0Ev();
extern void _ZN8S20657C72v1Ev();
extern void ABISELECT(_ZThn16_N9S20657C11D1Ev,_ZThn8_N9S20657C11D1Ev)();
extern void ABISELECT(_ZThn16_N9S20657C11D0Ev,_ZThn8_N9S20657C11D0Ev)();
extern void _ZN8S20657C72v1Ev();
extern void _ZN8S20657C82v2Ev();
extern void _ZN8S20657C72v1Ev();
extern void _ZN8S20657C72v1Ev();
extern void _ZN8S20657C72v1Ev();
extern void _ZN8S20657C72v1Ev();
extern void _ZN8S20657C82v2Ev();
static  VTBL_ENTRY vtc_S20657C11[] = {
  ABISELECT(5552,3924),
  ABISELECT(5264,3692),
  ABISELECT(5168,3640),
  ABISELECT(4656,3280),
  ABISELECT(4640,3264),
  0,
  (VTBL_ENTRY)&(_ZTI9S20657C11[0]),
  (VTBL_ENTRY)&_ZN9S20657C112v5Ev,
  (VTBL_ENTRY)&_ZN9S20657C11D1Ev,
  (VTBL_ENTRY)&_ZN9S20657C11D0Ev,
  ABISELECT(5248,3684),
  ABISELECT(4640,3272),
  ABISELECT(5536,3916),
  ABISELECT(5152,3632),
  ABISELECT(4624,3256),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20657C11[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S20657C11D1Ev,_ZThn8_N9S20657C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S20657C11D0Ev,_ZThn8_N9S20657C11D0Ev),
  ABISELECT(4528,3204),
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI9S20657C11[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
  ABISELECT(4544,3220),
  ABISELECT(-624,-420),
  (VTBL_ENTRY)&(_ZTI9S20657C11[0]),
  (VTBL_ENTRY)&_ZN8S20657C82v2Ev,
  ABISELECT(1920,1316),
  ABISELECT(-2720,-1948),
  (VTBL_ENTRY)&(_ZTI9S20657C11[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
  ABISELECT(-3232,-2308),
  (VTBL_ENTRY)&(_ZTI9S20657C11[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
  0,
  -16,
  ABISELECT(-4656,-3280),
  (VTBL_ENTRY)&(_ZTI9S20657C11[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
  0,
  ABISELECT(-5168,-3640),
  (VTBL_ENTRY)&(_ZTI9S20657C11[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
  0,
  ABISELECT(-96,-52),
  ABISELECT(-5264,-3692),
  (VTBL_ENTRY)&(_ZTI9S20657C11[0]),
  (VTBL_ENTRY)&_ZN8S20657C82v2Ev,
  ABISELECT(-288,-232),
  ABISELECT(-384,-284),
  ABISELECT(-896,-644),
  ABISELECT(-912,-660),
  ABISELECT(-5552,-3924),
  (VTBL_ENTRY)&(_ZTI9S20657C11[0]),
};
extern VTBL_ENTRY _ZTV9S20657C11[];
static  VTBL_ENTRY _tg__ZTV8S20657C5__A__9S20657C11[] = {
  ABISELECT(5264,3692),
  ABISELECT(5168,3640),
  ABISELECT(4656,3280),
  ABISELECT(4640,3264),
  0,
  (VTBL_ENTRY)&(_ZTI8S20657C5[0]),
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C6__8S20657C5__A__9S20657C11[] = {
  0,
  -16,
  ABISELECT(-4656,-3280),
  (VTBL_ENTRY)&(_ZTI8S20657C5[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C7__A1__8S20657C5__A__9S20657C11[] = {
  0,
  ABISELECT(-5168,-3640),
  (VTBL_ENTRY)&(_ZTI8S20657C5[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C8__8S20657C5__A__9S20657C11[] = {
  0,
  ABISELECT(-96,-52),
  ABISELECT(-5264,-3692),
  (VTBL_ENTRY)&(_ZTI8S20657C5[0]),
  (VTBL_ENTRY)&_ZN8S20657C82v2Ev,
};
extern void _ZN8S20657C72v1Ev();
extern void _ZN9S20657C10D1Ev();
extern void _ZN9S20657C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20657C10__9S20657C11[] = {
  ABISELECT(5248,3684),
  ABISELECT(4640,3272),
  ABISELECT(5536,3916),
  ABISELECT(5152,3632),
  ABISELECT(4624,3256),
  0,
  (VTBL_ENTRY)&(_ZTI9S20657C10[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
  (VTBL_ENTRY)&_ZN9S20657C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20657C10D0Ev,
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C69S20657C10__A1__9S20657C11[] = {
  ABISELECT(4528,3204),
  0,
  (VTBL_ENTRY)&(_ZTI8S20657C6[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C89S20657C10__A1__9S20657C11[] = {
  ABISELECT(4544,3220),
  0,
  (VTBL_ENTRY)&(_ZTI8S20657C8[0]),
  (VTBL_ENTRY)&_ZN8S20657C82v2Ev,
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C7__8S20657C89S20657C10__A1__9S20657C11[] = {
  0,
  ABISELECT(-4544,-3220),
  (VTBL_ENTRY)&(_ZTI8S20657C8[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C6__A__9S20657C10__9S20657C11[] = {
  ABISELECT(4528,3204),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI9S20657C10[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C8__A__9S20657C10__9S20657C11[] = {
  ABISELECT(4544,3220),
  ABISELECT(-608,-412),
  (VTBL_ENTRY)&(_ZTI9S20657C10[0]),
  (VTBL_ENTRY)&_ZN8S20657C82v2Ev,
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C7__A2__9S20657C10__9S20657C11[] = {
  0,
  ABISELECT(-5152,-3632),
  (VTBL_ENTRY)&(_ZTI9S20657C10[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20657C5__9S20657C10__9S20657C11[] = {
  ABISELECT(-288,-232),
  ABISELECT(-384,-284),
  ABISELECT(-896,-644),
  ABISELECT(-912,-660),
  ABISELECT(-5536,-3916),
  (VTBL_ENTRY)&(_ZTI9S20657C10[0]),
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C6__A1__9S20657C10__9S20657C11[] = {
  0,
  -16,
  ABISELECT(-4640,-3272),
  (VTBL_ENTRY)&(_ZTI9S20657C10[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C8__A1__9S20657C10__9S20657C11[] = {
  0,
  ABISELECT(-96,-52),
  ABISELECT(-5248,-3684),
  (VTBL_ENTRY)&(_ZTI9S20657C10[0]),
  (VTBL_ENTRY)&_ZN8S20657C82v2Ev,
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C6__A__9S20657C11[] = {
  ABISELECT(1920,1316),
  0,
  (VTBL_ENTRY)&(_ZTI8S20657C6[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C6__9S20657C11[] = {
  -16,
  0,
  (VTBL_ENTRY)&(_ZTI8S20657C6[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C8__9S20657C11[] = {
  ABISELECT(-96,-52),
  0,
  (VTBL_ENTRY)&(_ZTI8S20657C8[0]),
  (VTBL_ENTRY)&_ZN8S20657C82v2Ev,
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C7__8S20657C8__9S20657C11[] = {
  0,
  ABISELECT(96,52),
  (VTBL_ENTRY)&(_ZTI8S20657C8[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20657C5__A1__9S20657C11[] = {
  ABISELECT(-288,-232),
  ABISELECT(-384,-284),
  ABISELECT(-896,-644),
  ABISELECT(-912,-660),
  0,
  (VTBL_ENTRY)&(_ZTI8S20657C5[0]),
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C6__8S20657C5__A1__9S20657C11[] = {
  0,
  -16,
  ABISELECT(896,644),
  (VTBL_ENTRY)&(_ZTI8S20657C5[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C7__A1__8S20657C5__A1__9S20657C11[] = {
  0,
  ABISELECT(384,284),
  (VTBL_ENTRY)&(_ZTI8S20657C5[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C8__8S20657C5__A1__9S20657C11[] = {
  0,
  ABISELECT(-96,-52),
  ABISELECT(288,232),
  (VTBL_ENTRY)&(_ZTI8S20657C5[0]),
  (VTBL_ENTRY)&_ZN8S20657C82v2Ev,
};
static  VTT_ENTRY vtt_S20657C11[] = {
  {&(_ZTV9S20657C11[7]),  7,55},
  {&(_tg__ZTV8S20657C5__A__9S20657C11[6]),  6,6},
  {&(_tg__ZTV8S20657C6__8S20657C5__A__9S20657C11[4]),  4,5},
  {&(_tg__ZTV8S20657C7__A1__8S20657C5__A__9S20657C11[3]),  3,4},
  {&(_tg__ZTV8S20657C8__8S20657C5__A__9S20657C11[4]),  4,5},
  {&(_tg__ZTV9S20657C10__9S20657C11[7]),  7,10},
  {&(_tg__ZTV8S20657C69S20657C10__A1__9S20657C11[3]),  3,4},
  {&(_tg__ZTV8S20657C89S20657C10__A1__9S20657C11[3]),  3,4},
  {&(_tg__ZTV8S20657C7__8S20657C89S20657C10__A1__9S20657C11[3]),  3,4},
  {&(_tg__ZTV8S20657C6__A__9S20657C10__9S20657C11[3]),  3,4},
  {&(_tg__ZTV8S20657C8__A__9S20657C10__9S20657C11[3]),  3,4},
  {&(_tg__ZTV8S20657C7__A2__9S20657C10__9S20657C11[3]),  3,4},
  {&(_tg__ZTV8S20657C5__9S20657C10__9S20657C11[6]),  6,6},
  {&(_tg__ZTV8S20657C6__A1__9S20657C10__9S20657C11[4]),  4,5},
  {&(_tg__ZTV8S20657C8__A1__9S20657C10__9S20657C11[4]),  4,5},
  {&(_tg__ZTV8S20657C6__A__9S20657C11[3]),  3,4},
  {&(_ZTV9S20657C11[39]),  39,55},
  {&(_ZTV9S20657C11[43]),  43,55},
  {&(_ZTV9S20657C11[48]),  48,55},
  {&(_ZTV9S20657C11[17]),  17,55},
  {&(_ZTV9S20657C11[23]),  23,55},
  {&(_ZTV9S20657C11[27]),  27,55},
  {&(_ZTV9S20657C11[55]),  55,55},
  {&(_ZTV9S20657C11[31]),  31,55},
  {&(_tg__ZTV8S20657C6__9S20657C11[3]),  3,4},
  {&(_tg__ZTV8S20657C8__9S20657C11[3]),  3,4},
  {&(_tg__ZTV8S20657C7__8S20657C8__9S20657C11[3]),  3,4},
  {&(_tg__ZTV8S20657C5__A1__9S20657C11[6]),  6,6},
  {&(_tg__ZTV8S20657C6__8S20657C5__A1__9S20657C11[4]),  4,5},
  {&(_tg__ZTV8S20657C7__A1__8S20657C5__A1__9S20657C11[3]),  3,4},
  {&(_tg__ZTV8S20657C8__8S20657C5__A1__9S20657C11[4]),  4,5},
};
extern VTBL_ENTRY _ZTI9S20657C11[];
extern  VTBL_ENTRY _ZTV9S20657C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20657C11[];
Class_Descriptor cd_S20657C11 = {  "S20657C11", // class name
  bases_S20657C11, 15,
  &(vtc_S20657C11[0]), // expected_vtbl_contents
  &(vtt_S20657C11[0]), // expected_vtt_contents
  ABISELECT(5568,3932), // object size
  NSPAIRA(_ZTI9S20657C11),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S20657C11),55, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20657C11),31, //virtual table table var
  14, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20657C4  : virtual S3490C4 , virtual S20657C5 , S20657C9 , S20657C11 {
  ::S601C21_nt s20657c4f0;
  ::S20657C9 s20657c4f1;
  __tsi64 s20657c4f2;
  ~S20657C4(); // tgen
  S20657C4(); // tgen
};
//SIG(-1 S20657C4) C1{ VBC2{ m FL Fi Fc} VBC3{ VBC2 VBC4{ BC5{ v1 FD Fi:3 Fc:8 FD[2] FL} VBC2 Fc[10] Fi FC6{ VBC5 v2 FC2 FL FC2[7] Fp FL FC2 Fp Fc Fs Fi FC5} FL} VBC5 VBC6 Fp} BC7{ BC8{ BC5 VBC2 BC4 BC6 VBC3 vd FC6 FC3 Fp Fi FC5 FC6} vd v3 v4 Fp Fs:6 FC5 FD Fi FC2 FC6 Fp Fi Fp[2]} BC9{ BC3 BC8 BC4 BC5 v5 FC4[2] FC5 Fi FC2 Fp[10] Fi[2] FL FD FL Fi} FC10{} FC7 FL}


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

static void Test_S20657C4()
{
  extern Class_Descriptor cd_S20657C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(818,2320)];
    init_test(&cd_S20657C4, buf);
    S20657C4 *dp, &lv = *(dp=new (buf) S20657C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(13072,9276), "sizeof(S20657C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20657C4)");
    check_base_class_offset(lv, (S3490C4*), ABISELECT(12136,8608), "S20657C4");
    /*is_ambiguous_... S20657C4::S20657C5 */ AMB_check_base_class_offset(lv, (S3490C4*)(S20657C5*), ABISELECT(12136,8608), "S20657C4");
    /*is_ambiguous_... S20657C4::S20657C6 */ AMB_check_base_class_offset(lv, (S3490C4*)(S20657C6*), ABISELECT(12136,8608), "S20657C4");
    check_base_class_offset(lv, (S3490C4*)(S20657C10*)(S20657C9*), ABISELECT(12136,8608), "S20657C4");
    /*is_ambiguous_... S20657C10::S20657C6 */ AMB_check_base_class_offset(lv, (S3490C4*)(S20657C6*)(S20657C10*)(S20657C9*), ABISELECT(12136,8608), "S20657C4");
    /*is_ambiguous_... S20657C11::S20657C5 */ AMB_check_base_class_offset(lv, (S3490C4*)(S20657C5*)(S20657C11*), ABISELECT(12136,8608), "S20657C4");
    check_base_class_offset(lv, (S3490C4*)(S20657C10*)(S20657C11*), ABISELECT(12136,8608), "S20657C4");
    /*is_ambiguous_... S20657C10::S20657C6 */ AMB_check_base_class_offset(lv, (S3490C4*)(S20657C6*)(S20657C10*)(S20657C11*), ABISELECT(12136,8608), "S20657C4");
    /*is_ambiguous_... S20657C11::S20657C6 */ AMB_check_base_class_offset(lv, (S3490C4*)(S20657C6*)(S20657C11*), ABISELECT(12136,8608), "S20657C4");
    /*is_ambiguous_... S20657C4::S20657C6 */ AMB_check_base_class_offset(lv, (S20657C7*)(S20657C6*), ABISELECT(12176,8632), "S20657C4");
    /*is_ambiguous_... S20657C4::S20657C5 */ AMB_check_base_class_offset(lv, (S20657C6*)(S20657C5*), ABISELECT(12176,8632), "S20657C4");
    /*is_ambiguous_... S20657C11::S20657C5 */ AMB_check_base_class_offset(lv, (S20657C6*)(S20657C5*)(S20657C11*), ABISELECT(12176,8632), "S20657C4");
    /*is_ambiguous_... S20657C4::S20657C5 */ AMB_check_base_class_offset(lv, (S20657C7*)(S20657C5*), ABISELECT(12688,8992), "S20657C4");
    /*is_ambiguous_... S20657C4::S20657C8 */ AMB_check_base_class_offset(lv, (S20657C7*)(S20657C8*), ABISELECT(12688,8992), "S20657C4");
    /*is_ambiguous_... S20657C10::S20657C8 */ AMB_check_base_class_offset(lv, (S20657C7*)(S20657C8*)(S20657C10*)(S20657C9*), ABISELECT(12688,8992), "S20657C4");
    /*is_ambiguous_... S20657C11::S20657C5 */ AMB_check_base_class_offset(lv, (S20657C7*)(S20657C5*)(S20657C11*), ABISELECT(12688,8992), "S20657C4");
    /*is_ambiguous_... S20657C10::S20657C8 */ AMB_check_base_class_offset(lv, (S20657C7*)(S20657C8*)(S20657C10*)(S20657C11*), ABISELECT(12688,8992), "S20657C4");
    /*is_ambiguous_... S20657C4::S20657C5 */ AMB_check_base_class_offset(lv, (S20657C8*)(S20657C5*), ABISELECT(12784,9044), "S20657C4");
    /*is_ambiguous_... S20657C11::S20657C5 */ AMB_check_base_class_offset(lv, (S20657C8*)(S20657C5*)(S20657C11*), ABISELECT(12784,9044), "S20657C4");
    /*is_ambiguous_... S20657C4::S20657C5 */ AMB_check_base_class_offset(lv, (S20657C5*), ABISELECT(12152,8624), "S20657C4");
    check_base_class_offset(lv, (S20657C5*)(S20657C10*)(S20657C9*), ABISELECT(12152,8624), "S20657C4");
    check_base_class_offset(lv, (S20657C5*)(S20657C10*)(S20657C11*), ABISELECT(12152,8624), "S20657C4");
    /*is_ambiguous_... S20657C10::S20657C7 */ AMB_check_base_class_offset(lv, (S20657C7*)(S20657C10*)(S20657C9*), 0, "S20657C4");
    /*is_ambiguous_... S20657C10::S20657C6 */ AMB_check_base_class_offset(lv, (S20657C7*)(S20657C6*)(S20657C10*)(S20657C9*), ABISELECT(96,52), "S20657C4");
    /*is_ambiguous_... S20657C10::S20657C6 */ AMB_check_base_class_offset(lv, (S20657C6*)(S20657C10*)(S20657C9*), ABISELECT(96,52), "S20657C4");
    /*is_ambiguous_... S20657C10::S20657C8 */ AMB_check_base_class_offset(lv, (S20657C8*)(S20657C10*)(S20657C9*), ABISELECT(608,412), "S20657C4");
    check_base_class_offset(lv, (S20657C10*)(S20657C9*), 0, "S20657C4");
    check_base_class_offset(lv, (S20657C9*), 0, "S20657C4");
    /*is_ambiguous_... S20657C11::S20657C5 */ AMB_check_base_class_offset(lv, (S20657C5*)(S20657C11*), ABISELECT(3280,2332), "S20657C4");
    /*is_ambiguous_... S20657C10::S20657C7 */ AMB_check_base_class_offset(lv, (S20657C7*)(S20657C10*)(S20657C11*), ABISELECT(3296,2340), "S20657C4");
    /*is_ambiguous_... S20657C10::S20657C6 */ AMB_check_base_class_offset(lv, (S20657C7*)(S20657C6*)(S20657C10*)(S20657C11*), ABISELECT(3392,2392), "S20657C4");
    /*is_ambiguous_... S20657C10::S20657C6 */ AMB_check_base_class_offset(lv, (S20657C6*)(S20657C10*)(S20657C11*), ABISELECT(3392,2392), "S20657C4");
    /*is_ambiguous_... S20657C10::S20657C8 */ AMB_check_base_class_offset(lv, (S20657C8*)(S20657C10*)(S20657C11*), ABISELECT(3904,2752), "S20657C4");
    check_base_class_offset(lv, (S20657C10*)(S20657C11*), ABISELECT(3296,2340), "S20657C4");
    /*is_ambiguous_... S20657C11::S20657C6 */ AMB_check_base_class_offset(lv, (S20657C7*)(S20657C6*)(S20657C11*), ABISELECT(6000,4280), "S20657C4");
    /*is_ambiguous_... S20657C11::S20657C6 */ AMB_check_base_class_offset(lv, (S20657C6*)(S20657C11*), ABISELECT(6000,4280), "S20657C4");
    /*is_ambiguous_... S20657C11::S20657C7 */ AMB_check_base_class_offset(lv, (S20657C7*)(S20657C11*), ABISELECT(6512,4640), "S20657C4");
    check_base_class_offset(lv, (S20657C11*), ABISELECT(3280,2332), "S20657C4");
    check_field_offset(lv, s20657c4f0, ABISELECT(7916,5596), "S20657C4.s20657c4f0");
    check_field_offset(lv, s20657c4f1, ABISELECT(7920,5600), "S20657C4.s20657c4f1");
    check_field_offset(lv, s20657c4f2, ABISELECT(12128,8600), "S20657C4.s20657c4f2");
    test_class_info(&lv, &cd_S20657C4);
    dp->~S20657C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20657C4(Test_S20657C4, "S20657C4", ABISELECT(13072,9276));

#else // __cplusplus

extern void _ZN8S20657C4C1Ev();
extern void _ZN8S20657C4D1Ev();
Name_Map name_map_S20657C4[] = {
  NSPAIR(_ZN8S20657C4C1Ev),
  NSPAIR(_ZN8S20657C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3490C4;
extern VTBL_ENTRY _ZTI7S3490C4[];
extern Class_Descriptor cd_S20657C7;
extern VTBL_ENTRY _ZTI8S20657C7[];
extern  VTBL_ENTRY _ZTV8S20657C7[];
extern Class_Descriptor cd_S20657C6;
extern VTBL_ENTRY _ZTI8S20657C6[];
extern  VTBL_ENTRY _ZTV8S20657C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20657C6[];
extern Class_Descriptor cd_S20657C7;
extern VTBL_ENTRY _ZTI8S20657C7[];
extern  VTBL_ENTRY _ZTV8S20657C7[];
extern Class_Descriptor cd_S20657C8;
extern VTBL_ENTRY _ZTI8S20657C8[];
extern  VTBL_ENTRY _ZTV8S20657C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20657C8[];
extern Class_Descriptor cd_S20657C5;
extern VTBL_ENTRY _ZTI8S20657C5[];
extern  VTBL_ENTRY _ZTV8S20657C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20657C5[];
extern Class_Descriptor cd_S20657C7;
extern VTBL_ENTRY _ZTI8S20657C7[];
extern  VTBL_ENTRY _ZTV8S20657C7[];
extern Class_Descriptor cd_S20657C7;
extern VTBL_ENTRY _ZTI8S20657C7[];
extern  VTBL_ENTRY _ZTV8S20657C7[];
extern Class_Descriptor cd_S20657C6;
extern VTBL_ENTRY _ZTI8S20657C6[];
extern  VTBL_ENTRY _ZTV8S20657C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20657C6[];
extern Class_Descriptor cd_S20657C8;
extern VTBL_ENTRY _ZTI8S20657C8[];
extern  VTBL_ENTRY _ZTV8S20657C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20657C8[];
extern Class_Descriptor cd_S20657C10;
extern VTBL_ENTRY _ZTI9S20657C10[];
extern  VTBL_ENTRY _ZTV9S20657C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20657C10[];
extern Class_Descriptor cd_S20657C9;
extern VTBL_ENTRY _ZTI8S20657C9[];
extern  VTBL_ENTRY _ZTV8S20657C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20657C9[];
extern Class_Descriptor cd_S20657C5;
extern VTBL_ENTRY _ZTI8S20657C5[];
extern  VTBL_ENTRY _ZTV8S20657C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20657C5[];
extern Class_Descriptor cd_S20657C7;
extern VTBL_ENTRY _ZTI8S20657C7[];
extern  VTBL_ENTRY _ZTV8S20657C7[];
extern Class_Descriptor cd_S20657C7;
extern VTBL_ENTRY _ZTI8S20657C7[];
extern  VTBL_ENTRY _ZTV8S20657C7[];
extern Class_Descriptor cd_S20657C6;
extern VTBL_ENTRY _ZTI8S20657C6[];
extern  VTBL_ENTRY _ZTV8S20657C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20657C6[];
extern Class_Descriptor cd_S20657C8;
extern VTBL_ENTRY _ZTI8S20657C8[];
extern  VTBL_ENTRY _ZTV8S20657C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20657C8[];
extern Class_Descriptor cd_S20657C10;
extern VTBL_ENTRY _ZTI9S20657C10[];
extern  VTBL_ENTRY _ZTV9S20657C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20657C10[];
extern Class_Descriptor cd_S20657C7;
extern VTBL_ENTRY _ZTI8S20657C7[];
extern  VTBL_ENTRY _ZTV8S20657C7[];
extern Class_Descriptor cd_S20657C6;
extern VTBL_ENTRY _ZTI8S20657C6[];
extern  VTBL_ENTRY _ZTV8S20657C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20657C6[];
extern Class_Descriptor cd_S20657C7;
extern VTBL_ENTRY _ZTI8S20657C7[];
extern  VTBL_ENTRY _ZTV8S20657C7[];
extern Class_Descriptor cd_S20657C11;
extern VTBL_ENTRY _ZTI9S20657C11[];
extern  VTBL_ENTRY _ZTV9S20657C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20657C11[];
static Base_Class bases_S20657C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3490C4,    ABISELECT(12136,8608), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S20657C7,    ABISELECT(12176,8632), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20657C6,    ABISELECT(12176,8632), //bcp->offset
    61, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    44, //bcp->index_in_construction_vtbl_array
    58, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20657C7,    ABISELECT(12688,8992), //bcp->offset
    66, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    45, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20657C8,    ABISELECT(12784,9044), //bcp->offset
    70, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    46, //bcp->index_in_construction_vtbl_array
    59, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20657C5,    ABISELECT(12152,8624), //bcp->offset
    55, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    43, //bcp->index_in_construction_vtbl_array
    54, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20657C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S20657C7,    ABISELECT(96,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20657C6,    ABISELECT(96,52), //bcp->offset
    12, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    47, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S20657C8,    ABISELECT(608,412), //bcp->offset
    16, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    48, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S20657C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S20657C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20657C5,    ABISELECT(3280,2332), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S20657C7,    ABISELECT(3296,2340), //bcp->offset
    -1, //bcp->virtual_function_table_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
    17, //immediately_derived
  0, 0},
  {&cd_S20657C7,    ABISELECT(3392,2392), //bcp->offset
    -1, //bcp->virtual_function_table_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
    15, //immediately_derived
  0, 0},
  {&cd_S20657C6,    ABISELECT(3392,2392), //bcp->offset
    40, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    51, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S20657C8,    ABISELECT(3904,2752), //bcp->offset
    44, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    52, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S20657C10,    ABISELECT(3296,2340), //bcp->offset
    30, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    50, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S20657C7,    ABISELECT(6000,4280), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S20657C6,    ABISELECT(6000,4280), //bcp->offset
    48, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    53, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S20657C7,    ABISELECT(6512,4640), //bcp->offset
    52, //bcp->virtual_function_table_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
    21, //immediately_derived
  0, 0},
  {&cd_S20657C11,    ABISELECT(3280,2332), //bcp->offset
    20, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    49, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20657C4[];
extern void _ZN8S20657C72v1Ev();
extern void _ZN8S20657C4D1Ev();
extern void _ZN8S20657C4D0Ev();
extern void _ZN8S20657C92v3Ev();
extern void _ZN8S20657C92v4Ev();
extern void _ZN8S20657C72v1Ev();
extern void _ZN8S20657C82v2Ev();
extern void _ZN9S20657C112v5Ev();
extern void ABISELECT(_ZThn3280_N8S20657C4D1Ev,_ZThn2332_N8S20657C4D1Ev)();
extern void ABISELECT(_ZThn3280_N8S20657C4D0Ev,_ZThn2332_N8S20657C4D0Ev)();
extern void _ZN8S20657C72v1Ev();
extern void ABISELECT(_ZThn3296_N8S20657C4D1Ev,_ZThn2340_N8S20657C4D1Ev)();
extern void ABISELECT(_ZThn3296_N8S20657C4D0Ev,_ZThn2340_N8S20657C4D0Ev)();
extern void _ZN8S20657C72v1Ev();
extern void _ZN8S20657C82v2Ev();
extern void _ZN8S20657C72v1Ev();
extern void _ZN8S20657C72v1Ev();
extern void _ZN8S20657C72v1Ev();
extern void _ZN8S20657C72v1Ev();
extern void _ZN8S20657C82v2Ev();
static  VTBL_ENTRY vtc_S20657C4[] = {
  ABISELECT(12784,9044),
  ABISELECT(12176,8632),
  ABISELECT(12152,8624),
  ABISELECT(12688,8992),
  ABISELECT(12136,8608),
  0,
  (VTBL_ENTRY)&(_ZTI8S20657C4[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
  (VTBL_ENTRY)&_ZN8S20657C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20657C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20657C92v3Ev,
  (VTBL_ENTRY)&_ZN8S20657C92v4Ev,
  ABISELECT(12040,8556),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI8S20657C4[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
  ABISELECT(12080,8580),
  ABISELECT(-608,-412),
  (VTBL_ENTRY)&(_ZTI8S20657C4[0]),
  (VTBL_ENTRY)&_ZN8S20657C82v2Ev,
  ABISELECT(8872,6292),
  ABISELECT(9504,6712),
  ABISELECT(9408,6660),
  ABISELECT(8896,6300),
  ABISELECT(8856,6276),
  ABISELECT(-3280,-2332),
  (VTBL_ENTRY)&(_ZTI8S20657C4[0]),
  (VTBL_ENTRY)&_ZN9S20657C112v5Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn3280_N8S20657C4D1Ev,_ZThn2332_N8S20657C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn3280_N8S20657C4D0Ev,_ZThn2332_N8S20657C4D0Ev),
  ABISELECT(9488,6704),
  ABISELECT(8880,6292),
  ABISELECT(8856,6284),
  ABISELECT(9392,6652),
  ABISELECT(8840,6268),
  ABISELECT(-3296,-2340),
  (VTBL_ENTRY)&(_ZTI8S20657C4[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn3296_N8S20657C4D1Ev,_ZThn2340_N8S20657C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn3296_N8S20657C4D0Ev,_ZThn2340_N8S20657C4D0Ev),
  ABISELECT(8744,6216),
  ABISELECT(-3392,-2392),
  (VTBL_ENTRY)&(_ZTI8S20657C4[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
  ABISELECT(8784,6240),
  ABISELECT(-3904,-2752),
  (VTBL_ENTRY)&(_ZTI8S20657C4[0]),
  (VTBL_ENTRY)&_ZN8S20657C82v2Ev,
  ABISELECT(6136,4328),
  ABISELECT(-6000,-4280),
  (VTBL_ENTRY)&(_ZTI8S20657C4[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
  ABISELECT(-6512,-4640),
  (VTBL_ENTRY)&(_ZTI8S20657C4[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
  ABISELECT(632,420),
  ABISELECT(536,368),
  ABISELECT(24,8),
  -16,
  ABISELECT(-12152,-8624),
  (VTBL_ENTRY)&(_ZTI8S20657C4[0]),
  0,
  ABISELECT(-40,-24),
  ABISELECT(-12176,-8632),
  (VTBL_ENTRY)&(_ZTI8S20657C4[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
  0,
  ABISELECT(-12688,-8992),
  (VTBL_ENTRY)&(_ZTI8S20657C4[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
  0,
  ABISELECT(-96,-52),
  ABISELECT(-12784,-9044),
  (VTBL_ENTRY)&(_ZTI8S20657C4[0]),
  (VTBL_ENTRY)&_ZN8S20657C82v2Ev,
};
extern VTBL_ENTRY _ZTV8S20657C4[];
extern void _ZN8S20657C72v1Ev();
extern void _ZN8S20657C9D1Ev();
extern void _ZN8S20657C9D0Ev();
extern void _ZN8S20657C92v3Ev();
extern void _ZN8S20657C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C9__8S20657C4[] = {
  ABISELECT(12784,9044),
  ABISELECT(12176,8632),
  ABISELECT(12152,8624),
  ABISELECT(12688,8992),
  ABISELECT(12136,8608),
  0,
  (VTBL_ENTRY)&(_ZTI8S20657C9[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
  (VTBL_ENTRY)&_ZN8S20657C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20657C9D0Ev,
  (VTBL_ENTRY)&_ZN8S20657C92v3Ev,
  (VTBL_ENTRY)&_ZN8S20657C92v4Ev,
};
extern void _ZN8S20657C72v1Ev();
extern void _ZN9S20657C10D1Ev();
extern void _ZN9S20657C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20657C108S20657C9__8S20657C4[] = {
  ABISELECT(12784,9044),
  ABISELECT(12176,8632),
  ABISELECT(12152,8624),
  ABISELECT(12688,8992),
  ABISELECT(12136,8608),
  0,
  (VTBL_ENTRY)&(_ZTI9S20657C10[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
  (VTBL_ENTRY)&_ZN9S20657C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20657C10D0Ev,
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C69S20657C108S20657C9__A1__8S20657C4[] = {
  ABISELECT(12040,8556),
  0,
  (VTBL_ENTRY)&(_ZTI8S20657C6[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C89S20657C108S20657C9__A1__8S20657C4[] = {
  ABISELECT(12080,8580),
  0,
  (VTBL_ENTRY)&(_ZTI8S20657C8[0]),
  (VTBL_ENTRY)&_ZN8S20657C82v2Ev,
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C7__8S20657C89S20657C108S20657C9__A1__8S20657C4[] = {
  0,
  ABISELECT(-12080,-8580),
  (VTBL_ENTRY)&(_ZTI8S20657C8[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C6__A__9S20657C108S20657C9__8S20657C4[] = {
  ABISELECT(12040,8556),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI9S20657C10[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C8__A__9S20657C108S20657C9__8S20657C4[] = {
  ABISELECT(12080,8580),
  ABISELECT(-608,-412),
  (VTBL_ENTRY)&(_ZTI9S20657C10[0]),
  (VTBL_ENTRY)&_ZN8S20657C82v2Ev,
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C7__A2__9S20657C108S20657C9__8S20657C4[] = {
  0,
  ABISELECT(-12688,-8992),
  (VTBL_ENTRY)&(_ZTI9S20657C10[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20657C5__9S20657C108S20657C9__8S20657C4[] = {
  ABISELECT(632,420),
  ABISELECT(536,368),
  ABISELECT(24,8),
  -16,
  ABISELECT(-12152,-8624),
  (VTBL_ENTRY)&(_ZTI9S20657C10[0]),
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C6__A1__9S20657C108S20657C9__8S20657C4[] = {
  0,
  ABISELECT(-40,-24),
  ABISELECT(-12176,-8632),
  (VTBL_ENTRY)&(_ZTI9S20657C10[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C8__A1__9S20657C108S20657C9__8S20657C4[] = {
  0,
  ABISELECT(-96,-52),
  ABISELECT(-12784,-9044),
  (VTBL_ENTRY)&(_ZTI9S20657C10[0]),
  (VTBL_ENTRY)&_ZN8S20657C82v2Ev,
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C69S20657C10__8S20657C9__8S20657C4[] = {
  ABISELECT(12040,8556),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI8S20657C9[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C89S20657C10__8S20657C9__8S20657C4[] = {
  ABISELECT(12080,8580),
  ABISELECT(-608,-412),
  (VTBL_ENTRY)&(_ZTI8S20657C9[0]),
  (VTBL_ENTRY)&_ZN8S20657C82v2Ev,
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C7__A2__8S20657C9__8S20657C4[] = {
  0,
  ABISELECT(-12688,-8992),
  (VTBL_ENTRY)&(_ZTI8S20657C9[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20657C5__8S20657C9__8S20657C4[] = {
  ABISELECT(632,420),
  ABISELECT(536,368),
  ABISELECT(24,8),
  -16,
  ABISELECT(-12152,-8624),
  (VTBL_ENTRY)&(_ZTI8S20657C9[0]),
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C6__A1__8S20657C9__8S20657C4[] = {
  0,
  ABISELECT(-40,-24),
  ABISELECT(-12176,-8632),
  (VTBL_ENTRY)&(_ZTI8S20657C9[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C8__A1__8S20657C9__8S20657C4[] = {
  0,
  ABISELECT(-96,-52),
  ABISELECT(-12784,-9044),
  (VTBL_ENTRY)&(_ZTI8S20657C9[0]),
  (VTBL_ENTRY)&_ZN8S20657C82v2Ev,
};
extern void _ZN9S20657C112v5Ev();
extern void _ZN9S20657C11D1Ev();
extern void _ZN9S20657C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20657C11__8S20657C4[] = {
  ABISELECT(8872,6292),
  ABISELECT(9504,6712),
  ABISELECT(9408,6660),
  ABISELECT(8896,6300),
  ABISELECT(8856,6276),
  0,
  (VTBL_ENTRY)&(_ZTI9S20657C11[0]),
  (VTBL_ENTRY)&_ZN9S20657C112v5Ev,
  (VTBL_ENTRY)&_ZN9S20657C11D1Ev,
  (VTBL_ENTRY)&_ZN9S20657C11D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20657C59S20657C11__A1__8S20657C4[] = {
  ABISELECT(9504,6712),
  ABISELECT(9408,6660),
  ABISELECT(8896,6300),
  ABISELECT(8856,6276),
  0,
  (VTBL_ENTRY)&(_ZTI8S20657C5[0]),
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C6__8S20657C59S20657C11__A1__8S20657C4[] = {
  0,
  ABISELECT(-40,-24),
  ABISELECT(-8896,-6300),
  (VTBL_ENTRY)&(_ZTI8S20657C5[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C7__A1__8S20657C59S20657C11__A1__8S20657C4[] = {
  0,
  ABISELECT(-9408,-6660),
  (VTBL_ENTRY)&(_ZTI8S20657C5[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C8__8S20657C59S20657C11__A1__8S20657C4[] = {
  0,
  ABISELECT(-96,-52),
  ABISELECT(-9504,-6712),
  (VTBL_ENTRY)&(_ZTI8S20657C5[0]),
  (VTBL_ENTRY)&_ZN8S20657C82v2Ev,
};
extern void _ZN8S20657C72v1Ev();
extern void _ZN9S20657C10D1Ev();
extern void _ZN9S20657C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20657C109S20657C11__A1__8S20657C4[] = {
  ABISELECT(9488,6704),
  ABISELECT(8880,6292),
  ABISELECT(8856,6284),
  ABISELECT(9392,6652),
  ABISELECT(8840,6268),
  0,
  (VTBL_ENTRY)&(_ZTI9S20657C10[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
  (VTBL_ENTRY)&_ZN9S20657C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20657C10D0Ev,
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C69S20657C109S20657C11__A2__8S20657C4[] = {
  ABISELECT(8744,6216),
  0,
  (VTBL_ENTRY)&(_ZTI8S20657C6[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C89S20657C109S20657C11__A2__8S20657C4[] = {
  ABISELECT(8784,6240),
  0,
  (VTBL_ENTRY)&(_ZTI8S20657C8[0]),
  (VTBL_ENTRY)&_ZN8S20657C82v2Ev,
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C7__8S20657C89S20657C109S20657C11__A2__8S20657C4[] = {
  0,
  ABISELECT(-8784,-6240),
  (VTBL_ENTRY)&(_ZTI8S20657C8[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C6__A__9S20657C109S20657C11__A1__8S20657C4[] = {
  ABISELECT(8744,6216),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI9S20657C10[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C8__A__9S20657C109S20657C11__A1__8S20657C4[] = {
  ABISELECT(8784,6240),
  ABISELECT(-608,-412),
  (VTBL_ENTRY)&(_ZTI9S20657C10[0]),
  (VTBL_ENTRY)&_ZN8S20657C82v2Ev,
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C7__A2__9S20657C109S20657C11__A1__8S20657C4[] = {
  0,
  ABISELECT(-9392,-6652),
  (VTBL_ENTRY)&(_ZTI9S20657C10[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20657C5__9S20657C109S20657C11__A1__8S20657C4[] = {
  ABISELECT(632,420),
  ABISELECT(536,368),
  ABISELECT(24,8),
  -16,
  ABISELECT(-8856,-6284),
  (VTBL_ENTRY)&(_ZTI9S20657C10[0]),
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C6__A1__9S20657C109S20657C11__A1__8S20657C4[] = {
  0,
  ABISELECT(-40,-24),
  ABISELECT(-8880,-6292),
  (VTBL_ENTRY)&(_ZTI9S20657C10[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C8__A1__9S20657C109S20657C11__A1__8S20657C4[] = {
  0,
  ABISELECT(-96,-52),
  ABISELECT(-9488,-6704),
  (VTBL_ENTRY)&(_ZTI9S20657C10[0]),
  (VTBL_ENTRY)&_ZN8S20657C82v2Ev,
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C69S20657C11__A3__8S20657C4[] = {
  ABISELECT(6136,4328),
  0,
  (VTBL_ENTRY)&(_ZTI8S20657C6[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C6__9S20657C11__8S20657C4[] = {
  0,
  ABISELECT(-40,-24),
  ABISELECT(-8896,-6300),
  (VTBL_ENTRY)&(_ZTI9S20657C11[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C7__A1__9S20657C11__8S20657C4[] = {
  0,
  ABISELECT(-9408,-6660),
  (VTBL_ENTRY)&(_ZTI9S20657C11[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C8__9S20657C11__8S20657C4[] = {
  0,
  ABISELECT(-96,-52),
  ABISELECT(-9504,-6712),
  (VTBL_ENTRY)&(_ZTI9S20657C11[0]),
  (VTBL_ENTRY)&_ZN8S20657C82v2Ev,
};
extern void _ZN8S20657C72v1Ev();
extern void ABISELECT(_ZThn16_N9S20657C11D1Ev,_ZThn8_N9S20657C11D1Ev)();
extern void ABISELECT(_ZThn16_N9S20657C11D0Ev,_ZThn8_N9S20657C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20657C10__9S20657C11__8S20657C4[] = {
  ABISELECT(9488,6704),
  ABISELECT(8880,6292),
  ABISELECT(8856,6284),
  ABISELECT(9392,6652),
  ABISELECT(8840,6268),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20657C11[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S20657C11D1Ev,_ZThn8_N9S20657C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S20657C11D0Ev,_ZThn8_N9S20657C11D0Ev),
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C69S20657C10__A1__9S20657C11__8S20657C4[] = {
  ABISELECT(8744,6216),
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI9S20657C11[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C89S20657C10__A1__9S20657C11__8S20657C4[] = {
  ABISELECT(8784,6240),
  ABISELECT(-624,-420),
  (VTBL_ENTRY)&(_ZTI9S20657C11[0]),
  (VTBL_ENTRY)&_ZN8S20657C82v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20657C5__A1__9S20657C11__8S20657C4[] = {
  ABISELECT(632,420),
  ABISELECT(536,368),
  ABISELECT(24,8),
  -16,
  ABISELECT(-8872,-6292),
  (VTBL_ENTRY)&(_ZTI9S20657C11[0]),
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C6__A__9S20657C11__8S20657C4[] = {
  ABISELECT(6136,4328),
  ABISELECT(-2720,-1948),
  (VTBL_ENTRY)&(_ZTI9S20657C11[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20657C5__8S20657C4[] = {
  ABISELECT(632,420),
  ABISELECT(536,368),
  ABISELECT(24,8),
  -16,
  0,
  (VTBL_ENTRY)&(_ZTI8S20657C5[0]),
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C6__8S20657C5__8S20657C4[] = {
  0,
  ABISELECT(-40,-24),
  ABISELECT(-24,-8),
  (VTBL_ENTRY)&(_ZTI8S20657C5[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C7__A1__8S20657C5__8S20657C4[] = {
  0,
  ABISELECT(-536,-368),
  (VTBL_ENTRY)&(_ZTI8S20657C5[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C8__8S20657C5__8S20657C4[] = {
  0,
  ABISELECT(-96,-52),
  ABISELECT(-632,-420),
  (VTBL_ENTRY)&(_ZTI8S20657C5[0]),
  (VTBL_ENTRY)&_ZN8S20657C82v2Ev,
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C6__8S20657C4[] = {
  ABISELECT(-40,-24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20657C6[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C8__8S20657C4[] = {
  ABISELECT(-96,-52),
  0,
  (VTBL_ENTRY)&(_ZTI8S20657C8[0]),
  (VTBL_ENTRY)&_ZN8S20657C82v2Ev,
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C7__8S20657C8__8S20657C4[] = {
  0,
  ABISELECT(96,52),
  (VTBL_ENTRY)&(_ZTI8S20657C8[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
static  VTT_ENTRY vtt_S20657C4[] = {
  {&(_ZTV8S20657C4[7]),  7,75},
  {&(_tg__ZTV8S20657C9__8S20657C4[7]),  7,12},
  {&(_tg__ZTV9S20657C108S20657C9__8S20657C4[7]),  7,10},
  {&(_tg__ZTV8S20657C69S20657C108S20657C9__A1__8S20657C4[3]),  3,4},
  {&(_tg__ZTV8S20657C89S20657C108S20657C9__A1__8S20657C4[3]),  3,4},
  {&(_tg__ZTV8S20657C7__8S20657C89S20657C108S20657C9__A1__8S20657C4[3]),  3,4},
  {&(_tg__ZTV8S20657C6__A__9S20657C108S20657C9__8S20657C4[3]),  3,4},
  {&(_tg__ZTV8S20657C8__A__9S20657C108S20657C9__8S20657C4[3]),  3,4},
  {&(_tg__ZTV8S20657C7__A2__9S20657C108S20657C9__8S20657C4[3]),  3,4},
  {&(_tg__ZTV8S20657C5__9S20657C108S20657C9__8S20657C4[6]),  6,6},
  {&(_tg__ZTV8S20657C6__A1__9S20657C108S20657C9__8S20657C4[4]),  4,5},
  {&(_tg__ZTV8S20657C8__A1__9S20657C108S20657C9__8S20657C4[4]),  4,5},
  {&(_tg__ZTV8S20657C69S20657C10__8S20657C9__8S20657C4[3]),  3,4},
  {&(_tg__ZTV8S20657C89S20657C10__8S20657C9__8S20657C4[3]),  3,4},
  {&(_tg__ZTV8S20657C7__A2__8S20657C9__8S20657C4[3]),  3,4},
  {&(_tg__ZTV8S20657C5__8S20657C9__8S20657C4[6]),  6,6},
  {&(_tg__ZTV8S20657C6__A1__8S20657C9__8S20657C4[4]),  4,5},
  {&(_tg__ZTV8S20657C8__A1__8S20657C9__8S20657C4[4]),  4,5},
  {&(_tg__ZTV9S20657C11__8S20657C4[7]),  7,10},
  {&(_tg__ZTV8S20657C59S20657C11__A1__8S20657C4[6]),  6,6},
  {&(_tg__ZTV8S20657C6__8S20657C59S20657C11__A1__8S20657C4[4]),  4,5},
  {&(_tg__ZTV8S20657C7__A1__8S20657C59S20657C11__A1__8S20657C4[3]),  3,4},
  {&(_tg__ZTV8S20657C8__8S20657C59S20657C11__A1__8S20657C4[4]),  4,5},
  {&(_tg__ZTV9S20657C109S20657C11__A1__8S20657C4[7]),  7,10},
  {&(_tg__ZTV8S20657C69S20657C109S20657C11__A2__8S20657C4[3]),  3,4},
  {&(_tg__ZTV8S20657C89S20657C109S20657C11__A2__8S20657C4[3]),  3,4},
  {&(_tg__ZTV8S20657C7__8S20657C89S20657C109S20657C11__A2__8S20657C4[3]),  3,4},
  {&(_tg__ZTV8S20657C6__A__9S20657C109S20657C11__A1__8S20657C4[3]),  3,4},
  {&(_tg__ZTV8S20657C8__A__9S20657C109S20657C11__A1__8S20657C4[3]),  3,4},
  {&(_tg__ZTV8S20657C7__A2__9S20657C109S20657C11__A1__8S20657C4[3]),  3,4},
  {&(_tg__ZTV8S20657C5__9S20657C109S20657C11__A1__8S20657C4[6]),  6,6},
  {&(_tg__ZTV8S20657C6__A1__9S20657C109S20657C11__A1__8S20657C4[4]),  4,5},
  {&(_tg__ZTV8S20657C8__A1__9S20657C109S20657C11__A1__8S20657C4[4]),  4,5},
  {&(_tg__ZTV8S20657C69S20657C11__A3__8S20657C4[3]),  3,4},
  {&(_tg__ZTV8S20657C6__9S20657C11__8S20657C4[4]),  4,5},
  {&(_tg__ZTV8S20657C7__A1__9S20657C11__8S20657C4[3]),  3,4},
  {&(_tg__ZTV8S20657C8__9S20657C11__8S20657C4[4]),  4,5},
  {&(_tg__ZTV9S20657C10__9S20657C11__8S20657C4[7]),  7,10},
  {&(_tg__ZTV8S20657C69S20657C10__A1__9S20657C11__8S20657C4[3]),  3,4},
  {&(_tg__ZTV8S20657C89S20657C10__A1__9S20657C11__8S20657C4[3]),  3,4},
  {&(_tg__ZTV8S20657C5__A1__9S20657C11__8S20657C4[6]),  6,6},
  {&(_tg__ZTV8S20657C6__A__9S20657C11__8S20657C4[3]),  3,4},
  {&(_ZTV8S20657C4[61]),  61,75},
  {&(_ZTV8S20657C4[65]),  65,75},
  {&(_ZTV8S20657C4[69]),  69,75},
  {&(_ZTV8S20657C4[74]),  74,75},
  {&(_ZTV8S20657C4[15]),  15,75},
  {&(_ZTV8S20657C4[19]),  19,75},
  {&(_ZTV8S20657C4[27]),  27,75},
  {&(_ZTV8S20657C4[37]),  37,75},
  {&(_ZTV8S20657C4[43]),  43,75},
  {&(_ZTV8S20657C4[47]),  47,75},
  {&(_ZTV8S20657C4[51]),  51,75},
  {&(_tg__ZTV8S20657C5__8S20657C4[6]),  6,6},
  {&(_tg__ZTV8S20657C6__8S20657C5__8S20657C4[4]),  4,5},
  {&(_tg__ZTV8S20657C7__A1__8S20657C5__8S20657C4[3]),  3,4},
  {&(_tg__ZTV8S20657C8__8S20657C5__8S20657C4[4]),  4,5},
  {&(_tg__ZTV8S20657C6__8S20657C4[3]),  3,4},
  {&(_tg__ZTV8S20657C8__8S20657C4[3]),  3,4},
  {&(_tg__ZTV8S20657C7__8S20657C8__8S20657C4[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S20657C4[];
extern  VTBL_ENTRY _ZTV8S20657C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20657C4[];
Class_Descriptor cd_S20657C4 = {  "S20657C4", // class name
  bases_S20657C4, 22,
  &(vtc_S20657C4[0]), // expected_vtbl_contents
  &(vtt_S20657C4[0]), // expected_vtt_contents
  ABISELECT(13072,9276), // object size
  NSPAIRA(_ZTI8S20657C4),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S20657C4),75, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20657C4),60, //virtual table table var
  21, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20657C14  : S20657C5 , S20657C11 {
  void *s20657c14f0[2];
  int s20657c14f1;
  char s20657c14f2;
  ::S20657C6 s20657c14f3;
  ::S20657C11 s20657c14f4;
  long double s20657c14f5;
  virtual  ~S20657C14(); // _ZN9S20657C14D2Ev
  virtual void  v7(); // _ZN9S20657C142v7Ev
  virtual void  v8(); // _ZN9S20657C142v8Ev
  S20657C14(); // tgen
};
//SIG(-1 S20657C14) C1{ BC2{ VBC3{ m FL Fi Fc} VBC4{ BC5{ v3 FD Fi:3 Fc:8 FD[2] FL} VBC3 Fc[10] Fi FC6{ VBC5 v4 FC3 FL FC3[7] Fp FL FC3 Fp Fc Fs Fi FC5} FL} VBC5 VBC6 Fp} BC7{ BC2 BC8{ BC5 VBC3 BC4 BC6 VBC2 vd FC6 FC2 Fp Fi FC5 FC6} BC4 BC5 v5 FC4[2] FC5 Fi FC3 Fp[10] Fi[2] FL FD FL Fi} vd v1 v2 Fp[2] Fi Fc FC4 FC7 FD}


 S20657C14 ::~S20657C14(){ note_dtor("S20657C14", this);}
void  S20657C14 ::v7(){vfunc_called(this, "_ZN9S20657C142v7Ev");}
void  S20657C14 ::v8(){vfunc_called(this, "_ZN9S20657C142v8Ev");}
S20657C14 ::S20657C14(){ note_ctor("S20657C14", this);} // tgen

static void Test_S20657C14()
{
  extern Class_Descriptor cd_S20657C14;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(734,2070)];
    init_test(&cd_S20657C14, buf);
    S20657C14 *dp, &lv = *(dp=new (buf) S20657C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(11728,8276), "sizeof(S20657C14)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20657C14)");
    /*is_ambiguous_... S20657C14::S20657C5 */ AMB_check_base_class_offset(lv, (S3490C4*)(S20657C5*), ABISELECT(10800,7608), "S20657C14");
    /*is_ambiguous_... S20657C14::S20657C6 */ AMB_check_base_class_offset(lv, (S3490C4*)(S20657C6*), ABISELECT(10800,7608), "S20657C14");
    /*is_ambiguous_... S20657C11::S20657C5 */ AMB_check_base_class_offset(lv, (S3490C4*)(S20657C5*)(S20657C11*), ABISELECT(10800,7608), "S20657C14");
    check_base_class_offset(lv, (S3490C4*)(S20657C10*)(S20657C11*), ABISELECT(10800,7608), "S20657C14");
    /*is_ambiguous_... S20657C10::S20657C6 */ AMB_check_base_class_offset(lv, (S3490C4*)(S20657C6*)(S20657C10*)(S20657C11*), ABISELECT(10800,7608), "S20657C14");
    /*is_ambiguous_... S20657C14::S20657C5 */ AMB_check_base_class_offset(lv, (S3490C4*)(S20657C5*), ABISELECT(10800,7608), "S20657C14");
    /*is_ambiguous_... S20657C11::S20657C6 */ AMB_check_base_class_offset(lv, (S3490C4*)(S20657C6*)(S20657C11*), ABISELECT(10800,7608), "S20657C14");
    /*is_ambiguous_... S20657C14::S20657C6 */ AMB_check_base_class_offset(lv, (S20657C7*)(S20657C6*), ABISELECT(10816,7624), "S20657C14");
    /*is_ambiguous_... S20657C14::S20657C5 */ AMB_check_base_class_offset(lv, (S20657C6*)(S20657C5*), ABISELECT(10816,7624), "S20657C14");
    /*is_ambiguous_... S20657C11::S20657C5 */ AMB_check_base_class_offset(lv, (S20657C6*)(S20657C5*)(S20657C11*), ABISELECT(10816,7624), "S20657C14");
    /*is_ambiguous_... S20657C14::S20657C5 */ AMB_check_base_class_offset(lv, (S20657C6*)(S20657C5*), ABISELECT(10816,7624), "S20657C14");
    /*is_ambiguous_... S20657C14::S20657C5 */ AMB_check_base_class_offset(lv, (S20657C7*)(S20657C5*), ABISELECT(11328,7984), "S20657C14");
    /*is_ambiguous_... S20657C14::S20657C8 */ AMB_check_base_class_offset(lv, (S20657C7*)(S20657C8*), ABISELECT(11328,7984), "S20657C14");
    /*is_ambiguous_... S20657C11::S20657C5 */ AMB_check_base_class_offset(lv, (S20657C7*)(S20657C5*)(S20657C11*), ABISELECT(11328,7984), "S20657C14");
    /*is_ambiguous_... S20657C10::S20657C8 */ AMB_check_base_class_offset(lv, (S20657C7*)(S20657C8*)(S20657C10*)(S20657C11*), ABISELECT(11328,7984), "S20657C14");
    /*is_ambiguous_... S20657C14::S20657C5 */ AMB_check_base_class_offset(lv, (S20657C7*)(S20657C5*), ABISELECT(11328,7984), "S20657C14");
    /*is_ambiguous_... S20657C14::S20657C5 */ AMB_check_base_class_offset(lv, (S20657C8*)(S20657C5*), ABISELECT(11424,8036), "S20657C14");
    /*is_ambiguous_... S20657C11::S20657C5 */ AMB_check_base_class_offset(lv, (S20657C8*)(S20657C5*)(S20657C11*), ABISELECT(11424,8036), "S20657C14");
    /*is_ambiguous_... S20657C14::S20657C5 */ AMB_check_base_class_offset(lv, (S20657C8*)(S20657C5*), ABISELECT(11424,8036), "S20657C14");
    /*is_ambiguous_... S20657C14::S20657C5 */ AMB_check_base_class_offset(lv, (S20657C5*), 0, "S20657C14");
    /*is_ambiguous_... S20657C11::S20657C5 */ AMB_check_base_class_offset(lv, (S20657C5*)(S20657C11*), ABISELECT(16,8), "S20657C14");
    /*is_ambiguous_... S20657C10::S20657C7 */ AMB_check_base_class_offset(lv, (S20657C7*)(S20657C10*)(S20657C11*), ABISELECT(32,16), "S20657C14");
    /*is_ambiguous_... S20657C10::S20657C6 */ AMB_check_base_class_offset(lv, (S20657C7*)(S20657C6*)(S20657C10*)(S20657C11*), ABISELECT(128,68), "S20657C14");
    /*is_ambiguous_... S20657C10::S20657C6 */ AMB_check_base_class_offset(lv, (S20657C6*)(S20657C10*)(S20657C11*), ABISELECT(128,68), "S20657C14");
    /*is_ambiguous_... S20657C10::S20657C8 */ AMB_check_base_class_offset(lv, (S20657C8*)(S20657C10*)(S20657C11*), ABISELECT(640,428), "S20657C14");
    check_base_class_offset(lv, (S20657C5*)(S20657C10*)(S20657C11*), ABISELECT(11712,8268), "S20657C14");
    check_base_class_offset(lv, (S20657C10*)(S20657C11*), ABISELECT(32,16), "S20657C14");
    /*is_ambiguous_... S20657C11::S20657C6 */ AMB_check_base_class_offset(lv, (S20657C7*)(S20657C6*)(S20657C11*), ABISELECT(2736,1956), "S20657C14");
    /*is_ambiguous_... S20657C11::S20657C6 */ AMB_check_base_class_offset(lv, (S20657C6*)(S20657C11*), ABISELECT(2736,1956), "S20657C14");
    /*is_ambiguous_... S20657C11::S20657C7 */ AMB_check_base_class_offset(lv, (S20657C7*)(S20657C11*), ABISELECT(3248,2316), "S20657C14");
    check_base_class_offset(lv, (S20657C11*), ABISELECT(16,8), "S20657C14");
    check_field_offset(lv, s20657c14f0, ABISELECT(4656,3272), "S20657C14.s20657c14f0");
    check_field_offset(lv, s20657c14f1, ABISELECT(4672,3280), "S20657C14.s20657c14f1");
    check_field_offset(lv, s20657c14f2, ABISELECT(4676,3284), "S20657C14.s20657c14f2");
    check_field_offset(lv, s20657c14f3, ABISELECT(4688,3288), "S20657C14.s20657c14f3");
    check_field_offset(lv, s20657c14f4, ABISELECT(5216,3664), "S20657C14.s20657c14f4");
    check_field_offset(lv, s20657c14f5, ABISELECT(10784,7596), "S20657C14.s20657c14f5");
    test_class_info(&lv, &cd_S20657C14);
    dp->~S20657C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20657C14(Test_S20657C14, "S20657C14", ABISELECT(11728,8276));

#else // __cplusplus

extern void _ZN9S20657C14C1Ev();
extern void _ZN9S20657C14D2Ev();
Name_Map name_map_S20657C14[] = {
  NSPAIR(_ZN9S20657C14C1Ev),
  NSPAIR(_ZN9S20657C14D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3490C4;
extern VTBL_ENTRY _ZTI7S3490C4[];
extern Class_Descriptor cd_S20657C7;
extern VTBL_ENTRY _ZTI8S20657C7[];
extern  VTBL_ENTRY _ZTV8S20657C7[];
extern Class_Descriptor cd_S20657C6;
extern VTBL_ENTRY _ZTI8S20657C6[];
extern  VTBL_ENTRY _ZTV8S20657C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20657C6[];
extern Class_Descriptor cd_S20657C7;
extern VTBL_ENTRY _ZTI8S20657C7[];
extern  VTBL_ENTRY _ZTV8S20657C7[];
extern Class_Descriptor cd_S20657C8;
extern VTBL_ENTRY _ZTI8S20657C8[];
extern  VTBL_ENTRY _ZTV8S20657C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20657C8[];
extern Class_Descriptor cd_S20657C5;
extern VTBL_ENTRY _ZTI8S20657C5[];
extern  VTBL_ENTRY _ZTV8S20657C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20657C5[];
extern Class_Descriptor cd_S20657C5;
extern VTBL_ENTRY _ZTI8S20657C5[];
extern  VTBL_ENTRY _ZTV8S20657C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20657C5[];
extern Class_Descriptor cd_S20657C7;
extern VTBL_ENTRY _ZTI8S20657C7[];
extern  VTBL_ENTRY _ZTV8S20657C7[];
extern Class_Descriptor cd_S20657C7;
extern VTBL_ENTRY _ZTI8S20657C7[];
extern  VTBL_ENTRY _ZTV8S20657C7[];
extern Class_Descriptor cd_S20657C6;
extern VTBL_ENTRY _ZTI8S20657C6[];
extern  VTBL_ENTRY _ZTV8S20657C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20657C6[];
extern Class_Descriptor cd_S20657C8;
extern VTBL_ENTRY _ZTI8S20657C8[];
extern  VTBL_ENTRY _ZTV8S20657C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20657C8[];
extern Class_Descriptor cd_S20657C5;
extern VTBL_ENTRY _ZTI8S20657C5[];
extern  VTBL_ENTRY _ZTV8S20657C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20657C5[];
extern Class_Descriptor cd_S20657C10;
extern VTBL_ENTRY _ZTI9S20657C10[];
extern  VTBL_ENTRY _ZTV9S20657C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20657C10[];
extern Class_Descriptor cd_S20657C7;
extern VTBL_ENTRY _ZTI8S20657C7[];
extern  VTBL_ENTRY _ZTV8S20657C7[];
extern Class_Descriptor cd_S20657C6;
extern VTBL_ENTRY _ZTI8S20657C6[];
extern  VTBL_ENTRY _ZTV8S20657C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20657C6[];
extern Class_Descriptor cd_S20657C7;
extern VTBL_ENTRY _ZTI8S20657C7[];
extern  VTBL_ENTRY _ZTV8S20657C7[];
extern Class_Descriptor cd_S20657C11;
extern VTBL_ENTRY _ZTI9S20657C11[];
extern  VTBL_ENTRY _ZTV9S20657C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20657C11[];
static Base_Class bases_S20657C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3490C4,    ABISELECT(10800,7608), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20657C7,    ABISELECT(10816,7624), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20657C6,    ABISELECT(10816,7624), //bcp->offset
    46, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20657C7,    ABISELECT(11328,7984), //bcp->offset
    51, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20657C8,    ABISELECT(11424,8036), //bcp->offset
    55, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    40, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20657C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20657C5,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S20657C7,    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
    8, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S20657C7,    ABISELECT(128,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
    9, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20657C6,    ABISELECT(128,68), //bcp->offset
    31, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    35, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S20657C8,    ABISELECT(640,428), //bcp->offset
    35, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    36, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S20657C5,    ABISELECT(11712,8268), //bcp->offset
    60, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    37, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S20657C10,    ABISELECT(32,16), //bcp->offset
    21, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    34, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S20657C7,    ABISELECT(2736,1956), //bcp->offset
    -1, //bcp->virtual_function_table_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
    14, //immediately_derived
  0, 0},
  {&cd_S20657C6,    ABISELECT(2736,1956), //bcp->offset
    39, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    38, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S20657C7,    ABISELECT(3248,2316), //bcp->offset
    43, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S20657C11,    ABISELECT(16,8), //bcp->offset
    11, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20657C14[];
extern void _ZN9S20657C14D1Ev();
extern void _ZN9S20657C14D0Ev();
extern void _ZN9S20657C142v7Ev();
extern void _ZN9S20657C142v8Ev();
extern void _ZN9S20657C112v5Ev();
extern void ABISELECT(_ZThn16_N9S20657C14D1Ev,_ZThn8_N9S20657C14D1Ev)();
extern void ABISELECT(_ZThn16_N9S20657C14D0Ev,_ZThn8_N9S20657C14D0Ev)();
extern void _ZN8S20657C72v1Ev();
extern void ABISELECT(_ZThn32_N9S20657C14D1Ev,_ZThn16_N9S20657C14D1Ev)();
extern void ABISELECT(_ZThn32_N9S20657C14D0Ev,_ZThn16_N9S20657C14D0Ev)();
extern void _ZN8S20657C72v1Ev();
extern void _ZN8S20657C82v2Ev();
extern void _ZN8S20657C72v1Ev();
extern void _ZN8S20657C72v1Ev();
extern void _ZN8S20657C72v1Ev();
extern void _ZN8S20657C72v1Ev();
extern void _ZN8S20657C82v2Ev();
static  VTBL_ENTRY vtc_S20657C14[] = {
  ABISELECT(11712,8268),
  ABISELECT(11424,8036),
  ABISELECT(11328,7984),
  ABISELECT(10816,7624),
  ABISELECT(10800,7608),
  0,
  (VTBL_ENTRY)&(_ZTI9S20657C14[0]),
  (VTBL_ENTRY)&_ZN9S20657C14D1Ev,
  (VTBL_ENTRY)&_ZN9S20657C14D0Ev,
  (VTBL_ENTRY)&_ZN9S20657C142v7Ev,
  (VTBL_ENTRY)&_ZN9S20657C142v8Ev,
  ABISELECT(11696,8260),
  ABISELECT(11408,8028),
  ABISELECT(11312,7976),
  ABISELECT(10800,7616),
  ABISELECT(10784,7600),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20657C14[0]),
  (VTBL_ENTRY)&_ZN9S20657C112v5Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S20657C14D1Ev,_ZThn8_N9S20657C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S20657C14D0Ev,_ZThn8_N9S20657C14D0Ev),
  ABISELECT(11392,8020),
  ABISELECT(10784,7608),
  ABISELECT(11680,8252),
  ABISELECT(11296,7968),
  ABISELECT(10768,7592),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S20657C14[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N9S20657C14D1Ev,_ZThn16_N9S20657C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N9S20657C14D0Ev,_ZThn16_N9S20657C14D0Ev),
  ABISELECT(10672,7540),
  ABISELECT(-128,-68),
  (VTBL_ENTRY)&(_ZTI9S20657C14[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
  ABISELECT(10688,7556),
  ABISELECT(-640,-428),
  (VTBL_ENTRY)&(_ZTI9S20657C14[0]),
  (VTBL_ENTRY)&_ZN8S20657C82v2Ev,
  ABISELECT(8064,5652),
  ABISELECT(-2736,-1956),
  (VTBL_ENTRY)&(_ZTI9S20657C14[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
  ABISELECT(-3248,-2316),
  (VTBL_ENTRY)&(_ZTI9S20657C14[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
  0,
  -16,
  ABISELECT(-10816,-7624),
  (VTBL_ENTRY)&(_ZTI9S20657C14[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
  0,
  ABISELECT(-11328,-7984),
  (VTBL_ENTRY)&(_ZTI9S20657C14[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
  0,
  ABISELECT(-96,-52),
  ABISELECT(-11424,-8036),
  (VTBL_ENTRY)&(_ZTI9S20657C14[0]),
  (VTBL_ENTRY)&_ZN8S20657C82v2Ev,
  ABISELECT(-288,-232),
  ABISELECT(-384,-284),
  ABISELECT(-896,-644),
  ABISELECT(-912,-660),
  ABISELECT(-11712,-8268),
  (VTBL_ENTRY)&(_ZTI9S20657C14[0]),
};
extern VTBL_ENTRY _ZTV9S20657C14[];
static  VTBL_ENTRY _tg__ZTV8S20657C5__A__9S20657C14[] = {
  ABISELECT(11424,8036),
  ABISELECT(11328,7984),
  ABISELECT(10816,7624),
  ABISELECT(10800,7608),
  0,
  (VTBL_ENTRY)&(_ZTI8S20657C5[0]),
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C6__8S20657C5__A__9S20657C14[] = {
  0,
  -16,
  ABISELECT(-10816,-7624),
  (VTBL_ENTRY)&(_ZTI8S20657C5[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C7__A1__8S20657C5__A__9S20657C14[] = {
  0,
  ABISELECT(-11328,-7984),
  (VTBL_ENTRY)&(_ZTI8S20657C5[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C8__8S20657C5__A__9S20657C14[] = {
  0,
  ABISELECT(-96,-52),
  ABISELECT(-11424,-8036),
  (VTBL_ENTRY)&(_ZTI8S20657C5[0]),
  (VTBL_ENTRY)&_ZN8S20657C82v2Ev,
};
extern void _ZN9S20657C112v5Ev();
extern void _ZN9S20657C11D1Ev();
extern void _ZN9S20657C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20657C11__9S20657C14[] = {
  ABISELECT(11696,8260),
  ABISELECT(11408,8028),
  ABISELECT(11312,7976),
  ABISELECT(10800,7616),
  ABISELECT(10784,7600),
  0,
  (VTBL_ENTRY)&(_ZTI9S20657C11[0]),
  (VTBL_ENTRY)&_ZN9S20657C112v5Ev,
  (VTBL_ENTRY)&_ZN9S20657C11D1Ev,
  (VTBL_ENTRY)&_ZN9S20657C11D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20657C59S20657C11__A1__9S20657C14[] = {
  ABISELECT(11408,8028),
  ABISELECT(11312,7976),
  ABISELECT(10800,7616),
  ABISELECT(10784,7600),
  0,
  (VTBL_ENTRY)&(_ZTI8S20657C5[0]),
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C6__8S20657C59S20657C11__A1__9S20657C14[] = {
  0,
  -16,
  ABISELECT(-10800,-7616),
  (VTBL_ENTRY)&(_ZTI8S20657C5[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C7__A1__8S20657C59S20657C11__A1__9S20657C14[] = {
  0,
  ABISELECT(-11312,-7976),
  (VTBL_ENTRY)&(_ZTI8S20657C5[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C8__8S20657C59S20657C11__A1__9S20657C14[] = {
  0,
  ABISELECT(-96,-52),
  ABISELECT(-11408,-8028),
  (VTBL_ENTRY)&(_ZTI8S20657C5[0]),
  (VTBL_ENTRY)&_ZN8S20657C82v2Ev,
};
extern void _ZN8S20657C72v1Ev();
extern void _ZN9S20657C10D1Ev();
extern void _ZN9S20657C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20657C109S20657C11__9S20657C14[] = {
  ABISELECT(11392,8020),
  ABISELECT(10784,7608),
  ABISELECT(11680,8252),
  ABISELECT(11296,7968),
  ABISELECT(10768,7592),
  0,
  (VTBL_ENTRY)&(_ZTI9S20657C10[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
  (VTBL_ENTRY)&_ZN9S20657C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20657C10D0Ev,
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C69S20657C109S20657C11__A1__9S20657C14[] = {
  ABISELECT(10672,7540),
  0,
  (VTBL_ENTRY)&(_ZTI8S20657C6[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C89S20657C109S20657C11__A1__9S20657C14[] = {
  ABISELECT(10688,7556),
  0,
  (VTBL_ENTRY)&(_ZTI8S20657C8[0]),
  (VTBL_ENTRY)&_ZN8S20657C82v2Ev,
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C7__8S20657C89S20657C109S20657C11__A1__9S20657C14[] = {
  0,
  ABISELECT(-10688,-7556),
  (VTBL_ENTRY)&(_ZTI8S20657C8[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C6__A__9S20657C109S20657C11__9S20657C14[] = {
  ABISELECT(10672,7540),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI9S20657C10[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C8__A__9S20657C109S20657C11__9S20657C14[] = {
  ABISELECT(10688,7556),
  ABISELECT(-608,-412),
  (VTBL_ENTRY)&(_ZTI9S20657C10[0]),
  (VTBL_ENTRY)&_ZN8S20657C82v2Ev,
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C7__A2__9S20657C109S20657C11__9S20657C14[] = {
  0,
  ABISELECT(-11296,-7968),
  (VTBL_ENTRY)&(_ZTI9S20657C10[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20657C5__9S20657C109S20657C11__9S20657C14[] = {
  ABISELECT(-288,-232),
  ABISELECT(-384,-284),
  ABISELECT(-896,-644),
  ABISELECT(-912,-660),
  ABISELECT(-11680,-8252),
  (VTBL_ENTRY)&(_ZTI9S20657C10[0]),
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C6__A1__9S20657C109S20657C11__9S20657C14[] = {
  0,
  -16,
  ABISELECT(-10784,-7608),
  (VTBL_ENTRY)&(_ZTI9S20657C10[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C8__A1__9S20657C109S20657C11__9S20657C14[] = {
  0,
  ABISELECT(-96,-52),
  ABISELECT(-11392,-8020),
  (VTBL_ENTRY)&(_ZTI9S20657C10[0]),
  (VTBL_ENTRY)&_ZN8S20657C82v2Ev,
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C69S20657C11__A2__9S20657C14[] = {
  ABISELECT(8064,5652),
  0,
  (VTBL_ENTRY)&(_ZTI8S20657C6[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C6__9S20657C11__9S20657C14[] = {
  0,
  -16,
  ABISELECT(-10800,-7616),
  (VTBL_ENTRY)&(_ZTI9S20657C11[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C7__A1__9S20657C11__9S20657C14[] = {
  0,
  ABISELECT(-11312,-7976),
  (VTBL_ENTRY)&(_ZTI9S20657C11[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C8__9S20657C11__9S20657C14[] = {
  0,
  ABISELECT(-96,-52),
  ABISELECT(-11408,-8028),
  (VTBL_ENTRY)&(_ZTI9S20657C11[0]),
  (VTBL_ENTRY)&_ZN8S20657C82v2Ev,
};
extern void _ZN8S20657C72v1Ev();
extern void ABISELECT(_ZThn16_N9S20657C11D1Ev,_ZThn8_N9S20657C11D1Ev)();
extern void ABISELECT(_ZThn16_N9S20657C11D0Ev,_ZThn8_N9S20657C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20657C10__9S20657C11__9S20657C14[] = {
  ABISELECT(11392,8020),
  ABISELECT(10784,7608),
  ABISELECT(11680,8252),
  ABISELECT(11296,7968),
  ABISELECT(10768,7592),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20657C11[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S20657C11D1Ev,_ZThn8_N9S20657C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S20657C11D0Ev,_ZThn8_N9S20657C11D0Ev),
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C69S20657C10__A1__9S20657C11__9S20657C14[] = {
  ABISELECT(10672,7540),
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI9S20657C11[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C89S20657C10__A1__9S20657C11__9S20657C14[] = {
  ABISELECT(10688,7556),
  ABISELECT(-624,-420),
  (VTBL_ENTRY)&(_ZTI9S20657C11[0]),
  (VTBL_ENTRY)&_ZN8S20657C82v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20657C5__A1__9S20657C11__9S20657C14[] = {
  ABISELECT(-288,-232),
  ABISELECT(-384,-284),
  ABISELECT(-896,-644),
  ABISELECT(-912,-660),
  ABISELECT(-11696,-8260),
  (VTBL_ENTRY)&(_ZTI9S20657C11[0]),
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C6__A__9S20657C11__9S20657C14[] = {
  ABISELECT(8064,5652),
  ABISELECT(-2720,-1948),
  (VTBL_ENTRY)&(_ZTI9S20657C11[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C6__9S20657C14[] = {
  -16,
  0,
  (VTBL_ENTRY)&(_ZTI8S20657C6[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C8__9S20657C14[] = {
  ABISELECT(-96,-52),
  0,
  (VTBL_ENTRY)&(_ZTI8S20657C8[0]),
  (VTBL_ENTRY)&_ZN8S20657C82v2Ev,
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C7__8S20657C8__9S20657C14[] = {
  0,
  ABISELECT(96,52),
  (VTBL_ENTRY)&(_ZTI8S20657C8[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20657C5__A2__9S20657C14[] = {
  ABISELECT(-288,-232),
  ABISELECT(-384,-284),
  ABISELECT(-896,-644),
  ABISELECT(-912,-660),
  0,
  (VTBL_ENTRY)&(_ZTI8S20657C5[0]),
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C6__8S20657C5__A2__9S20657C14[] = {
  0,
  -16,
  ABISELECT(896,644),
  (VTBL_ENTRY)&(_ZTI8S20657C5[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C7__A1__8S20657C5__A2__9S20657C14[] = {
  0,
  ABISELECT(384,284),
  (VTBL_ENTRY)&(_ZTI8S20657C5[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C8__8S20657C5__A2__9S20657C14[] = {
  0,
  ABISELECT(-96,-52),
  ABISELECT(288,232),
  (VTBL_ENTRY)&(_ZTI8S20657C5[0]),
  (VTBL_ENTRY)&_ZN8S20657C82v2Ev,
};
static  VTT_ENTRY vtt_S20657C14[] = {
  {&(_ZTV9S20657C14[7]),  7,66},
  {&(_tg__ZTV8S20657C5__A__9S20657C14[6]),  6,6},
  {&(_tg__ZTV8S20657C6__8S20657C5__A__9S20657C14[4]),  4,5},
  {&(_tg__ZTV8S20657C7__A1__8S20657C5__A__9S20657C14[3]),  3,4},
  {&(_tg__ZTV8S20657C8__8S20657C5__A__9S20657C14[4]),  4,5},
  {&(_tg__ZTV9S20657C11__9S20657C14[7]),  7,10},
  {&(_tg__ZTV8S20657C59S20657C11__A1__9S20657C14[6]),  6,6},
  {&(_tg__ZTV8S20657C6__8S20657C59S20657C11__A1__9S20657C14[4]),  4,5},
  {&(_tg__ZTV8S20657C7__A1__8S20657C59S20657C11__A1__9S20657C14[3]),  3,4},
  {&(_tg__ZTV8S20657C8__8S20657C59S20657C11__A1__9S20657C14[4]),  4,5},
  {&(_tg__ZTV9S20657C109S20657C11__9S20657C14[7]),  7,10},
  {&(_tg__ZTV8S20657C69S20657C109S20657C11__A1__9S20657C14[3]),  3,4},
  {&(_tg__ZTV8S20657C89S20657C109S20657C11__A1__9S20657C14[3]),  3,4},
  {&(_tg__ZTV8S20657C7__8S20657C89S20657C109S20657C11__A1__9S20657C14[3]),  3,4},
  {&(_tg__ZTV8S20657C6__A__9S20657C109S20657C11__9S20657C14[3]),  3,4},
  {&(_tg__ZTV8S20657C8__A__9S20657C109S20657C11__9S20657C14[3]),  3,4},
  {&(_tg__ZTV8S20657C7__A2__9S20657C109S20657C11__9S20657C14[3]),  3,4},
  {&(_tg__ZTV8S20657C5__9S20657C109S20657C11__9S20657C14[6]),  6,6},
  {&(_tg__ZTV8S20657C6__A1__9S20657C109S20657C11__9S20657C14[4]),  4,5},
  {&(_tg__ZTV8S20657C8__A1__9S20657C109S20657C11__9S20657C14[4]),  4,5},
  {&(_tg__ZTV8S20657C69S20657C11__A2__9S20657C14[3]),  3,4},
  {&(_tg__ZTV8S20657C6__9S20657C11__9S20657C14[4]),  4,5},
  {&(_tg__ZTV8S20657C7__A1__9S20657C11__9S20657C14[3]),  3,4},
  {&(_tg__ZTV8S20657C8__9S20657C11__9S20657C14[4]),  4,5},
  {&(_tg__ZTV9S20657C10__9S20657C11__9S20657C14[7]),  7,10},
  {&(_tg__ZTV8S20657C69S20657C10__A1__9S20657C11__9S20657C14[3]),  3,4},
  {&(_tg__ZTV8S20657C89S20657C10__A1__9S20657C11__9S20657C14[3]),  3,4},
  {&(_tg__ZTV8S20657C5__A1__9S20657C11__9S20657C14[6]),  6,6},
  {&(_tg__ZTV8S20657C6__A__9S20657C11__9S20657C14[3]),  3,4},
  {&(_ZTV9S20657C14[50]),  50,66},
  {&(_ZTV9S20657C14[54]),  54,66},
  {&(_ZTV9S20657C14[59]),  59,66},
  {&(_ZTV9S20657C14[18]),  18,66},
  {&(_ZTV9S20657C14[28]),  28,66},
  {&(_ZTV9S20657C14[34]),  34,66},
  {&(_ZTV9S20657C14[38]),  38,66},
  {&(_ZTV9S20657C14[66]),  66,66},
  {&(_ZTV9S20657C14[42]),  42,66},
  {&(_tg__ZTV8S20657C6__9S20657C14[3]),  3,4},
  {&(_tg__ZTV8S20657C8__9S20657C14[3]),  3,4},
  {&(_tg__ZTV8S20657C7__8S20657C8__9S20657C14[3]),  3,4},
  {&(_tg__ZTV8S20657C5__A2__9S20657C14[6]),  6,6},
  {&(_tg__ZTV8S20657C6__8S20657C5__A2__9S20657C14[4]),  4,5},
  {&(_tg__ZTV8S20657C7__A1__8S20657C5__A2__9S20657C14[3]),  3,4},
  {&(_tg__ZTV8S20657C8__8S20657C5__A2__9S20657C14[4]),  4,5},
};
extern VTBL_ENTRY _ZTI9S20657C14[];
extern  VTBL_ENTRY _ZTV9S20657C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20657C14[];
Class_Descriptor cd_S20657C14 = {  "S20657C14", // class name
  bases_S20657C14, 17,
  &(vtc_S20657C14[0]), // expected_vtbl_contents
  &(vtt_S20657C14[0]), // expected_vtt_contents
  ABISELECT(11728,8276), // object size
  NSPAIRA(_ZTI9S20657C14),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S20657C14),66, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20657C14),45, //virtual table table var
  16, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20657C2  : virtual S3490C4 , S20657C4 {
  void *s20657c2f0;
  ::S20657C6 s20657c2f1[3];
  ::S3490C14 s20657c2f2;
  int s20657c2f3;
  void *s20657c2f4;
  int s20657c2f5[3];
  void *s20657c2f6;
  int s20657c2f7;
  short s20657c2f8;
  void *s20657c2f9;
  __tsi64 s20657c2f10;
  ::S20657C14 s20657c2f11[3];
  virtual  ~S20657C2(); // _ZN8S20657C2D2Ev
  virtual void  v6(); // _ZN8S20657C22v6Ev
  S20657C2(); // tgen
};
//SIG(-1 S20657C2) C1{ VBC2{ m FL Fi Fc} BC3{ VBC2 VBC4{ VBC2 VBC5{ BC6{ v2 FD Fi:3 Fc:8 FD[2] FL} VBC2 Fc[10] Fi FC7{ VBC6 v3 FC2 FL FC2[7] Fp FL FC2 Fp Fc Fs Fi FC6} FL} VBC6 VBC7 Fp} BC8{ BC9{ BC6 VBC2 BC5 BC7 VBC4 vd FC7 FC4 Fp Fi FC6 FC7} vd v4 v5 Fp Fs:6 FC6 FD Fi FC2 FC7 Fp Fi Fp[2]} BC10{ BC4 BC9 BC5 BC6 v6 FC5[2] FC6 Fi FC2 Fp[10] Fi[2] FL FD FL Fi} FC11{} FC8 FL} vd v1 Fp FC5[3] FC12{ VBC13{ VBC2 VBC14{ BC15{ v8 FD Fi:3 Fc:8 FD[2] FL} VBC2 Fc[10] Fi FC16{ VBC15 v9 FC2 FL FC2[7] Fp FL FC2 Fp Fc Fs Fi FC15} FL} VBC15 VBC16 Fp} BC17{ BC15 VBC2 BC14 BC16 VBC13 vd FC16 FC13 Fp Fi FC15 FC16} BC18{ BC17 vd v10 v11 Fp Fs:6 FC15 FD Fi FC2 FC16 Fp Fi Fp[2]} v7 Fi Fc Fp Fl} Fi Fp Fi[3] Fp Fi Fs Fp FL FC19{ BC4 BC10 vd v12 v13 Fp[2] Fi Fc FC5 FC10 FD}[3]}


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

static void Test_S20657C2()
{
  extern Class_Descriptor cd_S20657C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(3554,10060)];
    init_test(&cd_S20657C2, buf);
    S20657C2 *dp, &lv = *(dp=new (buf) S20657C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56848,40236), "sizeof(S20657C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20657C2)");
    check_base_class_offset(lv, (S3490C4*), ABISELECT(55920,39568), "S20657C2");
    check_base_class_offset(lv, (S3490C4*)(S20657C4*), ABISELECT(55920,39568), "S20657C2");
    /*is_ambiguous_... S20657C2::S20657C5 */ AMB_check_base_class_offset(lv, (S3490C4*)(S20657C5*), ABISELECT(55920,39568), "S20657C2");
    /*is_ambiguous_... S20657C2::S20657C6 */ AMB_check_base_class_offset(lv, (S3490C4*)(S20657C6*), ABISELECT(55920,39568), "S20657C2");
    check_base_class_offset(lv, (S3490C4*)(S20657C10*)(S20657C9*)(S20657C4*), ABISELECT(55920,39568), "S20657C2");
    /*is_ambiguous_... S20657C10::S20657C6 */ AMB_check_base_class_offset(lv, (S3490C4*)(S20657C6*)(S20657C10*)(S20657C9*)(S20657C4*), ABISELECT(55920,39568), "S20657C2");
    /*is_ambiguous_... S20657C11::S20657C5 */ AMB_check_base_class_offset(lv, (S3490C4*)(S20657C5*)(S20657C11*)(S20657C4*), ABISELECT(55920,39568), "S20657C2");
    check_base_class_offset(lv, (S3490C4*)(S20657C10*)(S20657C11*)(S20657C4*), ABISELECT(55920,39568), "S20657C2");
    /*is_ambiguous_... S20657C10::S20657C6 */ AMB_check_base_class_offset(lv, (S3490C4*)(S20657C6*)(S20657C10*)(S20657C11*)(S20657C4*), ABISELECT(55920,39568), "S20657C2");
    /*is_ambiguous_... S20657C11::S20657C6 */ AMB_check_base_class_offset(lv, (S3490C4*)(S20657C6*)(S20657C11*)(S20657C4*), ABISELECT(55920,39568), "S20657C2");
    /*is_ambiguous_... S20657C2::S20657C6 */ AMB_check_base_class_offset(lv, (S20657C7*)(S20657C6*), ABISELECT(55952,39592), "S20657C2");
    /*is_ambiguous_... S20657C2::S20657C5 */ AMB_check_base_class_offset(lv, (S20657C6*)(S20657C5*), ABISELECT(55952,39592), "S20657C2");
    /*is_ambiguous_... S20657C11::S20657C5 */ AMB_check_base_class_offset(lv, (S20657C6*)(S20657C5*)(S20657C11*)(S20657C4*), ABISELECT(55952,39592), "S20657C2");
    /*is_ambiguous_... S20657C2::S20657C5 */ AMB_check_base_class_offset(lv, (S20657C7*)(S20657C5*), ABISELECT(56464,39952), "S20657C2");
    /*is_ambiguous_... S20657C2::S20657C8 */ AMB_check_base_class_offset(lv, (S20657C7*)(S20657C8*), ABISELECT(56464,39952), "S20657C2");
    /*is_ambiguous_... S20657C10::S20657C8 */ AMB_check_base_class_offset(lv, (S20657C7*)(S20657C8*)(S20657C10*)(S20657C9*)(S20657C4*), ABISELECT(56464,39952), "S20657C2");
    /*is_ambiguous_... S20657C11::S20657C5 */ AMB_check_base_class_offset(lv, (S20657C7*)(S20657C5*)(S20657C11*)(S20657C4*), ABISELECT(56464,39952), "S20657C2");
    /*is_ambiguous_... S20657C10::S20657C8 */ AMB_check_base_class_offset(lv, (S20657C7*)(S20657C8*)(S20657C10*)(S20657C11*)(S20657C4*), ABISELECT(56464,39952), "S20657C2");
    /*is_ambiguous_... S20657C2::S20657C5 */ AMB_check_base_class_offset(lv, (S20657C8*)(S20657C5*), ABISELECT(56560,40004), "S20657C2");
    /*is_ambiguous_... S20657C11::S20657C5 */ AMB_check_base_class_offset(lv, (S20657C8*)(S20657C5*)(S20657C11*)(S20657C4*), ABISELECT(56560,40004), "S20657C2");
    /*is_ambiguous_... S20657C4::S20657C5 */ AMB_check_base_class_offset(lv, (S20657C5*)(S20657C4*), ABISELECT(55936,39584), "S20657C2");
    check_base_class_offset(lv, (S20657C5*)(S20657C10*)(S20657C9*)(S20657C4*), ABISELECT(55936,39584), "S20657C2");
    check_base_class_offset(lv, (S20657C5*)(S20657C10*)(S20657C11*)(S20657C4*), ABISELECT(55936,39584), "S20657C2");
    /*is_ambiguous_... S20657C10::S20657C7 */ AMB_check_base_class_offset(lv, (S20657C7*)(S20657C10*)(S20657C9*)(S20657C4*), 0, "S20657C2");
    /*is_ambiguous_... S20657C10::S20657C6 */ AMB_check_base_class_offset(lv, (S20657C7*)(S20657C6*)(S20657C10*)(S20657C9*)(S20657C4*), ABISELECT(96,52), "S20657C2");
    /*is_ambiguous_... S20657C10::S20657C6 */ AMB_check_base_class_offset(lv, (S20657C6*)(S20657C10*)(S20657C9*)(S20657C4*), ABISELECT(96,52), "S20657C2");
    /*is_ambiguous_... S20657C10::S20657C8 */ AMB_check_base_class_offset(lv, (S20657C8*)(S20657C10*)(S20657C9*)(S20657C4*), ABISELECT(608,412), "S20657C2");
    check_base_class_offset(lv, (S20657C10*)(S20657C9*)(S20657C4*), 0, "S20657C2");
    check_base_class_offset(lv, (S20657C9*)(S20657C4*), 0, "S20657C2");
    /*is_ambiguous_... S20657C11::S20657C5 */ AMB_check_base_class_offset(lv, (S20657C5*)(S20657C11*)(S20657C4*), ABISELECT(3280,2332), "S20657C2");
    /*is_ambiguous_... S20657C10::S20657C7 */ AMB_check_base_class_offset(lv, (S20657C7*)(S20657C10*)(S20657C11*)(S20657C4*), ABISELECT(3296,2340), "S20657C2");
    /*is_ambiguous_... S20657C10::S20657C6 */ AMB_check_base_class_offset(lv, (S20657C7*)(S20657C6*)(S20657C10*)(S20657C11*)(S20657C4*), ABISELECT(3392,2392), "S20657C2");
    /*is_ambiguous_... S20657C10::S20657C6 */ AMB_check_base_class_offset(lv, (S20657C6*)(S20657C10*)(S20657C11*)(S20657C4*), ABISELECT(3392,2392), "S20657C2");
    /*is_ambiguous_... S20657C10::S20657C8 */ AMB_check_base_class_offset(lv, (S20657C8*)(S20657C10*)(S20657C11*)(S20657C4*), ABISELECT(3904,2752), "S20657C2");
    check_base_class_offset(lv, (S20657C10*)(S20657C11*)(S20657C4*), ABISELECT(3296,2340), "S20657C2");
    /*is_ambiguous_... S20657C11::S20657C6 */ AMB_check_base_class_offset(lv, (S20657C7*)(S20657C6*)(S20657C11*)(S20657C4*), ABISELECT(6000,4280), "S20657C2");
    /*is_ambiguous_... S20657C11::S20657C6 */ AMB_check_base_class_offset(lv, (S20657C6*)(S20657C11*)(S20657C4*), ABISELECT(6000,4280), "S20657C2");
    /*is_ambiguous_... S20657C11::S20657C7 */ AMB_check_base_class_offset(lv, (S20657C7*)(S20657C11*)(S20657C4*), ABISELECT(6512,4640), "S20657C2");
    check_base_class_offset(lv, (S20657C11*)(S20657C4*), ABISELECT(3280,2332), "S20657C2");
    check_base_class_offset(lv, (S20657C4*), 0, "S20657C2");
    check_field_offset(lv, s20657c2f0, ABISELECT(12136,8608), "S20657C2.s20657c2f0");
    check_field_offset(lv, s20657c2f1, ABISELECT(12144,8612), "S20657C2.s20657c2f1");
    check_field_offset(lv, s20657c2f2, ABISELECT(13728,9740), "S20657C2.s20657c2f2");
    check_field_offset(lv, s20657c2f3, ABISELECT(20672,14696), "S20657C2.s20657c2f3");
    check_field_offset(lv, s20657c2f4, ABISELECT(20680,14700), "S20657C2.s20657c2f4");
    check_field_offset(lv, s20657c2f5, ABISELECT(20688,14704), "S20657C2.s20657c2f5");
    check_field_offset(lv, s20657c2f6, ABISELECT(20704,14716), "S20657C2.s20657c2f6");
    check_field_offset(lv, s20657c2f7, ABISELECT(20712,14720), "S20657C2.s20657c2f7");
    check_field_offset(lv, s20657c2f8, ABISELECT(20716,14724), "S20657C2.s20657c2f8");
    check_field_offset(lv, s20657c2f9, ABISELECT(20720,14728), "S20657C2.s20657c2f9");
    check_field_offset(lv, s20657c2f10, ABISELECT(20728,14732), "S20657C2.s20657c2f10");
    check_field_offset(lv, s20657c2f11, ABISELECT(20736,14740), "S20657C2.s20657c2f11");
    test_class_info(&lv, &cd_S20657C2);
    dp->~S20657C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20657C2(Test_S20657C2, "S20657C2", ABISELECT(56848,40236));

#else // __cplusplus

extern void _ZN8S20657C2C1Ev();
extern void _ZN8S20657C2D2Ev();
Name_Map name_map_S20657C2[] = {
  NSPAIR(_ZN8S20657C2C1Ev),
  NSPAIR(_ZN8S20657C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3490C4;
extern VTBL_ENTRY _ZTI7S3490C4[];
extern Class_Descriptor cd_S20657C7;
extern VTBL_ENTRY _ZTI8S20657C7[];
extern  VTBL_ENTRY _ZTV8S20657C7[];
extern Class_Descriptor cd_S20657C6;
extern VTBL_ENTRY _ZTI8S20657C6[];
extern  VTBL_ENTRY _ZTV8S20657C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20657C6[];
extern Class_Descriptor cd_S20657C7;
extern VTBL_ENTRY _ZTI8S20657C7[];
extern  VTBL_ENTRY _ZTV8S20657C7[];
extern Class_Descriptor cd_S20657C8;
extern VTBL_ENTRY _ZTI8S20657C8[];
extern  VTBL_ENTRY _ZTV8S20657C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20657C8[];
extern Class_Descriptor cd_S20657C5;
extern VTBL_ENTRY _ZTI8S20657C5[];
extern  VTBL_ENTRY _ZTV8S20657C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20657C5[];
extern Class_Descriptor cd_S20657C7;
extern VTBL_ENTRY _ZTI8S20657C7[];
extern  VTBL_ENTRY _ZTV8S20657C7[];
extern Class_Descriptor cd_S20657C7;
extern VTBL_ENTRY _ZTI8S20657C7[];
extern  VTBL_ENTRY _ZTV8S20657C7[];
extern Class_Descriptor cd_S20657C6;
extern VTBL_ENTRY _ZTI8S20657C6[];
extern  VTBL_ENTRY _ZTV8S20657C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20657C6[];
extern Class_Descriptor cd_S20657C8;
extern VTBL_ENTRY _ZTI8S20657C8[];
extern  VTBL_ENTRY _ZTV8S20657C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20657C8[];
extern Class_Descriptor cd_S20657C10;
extern VTBL_ENTRY _ZTI9S20657C10[];
extern  VTBL_ENTRY _ZTV9S20657C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20657C10[];
extern Class_Descriptor cd_S20657C9;
extern VTBL_ENTRY _ZTI8S20657C9[];
extern  VTBL_ENTRY _ZTV8S20657C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20657C9[];
extern Class_Descriptor cd_S20657C5;
extern VTBL_ENTRY _ZTI8S20657C5[];
extern  VTBL_ENTRY _ZTV8S20657C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20657C5[];
extern Class_Descriptor cd_S20657C7;
extern VTBL_ENTRY _ZTI8S20657C7[];
extern  VTBL_ENTRY _ZTV8S20657C7[];
extern Class_Descriptor cd_S20657C7;
extern VTBL_ENTRY _ZTI8S20657C7[];
extern  VTBL_ENTRY _ZTV8S20657C7[];
extern Class_Descriptor cd_S20657C6;
extern VTBL_ENTRY _ZTI8S20657C6[];
extern  VTBL_ENTRY _ZTV8S20657C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20657C6[];
extern Class_Descriptor cd_S20657C8;
extern VTBL_ENTRY _ZTI8S20657C8[];
extern  VTBL_ENTRY _ZTV8S20657C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20657C8[];
extern Class_Descriptor cd_S20657C10;
extern VTBL_ENTRY _ZTI9S20657C10[];
extern  VTBL_ENTRY _ZTV9S20657C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20657C10[];
extern Class_Descriptor cd_S20657C7;
extern VTBL_ENTRY _ZTI8S20657C7[];
extern  VTBL_ENTRY _ZTV8S20657C7[];
extern Class_Descriptor cd_S20657C6;
extern VTBL_ENTRY _ZTI8S20657C6[];
extern  VTBL_ENTRY _ZTV8S20657C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20657C6[];
extern Class_Descriptor cd_S20657C7;
extern VTBL_ENTRY _ZTI8S20657C7[];
extern  VTBL_ENTRY _ZTV8S20657C7[];
extern Class_Descriptor cd_S20657C11;
extern VTBL_ENTRY _ZTI9S20657C11[];
extern  VTBL_ENTRY _ZTV9S20657C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20657C11[];
extern Class_Descriptor cd_S20657C4;
extern VTBL_ENTRY _ZTI8S20657C4[];
extern  VTBL_ENTRY _ZTV8S20657C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20657C4[];
static Base_Class bases_S20657C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3490C4,    ABISELECT(55920,39568), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S20657C7,    ABISELECT(55952,39592), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20657C6,    ABISELECT(55952,39592), //bcp->offset
    62, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    56, //bcp->index_in_construction_vtbl_array
    70, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20657C7,    ABISELECT(56464,39952), //bcp->offset
    67, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    57, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20657C8,    ABISELECT(56560,40004), //bcp->offset
    71, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    58, //bcp->index_in_construction_vtbl_array
    71, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20657C5,    ABISELECT(55936,39584), //bcp->offset
    56, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    55, //bcp->index_in_construction_vtbl_array
    66, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S20657C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S20657C7,    ABISELECT(96,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20657C6,    ABISELECT(96,52), //bcp->offset
    13, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    59, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S20657C8,    ABISELECT(608,412), //bcp->offset
    17, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    60, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S20657C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S20657C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S20657C5,    ABISELECT(3280,2332), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S20657C7,    ABISELECT(3296,2340), //bcp->offset
    -1, //bcp->virtual_function_table_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
    17, //immediately_derived
  0, 0},
  {&cd_S20657C7,    ABISELECT(3392,2392), //bcp->offset
    -1, //bcp->virtual_function_table_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
    15, //immediately_derived
  0, 0},
  {&cd_S20657C6,    ABISELECT(3392,2392), //bcp->offset
    41, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    63, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S20657C8,    ABISELECT(3904,2752), //bcp->offset
    45, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    64, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S20657C10,    ABISELECT(3296,2340), //bcp->offset
    31, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    62, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S20657C7,    ABISELECT(6000,4280), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S20657C6,    ABISELECT(6000,4280), //bcp->offset
    49, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    65, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S20657C7,    ABISELECT(6512,4640), //bcp->offset
    53, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S20657C11,    ABISELECT(3280,2332), //bcp->offset
    21, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    61, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S20657C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20657C2[];
extern void _ZN8S20657C72v1Ev();
extern void _ZN8S20657C2D1Ev();
extern void _ZN8S20657C2D0Ev();
extern void _ZN8S20657C92v3Ev();
extern void _ZN8S20657C92v4Ev();
extern void _ZN8S20657C22v6Ev();
extern void _ZN8S20657C72v1Ev();
extern void _ZN8S20657C82v2Ev();
extern void _ZN9S20657C112v5Ev();
extern void ABISELECT(_ZThn3280_N8S20657C2D1Ev,_ZThn2332_N8S20657C2D1Ev)();
extern void ABISELECT(_ZThn3280_N8S20657C2D0Ev,_ZThn2332_N8S20657C2D0Ev)();
extern void _ZN8S20657C72v1Ev();
extern void ABISELECT(_ZThn3296_N8S20657C2D1Ev,_ZThn2340_N8S20657C2D1Ev)();
extern void ABISELECT(_ZThn3296_N8S20657C2D0Ev,_ZThn2340_N8S20657C2D0Ev)();
extern void _ZN8S20657C72v1Ev();
extern void _ZN8S20657C82v2Ev();
extern void _ZN8S20657C72v1Ev();
extern void _ZN8S20657C72v1Ev();
extern void _ZN8S20657C72v1Ev();
extern void _ZN8S20657C72v1Ev();
extern void _ZN8S20657C82v2Ev();
static  VTBL_ENTRY vtc_S20657C2[] = {
  ABISELECT(56560,40004),
  ABISELECT(55952,39592),
  ABISELECT(55936,39584),
  ABISELECT(56464,39952),
  ABISELECT(55920,39568),
  0,
  (VTBL_ENTRY)&(_ZTI8S20657C2[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
  (VTBL_ENTRY)&_ZN8S20657C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20657C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20657C92v3Ev,
  (VTBL_ENTRY)&_ZN8S20657C92v4Ev,
  (VTBL_ENTRY)&_ZN8S20657C22v6Ev,
  ABISELECT(55824,39516),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI8S20657C2[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
  ABISELECT(55856,39540),
  ABISELECT(-608,-412),
  (VTBL_ENTRY)&(_ZTI8S20657C2[0]),
  (VTBL_ENTRY)&_ZN8S20657C82v2Ev,
  ABISELECT(52656,37252),
  ABISELECT(53280,37672),
  ABISELECT(53184,37620),
  ABISELECT(52672,37260),
  ABISELECT(52640,37236),
  ABISELECT(-3280,-2332),
  (VTBL_ENTRY)&(_ZTI8S20657C2[0]),
  (VTBL_ENTRY)&_ZN9S20657C112v5Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn3280_N8S20657C2D1Ev,_ZThn2332_N8S20657C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn3280_N8S20657C2D0Ev,_ZThn2332_N8S20657C2D0Ev),
  ABISELECT(53264,37664),
  ABISELECT(52656,37252),
  ABISELECT(52640,37244),
  ABISELECT(53168,37612),
  ABISELECT(52624,37228),
  ABISELECT(-3296,-2340),
  (VTBL_ENTRY)&(_ZTI8S20657C2[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn3296_N8S20657C2D1Ev,_ZThn2340_N8S20657C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn3296_N8S20657C2D0Ev,_ZThn2340_N8S20657C2D0Ev),
  ABISELECT(52528,37176),
  ABISELECT(-3392,-2392),
  (VTBL_ENTRY)&(_ZTI8S20657C2[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
  ABISELECT(52560,37200),
  ABISELECT(-3904,-2752),
  (VTBL_ENTRY)&(_ZTI8S20657C2[0]),
  (VTBL_ENTRY)&_ZN8S20657C82v2Ev,
  ABISELECT(49920,35288),
  ABISELECT(-6000,-4280),
  (VTBL_ENTRY)&(_ZTI8S20657C2[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
  ABISELECT(-6512,-4640),
  (VTBL_ENTRY)&(_ZTI8S20657C2[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
  ABISELECT(624,420),
  ABISELECT(528,368),
  ABISELECT(16,8),
  -16,
  ABISELECT(-55936,-39584),
  (VTBL_ENTRY)&(_ZTI8S20657C2[0]),
  0,
  ABISELECT(-32,-24),
  ABISELECT(-55952,-39592),
  (VTBL_ENTRY)&(_ZTI8S20657C2[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
  0,
  ABISELECT(-56464,-39952),
  (VTBL_ENTRY)&(_ZTI8S20657C2[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
  0,
  ABISELECT(-96,-52),
  ABISELECT(-56560,-40004),
  (VTBL_ENTRY)&(_ZTI8S20657C2[0]),
  (VTBL_ENTRY)&_ZN8S20657C82v2Ev,
};
extern VTBL_ENTRY _ZTV8S20657C2[];
extern void _ZN8S20657C72v1Ev();
extern void _ZN8S20657C4D1Ev();
extern void _ZN8S20657C4D0Ev();
extern void _ZN8S20657C92v3Ev();
extern void _ZN8S20657C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C4__8S20657C2[] = {
  ABISELECT(56560,40004),
  ABISELECT(55952,39592),
  ABISELECT(55936,39584),
  ABISELECT(56464,39952),
  ABISELECT(55920,39568),
  0,
  (VTBL_ENTRY)&(_ZTI8S20657C4[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
  (VTBL_ENTRY)&_ZN8S20657C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20657C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20657C92v3Ev,
  (VTBL_ENTRY)&_ZN8S20657C92v4Ev,
};
extern void _ZN8S20657C72v1Ev();
extern void _ZN8S20657C9D1Ev();
extern void _ZN8S20657C9D0Ev();
extern void _ZN8S20657C92v3Ev();
extern void _ZN8S20657C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C98S20657C4__8S20657C2[] = {
  ABISELECT(56560,40004),
  ABISELECT(55952,39592),
  ABISELECT(55936,39584),
  ABISELECT(56464,39952),
  ABISELECT(55920,39568),
  0,
  (VTBL_ENTRY)&(_ZTI8S20657C9[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
  (VTBL_ENTRY)&_ZN8S20657C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20657C9D0Ev,
  (VTBL_ENTRY)&_ZN8S20657C92v3Ev,
  (VTBL_ENTRY)&_ZN8S20657C92v4Ev,
};
extern void _ZN8S20657C72v1Ev();
extern void _ZN9S20657C10D1Ev();
extern void _ZN9S20657C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20657C108S20657C98S20657C4__8S20657C2[] = {
  ABISELECT(56560,40004),
  ABISELECT(55952,39592),
  ABISELECT(55936,39584),
  ABISELECT(56464,39952),
  ABISELECT(55920,39568),
  0,
  (VTBL_ENTRY)&(_ZTI9S20657C10[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
  (VTBL_ENTRY)&_ZN9S20657C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20657C10D0Ev,
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C69S20657C108S20657C98S20657C4__A1__8S20657C2[] = {
  ABISELECT(55824,39516),
  0,
  (VTBL_ENTRY)&(_ZTI8S20657C6[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C89S20657C108S20657C98S20657C4__A1__8S20657C2[] = {
  ABISELECT(55856,39540),
  0,
  (VTBL_ENTRY)&(_ZTI8S20657C8[0]),
  (VTBL_ENTRY)&_ZN8S20657C82v2Ev,
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C7__8S20657C89S20657C108S20657C98S20657C4__A1__8S20657C2[] = {
  0,
  ABISELECT(-55856,-39540),
  (VTBL_ENTRY)&(_ZTI8S20657C8[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C6__A__9S20657C108S20657C98S20657C4__8S20657C2[] = {
  ABISELECT(55824,39516),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI9S20657C10[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C8__A__9S20657C108S20657C98S20657C4__8S20657C2[] = {
  ABISELECT(55856,39540),
  ABISELECT(-608,-412),
  (VTBL_ENTRY)&(_ZTI9S20657C10[0]),
  (VTBL_ENTRY)&_ZN8S20657C82v2Ev,
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C7__A2__9S20657C108S20657C98S20657C4__8S20657C2[] = {
  0,
  ABISELECT(-56464,-39952),
  (VTBL_ENTRY)&(_ZTI9S20657C10[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20657C5__9S20657C108S20657C98S20657C4__8S20657C2[] = {
  ABISELECT(624,420),
  ABISELECT(528,368),
  ABISELECT(16,8),
  -16,
  ABISELECT(-55936,-39584),
  (VTBL_ENTRY)&(_ZTI9S20657C10[0]),
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C6__A1__9S20657C108S20657C98S20657C4__8S20657C2[] = {
  0,
  ABISELECT(-32,-24),
  ABISELECT(-55952,-39592),
  (VTBL_ENTRY)&(_ZTI9S20657C10[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C8__A1__9S20657C108S20657C98S20657C4__8S20657C2[] = {
  0,
  ABISELECT(-96,-52),
  ABISELECT(-56560,-40004),
  (VTBL_ENTRY)&(_ZTI9S20657C10[0]),
  (VTBL_ENTRY)&_ZN8S20657C82v2Ev,
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C69S20657C10__8S20657C98S20657C4__8S20657C2[] = {
  ABISELECT(55824,39516),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI8S20657C9[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C89S20657C10__8S20657C98S20657C4__8S20657C2[] = {
  ABISELECT(55856,39540),
  ABISELECT(-608,-412),
  (VTBL_ENTRY)&(_ZTI8S20657C9[0]),
  (VTBL_ENTRY)&_ZN8S20657C82v2Ev,
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C7__A2__8S20657C98S20657C4__8S20657C2[] = {
  0,
  ABISELECT(-56464,-39952),
  (VTBL_ENTRY)&(_ZTI8S20657C9[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20657C5__8S20657C98S20657C4__8S20657C2[] = {
  ABISELECT(624,420),
  ABISELECT(528,368),
  ABISELECT(16,8),
  -16,
  ABISELECT(-55936,-39584),
  (VTBL_ENTRY)&(_ZTI8S20657C9[0]),
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C6__A1__8S20657C98S20657C4__8S20657C2[] = {
  0,
  ABISELECT(-32,-24),
  ABISELECT(-55952,-39592),
  (VTBL_ENTRY)&(_ZTI8S20657C9[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C8__A1__8S20657C98S20657C4__8S20657C2[] = {
  0,
  ABISELECT(-96,-52),
  ABISELECT(-56560,-40004),
  (VTBL_ENTRY)&(_ZTI8S20657C9[0]),
  (VTBL_ENTRY)&_ZN8S20657C82v2Ev,
};
extern void _ZN9S20657C112v5Ev();
extern void _ZN9S20657C11D1Ev();
extern void _ZN9S20657C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20657C118S20657C4__8S20657C2[] = {
  ABISELECT(52656,37252),
  ABISELECT(53280,37672),
  ABISELECT(53184,37620),
  ABISELECT(52672,37260),
  ABISELECT(52640,37236),
  0,
  (VTBL_ENTRY)&(_ZTI9S20657C11[0]),
  (VTBL_ENTRY)&_ZN9S20657C112v5Ev,
  (VTBL_ENTRY)&_ZN9S20657C11D1Ev,
  (VTBL_ENTRY)&_ZN9S20657C11D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20657C59S20657C118S20657C4__A1__8S20657C2[] = {
  ABISELECT(53280,37672),
  ABISELECT(53184,37620),
  ABISELECT(52672,37260),
  ABISELECT(52640,37236),
  0,
  (VTBL_ENTRY)&(_ZTI8S20657C5[0]),
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C6__8S20657C59S20657C118S20657C4__A1__8S20657C2[] = {
  0,
  ABISELECT(-32,-24),
  ABISELECT(-52672,-37260),
  (VTBL_ENTRY)&(_ZTI8S20657C5[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C7__A1__8S20657C59S20657C118S20657C4__A1__8S20657C2[] = {
  0,
  ABISELECT(-53184,-37620),
  (VTBL_ENTRY)&(_ZTI8S20657C5[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C8__8S20657C59S20657C118S20657C4__A1__8S20657C2[] = {
  0,
  ABISELECT(-96,-52),
  ABISELECT(-53280,-37672),
  (VTBL_ENTRY)&(_ZTI8S20657C5[0]),
  (VTBL_ENTRY)&_ZN8S20657C82v2Ev,
};
extern void _ZN8S20657C72v1Ev();
extern void _ZN9S20657C10D1Ev();
extern void _ZN9S20657C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20657C109S20657C118S20657C4__A1__8S20657C2[] = {
  ABISELECT(53264,37664),
  ABISELECT(52656,37252),
  ABISELECT(52640,37244),
  ABISELECT(53168,37612),
  ABISELECT(52624,37228),
  0,
  (VTBL_ENTRY)&(_ZTI9S20657C10[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
  (VTBL_ENTRY)&_ZN9S20657C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20657C10D0Ev,
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C69S20657C109S20657C118S20657C4__A2__8S20657C2[] = {
  ABISELECT(52528,37176),
  0,
  (VTBL_ENTRY)&(_ZTI8S20657C6[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C89S20657C109S20657C118S20657C4__A2__8S20657C2[] = {
  ABISELECT(52560,37200),
  0,
  (VTBL_ENTRY)&(_ZTI8S20657C8[0]),
  (VTBL_ENTRY)&_ZN8S20657C82v2Ev,
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C7__8S20657C89S20657C109S20657C118S20657C4__A2__8S20657C2[] = {
  0,
  ABISELECT(-52560,-37200),
  (VTBL_ENTRY)&(_ZTI8S20657C8[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C6__A__9S20657C109S20657C118S20657C4__A1__8S20657C2[] = {
  ABISELECT(52528,37176),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI9S20657C10[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C8__A__9S20657C109S20657C118S20657C4__A1__8S20657C2[] = {
  ABISELECT(52560,37200),
  ABISELECT(-608,-412),
  (VTBL_ENTRY)&(_ZTI9S20657C10[0]),
  (VTBL_ENTRY)&_ZN8S20657C82v2Ev,
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C7__A2__9S20657C109S20657C118S20657C4__A1__8S20657C2[] = {
  0,
  ABISELECT(-53168,-37612),
  (VTBL_ENTRY)&(_ZTI9S20657C10[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20657C5__9S20657C109S20657C118S20657C4__A1__8S20657C2[] = {
  ABISELECT(624,420),
  ABISELECT(528,368),
  ABISELECT(16,8),
  -16,
  ABISELECT(-52640,-37244),
  (VTBL_ENTRY)&(_ZTI9S20657C10[0]),
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C6__A1__9S20657C109S20657C118S20657C4__A1__8S20657C2[] = {
  0,
  ABISELECT(-32,-24),
  ABISELECT(-52656,-37252),
  (VTBL_ENTRY)&(_ZTI9S20657C10[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C8__A1__9S20657C109S20657C118S20657C4__A1__8S20657C2[] = {
  0,
  ABISELECT(-96,-52),
  ABISELECT(-53264,-37664),
  (VTBL_ENTRY)&(_ZTI9S20657C10[0]),
  (VTBL_ENTRY)&_ZN8S20657C82v2Ev,
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C69S20657C118S20657C4__A3__8S20657C2[] = {
  ABISELECT(49920,35288),
  0,
  (VTBL_ENTRY)&(_ZTI8S20657C6[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C6__9S20657C118S20657C4__8S20657C2[] = {
  0,
  ABISELECT(-32,-24),
  ABISELECT(-52672,-37260),
  (VTBL_ENTRY)&(_ZTI9S20657C11[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C7__A1__9S20657C118S20657C4__8S20657C2[] = {
  0,
  ABISELECT(-53184,-37620),
  (VTBL_ENTRY)&(_ZTI9S20657C11[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C8__9S20657C118S20657C4__8S20657C2[] = {
  0,
  ABISELECT(-96,-52),
  ABISELECT(-53280,-37672),
  (VTBL_ENTRY)&(_ZTI9S20657C11[0]),
  (VTBL_ENTRY)&_ZN8S20657C82v2Ev,
};
extern void _ZN8S20657C72v1Ev();
extern void ABISELECT(_ZThn16_N9S20657C11D1Ev,_ZThn8_N9S20657C11D1Ev)();
extern void ABISELECT(_ZThn16_N9S20657C11D0Ev,_ZThn8_N9S20657C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20657C10__9S20657C118S20657C4__8S20657C2[] = {
  ABISELECT(53264,37664),
  ABISELECT(52656,37252),
  ABISELECT(52640,37244),
  ABISELECT(53168,37612),
  ABISELECT(52624,37228),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20657C11[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S20657C11D1Ev,_ZThn8_N9S20657C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S20657C11D0Ev,_ZThn8_N9S20657C11D0Ev),
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C69S20657C10__A1__9S20657C118S20657C4__8S20657C2[] = {
  ABISELECT(52528,37176),
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI9S20657C11[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C89S20657C10__A1__9S20657C118S20657C4__8S20657C2[] = {
  ABISELECT(52560,37200),
  ABISELECT(-624,-420),
  (VTBL_ENTRY)&(_ZTI9S20657C11[0]),
  (VTBL_ENTRY)&_ZN8S20657C82v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20657C5__A1__9S20657C118S20657C4__8S20657C2[] = {
  ABISELECT(624,420),
  ABISELECT(528,368),
  ABISELECT(16,8),
  -16,
  ABISELECT(-52656,-37252),
  (VTBL_ENTRY)&(_ZTI9S20657C11[0]),
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C6__A__9S20657C118S20657C4__8S20657C2[] = {
  ABISELECT(49920,35288),
  ABISELECT(-2720,-1948),
  (VTBL_ENTRY)&(_ZTI9S20657C11[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20657C5__8S20657C4__8S20657C2[] = {
  ABISELECT(624,420),
  ABISELECT(528,368),
  ABISELECT(16,8),
  -16,
  ABISELECT(-55936,-39584),
  (VTBL_ENTRY)&(_ZTI8S20657C4[0]),
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C6__8S20657C4__8S20657C2[] = {
  0,
  ABISELECT(-32,-24),
  ABISELECT(-55952,-39592),
  (VTBL_ENTRY)&(_ZTI8S20657C4[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C7__A1__8S20657C4__8S20657C2[] = {
  0,
  ABISELECT(-56464,-39952),
  (VTBL_ENTRY)&(_ZTI8S20657C4[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C8__8S20657C4__8S20657C2[] = {
  0,
  ABISELECT(-96,-52),
  ABISELECT(-56560,-40004),
  (VTBL_ENTRY)&(_ZTI8S20657C4[0]),
  (VTBL_ENTRY)&_ZN8S20657C82v2Ev,
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C69S20657C108S20657C9__A1__8S20657C4__8S20657C2[] = {
  ABISELECT(55824,39516),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI8S20657C4[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C89S20657C108S20657C9__A1__8S20657C4__8S20657C2[] = {
  ABISELECT(55856,39540),
  ABISELECT(-608,-412),
  (VTBL_ENTRY)&(_ZTI8S20657C4[0]),
  (VTBL_ENTRY)&_ZN8S20657C82v2Ev,
};
extern void _ZN9S20657C112v5Ev();
extern void ABISELECT(_ZThn3280_N8S20657C4D1Ev,_ZThn2332_N8S20657C4D1Ev)();
extern void ABISELECT(_ZThn3280_N8S20657C4D0Ev,_ZThn2332_N8S20657C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20657C11__8S20657C4__8S20657C2[] = {
  ABISELECT(52656,37252),
  ABISELECT(53280,37672),
  ABISELECT(53184,37620),
  ABISELECT(52672,37260),
  ABISELECT(52640,37236),
  ABISELECT(-3280,-2332),
  (VTBL_ENTRY)&(_ZTI8S20657C4[0]),
  (VTBL_ENTRY)&_ZN9S20657C112v5Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn3280_N8S20657C4D1Ev,_ZThn2332_N8S20657C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn3280_N8S20657C4D0Ev,_ZThn2332_N8S20657C4D0Ev),
};
extern void _ZN8S20657C72v1Ev();
extern void ABISELECT(_ZThn3296_N8S20657C4D1Ev,_ZThn2340_N8S20657C4D1Ev)();
extern void ABISELECT(_ZThn3296_N8S20657C4D0Ev,_ZThn2340_N8S20657C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20657C109S20657C11__A1__8S20657C4__8S20657C2[] = {
  ABISELECT(53264,37664),
  ABISELECT(52656,37252),
  ABISELECT(52640,37244),
  ABISELECT(53168,37612),
  ABISELECT(52624,37228),
  ABISELECT(-3296,-2340),
  (VTBL_ENTRY)&(_ZTI8S20657C4[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn3296_N8S20657C4D1Ev,_ZThn2340_N8S20657C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn3296_N8S20657C4D0Ev,_ZThn2340_N8S20657C4D0Ev),
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C69S20657C109S20657C11__A2__8S20657C4__8S20657C2[] = {
  ABISELECT(52528,37176),
  ABISELECT(-3392,-2392),
  (VTBL_ENTRY)&(_ZTI8S20657C4[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C89S20657C109S20657C11__A2__8S20657C4__8S20657C2[] = {
  ABISELECT(52560,37200),
  ABISELECT(-3904,-2752),
  (VTBL_ENTRY)&(_ZTI8S20657C4[0]),
  (VTBL_ENTRY)&_ZN8S20657C82v2Ev,
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C69S20657C11__A3__8S20657C4__8S20657C2[] = {
  ABISELECT(49920,35288),
  ABISELECT(-6000,-4280),
  (VTBL_ENTRY)&(_ZTI8S20657C4[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20657C5__8S20657C2[] = {
  ABISELECT(624,420),
  ABISELECT(528,368),
  ABISELECT(16,8),
  -16,
  0,
  (VTBL_ENTRY)&(_ZTI8S20657C5[0]),
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C6__8S20657C5__8S20657C2[] = {
  0,
  ABISELECT(-32,-24),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20657C5[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C7__A1__8S20657C5__8S20657C2[] = {
  0,
  ABISELECT(-528,-368),
  (VTBL_ENTRY)&(_ZTI8S20657C5[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C8__8S20657C5__8S20657C2[] = {
  0,
  ABISELECT(-96,-52),
  ABISELECT(-624,-420),
  (VTBL_ENTRY)&(_ZTI8S20657C5[0]),
  (VTBL_ENTRY)&_ZN8S20657C82v2Ev,
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C6__8S20657C2[] = {
  ABISELECT(-32,-24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20657C6[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C8__8S20657C2[] = {
  ABISELECT(-96,-52),
  0,
  (VTBL_ENTRY)&(_ZTI8S20657C8[0]),
  (VTBL_ENTRY)&_ZN8S20657C82v2Ev,
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C7__8S20657C8__8S20657C2[] = {
  0,
  ABISELECT(96,52),
  (VTBL_ENTRY)&(_ZTI8S20657C8[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
static  VTT_ENTRY vtt_S20657C2[] = {
  {&(_ZTV8S20657C2[7]),  7,76},
  {&(_tg__ZTV8S20657C4__8S20657C2[7]),  7,12},
  {&(_tg__ZTV8S20657C98S20657C4__8S20657C2[7]),  7,12},
  {&(_tg__ZTV9S20657C108S20657C98S20657C4__8S20657C2[7]),  7,10},
  {&(_tg__ZTV8S20657C69S20657C108S20657C98S20657C4__A1__8S20657C2[3]),  3,4},
  {&(_tg__ZTV8S20657C89S20657C108S20657C98S20657C4__A1__8S20657C2[3]),  3,4},
  {&(_tg__ZTV8S20657C7__8S20657C89S20657C108S20657C98S20657C4__A1__8S20657C2[3]),  3,4},
  {&(_tg__ZTV8S20657C6__A__9S20657C108S20657C98S20657C4__8S20657C2[3]),  3,4},
  {&(_tg__ZTV8S20657C8__A__9S20657C108S20657C98S20657C4__8S20657C2[3]),  3,4},
  {&(_tg__ZTV8S20657C7__A2__9S20657C108S20657C98S20657C4__8S20657C2[3]),  3,4},
  {&(_tg__ZTV8S20657C5__9S20657C108S20657C98S20657C4__8S20657C2[6]),  6,6},
  {&(_tg__ZTV8S20657C6__A1__9S20657C108S20657C98S20657C4__8S20657C2[4]),  4,5},
  {&(_tg__ZTV8S20657C8__A1__9S20657C108S20657C98S20657C4__8S20657C2[4]),  4,5},
  {&(_tg__ZTV8S20657C69S20657C10__8S20657C98S20657C4__8S20657C2[3]),  3,4},
  {&(_tg__ZTV8S20657C89S20657C10__8S20657C98S20657C4__8S20657C2[3]),  3,4},
  {&(_tg__ZTV8S20657C7__A2__8S20657C98S20657C4__8S20657C2[3]),  3,4},
  {&(_tg__ZTV8S20657C5__8S20657C98S20657C4__8S20657C2[6]),  6,6},
  {&(_tg__ZTV8S20657C6__A1__8S20657C98S20657C4__8S20657C2[4]),  4,5},
  {&(_tg__ZTV8S20657C8__A1__8S20657C98S20657C4__8S20657C2[4]),  4,5},
  {&(_tg__ZTV9S20657C118S20657C4__8S20657C2[7]),  7,10},
  {&(_tg__ZTV8S20657C59S20657C118S20657C4__A1__8S20657C2[6]),  6,6},
  {&(_tg__ZTV8S20657C6__8S20657C59S20657C118S20657C4__A1__8S20657C2[4]),  4,5},
  {&(_tg__ZTV8S20657C7__A1__8S20657C59S20657C118S20657C4__A1__8S20657C2[3]),  3,4},
  {&(_tg__ZTV8S20657C8__8S20657C59S20657C118S20657C4__A1__8S20657C2[4]),  4,5},
  {&(_tg__ZTV9S20657C109S20657C118S20657C4__A1__8S20657C2[7]),  7,10},
  {&(_tg__ZTV8S20657C69S20657C109S20657C118S20657C4__A2__8S20657C2[3]),  3,4},
  {&(_tg__ZTV8S20657C89S20657C109S20657C118S20657C4__A2__8S20657C2[3]),  3,4},
  {&(_tg__ZTV8S20657C7__8S20657C89S20657C109S20657C118S20657C4__A2__8S20657C2[3]),  3,4},
  {&(_tg__ZTV8S20657C6__A__9S20657C109S20657C118S20657C4__A1__8S20657C2[3]),  3,4},
  {&(_tg__ZTV8S20657C8__A__9S20657C109S20657C118S20657C4__A1__8S20657C2[3]),  3,4},
  {&(_tg__ZTV8S20657C7__A2__9S20657C109S20657C118S20657C4__A1__8S20657C2[3]),  3,4},
  {&(_tg__ZTV8S20657C5__9S20657C109S20657C118S20657C4__A1__8S20657C2[6]),  6,6},
  {&(_tg__ZTV8S20657C6__A1__9S20657C109S20657C118S20657C4__A1__8S20657C2[4]),  4,5},
  {&(_tg__ZTV8S20657C8__A1__9S20657C109S20657C118S20657C4__A1__8S20657C2[4]),  4,5},
  {&(_tg__ZTV8S20657C69S20657C118S20657C4__A3__8S20657C2[3]),  3,4},
  {&(_tg__ZTV8S20657C6__9S20657C118S20657C4__8S20657C2[4]),  4,5},
  {&(_tg__ZTV8S20657C7__A1__9S20657C118S20657C4__8S20657C2[3]),  3,4},
  {&(_tg__ZTV8S20657C8__9S20657C118S20657C4__8S20657C2[4]),  4,5},
  {&(_tg__ZTV9S20657C10__9S20657C118S20657C4__8S20657C2[7]),  7,10},
  {&(_tg__ZTV8S20657C69S20657C10__A1__9S20657C118S20657C4__8S20657C2[3]),  3,4},
  {&(_tg__ZTV8S20657C89S20657C10__A1__9S20657C118S20657C4__8S20657C2[3]),  3,4},
  {&(_tg__ZTV8S20657C5__A1__9S20657C118S20657C4__8S20657C2[6]),  6,6},
  {&(_tg__ZTV8S20657C6__A__9S20657C118S20657C4__8S20657C2[3]),  3,4},
  {&(_tg__ZTV8S20657C5__8S20657C4__8S20657C2[6]),  6,6},
  {&(_tg__ZTV8S20657C6__8S20657C4__8S20657C2[4]),  4,5},
  {&(_tg__ZTV8S20657C7__A1__8S20657C4__8S20657C2[3]),  3,4},
  {&(_tg__ZTV8S20657C8__8S20657C4__8S20657C2[4]),  4,5},
  {&(_tg__ZTV8S20657C69S20657C108S20657C9__A1__8S20657C4__8S20657C2[3]),  3,4},
  {&(_tg__ZTV8S20657C89S20657C108S20657C9__A1__8S20657C4__8S20657C2[3]),  3,4},
  {&(_tg__ZTV9S20657C11__8S20657C4__8S20657C2[7]),  7,10},
  {&(_tg__ZTV9S20657C109S20657C11__A1__8S20657C4__8S20657C2[7]),  7,10},
  {&(_tg__ZTV8S20657C69S20657C109S20657C11__A2__8S20657C4__8S20657C2[3]),  3,4},
  {&(_tg__ZTV8S20657C89S20657C109S20657C11__A2__8S20657C4__8S20657C2[3]),  3,4},
  {&(_tg__ZTV8S20657C69S20657C11__A3__8S20657C4__8S20657C2[3]),  3,4},
  {&(_ZTV8S20657C2[62]),  62,76},
  {&(_ZTV8S20657C2[66]),  66,76},
  {&(_ZTV8S20657C2[70]),  70,76},
  {&(_ZTV8S20657C2[75]),  75,76},
  {&(_ZTV8S20657C2[16]),  16,76},
  {&(_ZTV8S20657C2[20]),  20,76},
  {&(_ZTV8S20657C2[28]),  28,76},
  {&(_ZTV8S20657C2[38]),  38,76},
  {&(_ZTV8S20657C2[44]),  44,76},
  {&(_ZTV8S20657C2[48]),  48,76},
  {&(_ZTV8S20657C2[52]),  52,76},
  {&(_tg__ZTV8S20657C5__8S20657C2[6]),  6,6},
  {&(_tg__ZTV8S20657C6__8S20657C5__8S20657C2[4]),  4,5},
  {&(_tg__ZTV8S20657C7__A1__8S20657C5__8S20657C2[3]),  3,4},
  {&(_tg__ZTV8S20657C8__8S20657C5__8S20657C2[4]),  4,5},
  {&(_tg__ZTV8S20657C6__8S20657C2[3]),  3,4},
  {&(_tg__ZTV8S20657C8__8S20657C2[3]),  3,4},
  {&(_tg__ZTV8S20657C7__8S20657C8__8S20657C2[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S20657C2[];
extern  VTBL_ENTRY _ZTV8S20657C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20657C2[];
Class_Descriptor cd_S20657C2 = {  "S20657C2", // class name
  bases_S20657C2, 23,
  &(vtc_S20657C2[0]), // expected_vtbl_contents
  &(vtt_S20657C2[0]), // expected_vtt_contents
  ABISELECT(56848,40236), // object size
  NSPAIRA(_ZTI8S20657C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20657C2),76, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20657C2),72, //virtual table table var
  22, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20657C1  : virtual S20657C2 , S20657C14 {
  void *s20657c1f0;
  int s20657c1f1;
  long double s20657c1f2[2];
  virtual  ~S20657C1(); // _ZN8S20657C1D2Ev
  S20657C1(); // tgen
};
//SIG(1 S20657C1) C1{ VBC2{ VBC3{ m FL Fi Fc} BC4{ VBC3 VBC5{ VBC3 VBC6{ BC7{ v1 FD Fi:3 Fc:8 FD[2] FL} VBC3 Fc[10] Fi FC8{ VBC7 v2 FC3 FL FC3[7] Fp FL FC3 Fp Fc Fs Fi FC7} FL} VBC7 VBC8 Fp} BC9{ BC10{ BC7 VBC3 BC6 BC8 VBC5 vd FC8 FC5 Fp Fi FC7 FC8} vd v3 v4 Fp Fs:6 FC7 FD Fi FC3 FC8 Fp Fi Fp[2]} BC11{ BC5 BC10 BC6 BC7 v5 FC6[2] FC7 Fi FC3 Fp[10] Fi[2] FL FD FL Fi} FC12{} FC9 FL} vd v6 Fp FC6[3] FC13{ VBC14{ VBC3 VBC15{ BC16{ v10 FD Fi:3 Fc:8 FD[2] FL} VBC3 Fc[10] Fi FC17{ VBC16 v11 FC3 FL FC3[7] Fp FL FC3 Fp Fc Fs Fi FC16} FL} VBC16 VBC17 Fp} BC18{ BC16 VBC3 BC15 BC17 VBC14 vd FC17 FC14 Fp Fi FC16 FC17} BC19{ BC18 vd v12 v13 Fp Fs:6 FC16 FD Fi FC3 FC17 Fp Fi Fp[2]} v9 Fi Fc Fp Fl} Fi Fp Fi[3] Fp Fi Fs Fp FL FC20{ BC5 BC11 vd v7 v8 Fp[2] Fi Fc FC6 FC11 FD}[3]} BC20 vd Fp Fi FD[2]}


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

static void Test_S20657C1()
{
  extern Class_Descriptor cd_S20657C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4232,11970)];
    init_test(&cd_S20657C1, buf);
    S20657C1 *dp, &lv = *(dp=new (buf) S20657C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(67696,47876), "sizeof(S20657C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20657C1)");
    check_base_class_offset(lv, (S3490C4*)(S20657C2*), ABISELECT(66768,47208), "S20657C1");
    check_base_class_offset(lv, (S3490C4*)(S20657C4*)(S20657C2*), ABISELECT(66768,47208), "S20657C1");
    /*is_ambiguous_... S20657C1::S20657C5 */ AMB_check_base_class_offset(lv, (S3490C4*)(S20657C5*), ABISELECT(66768,47208), "S20657C1");
    /*is_ambiguous_... S20657C1::S20657C6 */ AMB_check_base_class_offset(lv, (S3490C4*)(S20657C6*), ABISELECT(66768,47208), "S20657C1");
    check_base_class_offset(lv, (S3490C4*)(S20657C10*)(S20657C9*)(S20657C4*)(S20657C2*), ABISELECT(66768,47208), "S20657C1");
    /*is_ambiguous_... S20657C10::S20657C6 */ AMB_check_base_class_offset(lv, (S3490C4*)(S20657C6*)(S20657C10*)(S20657C9*)(S20657C4*)(S20657C2*), ABISELECT(66768,47208), "S20657C1");
    /*is_ambiguous_... S20657C11::S20657C5 */ AMB_check_base_class_offset(lv, (S3490C4*)(S20657C5*)(S20657C11*)(S20657C4*)(S20657C2*), ABISELECT(66768,47208), "S20657C1");
    check_base_class_offset(lv, (S3490C4*)(S20657C10*)(S20657C11*)(S20657C4*)(S20657C2*), ABISELECT(66768,47208), "S20657C1");
    /*is_ambiguous_... S20657C10::S20657C6 */ AMB_check_base_class_offset(lv, (S3490C4*)(S20657C6*)(S20657C10*)(S20657C11*)(S20657C4*)(S20657C2*), ABISELECT(66768,47208), "S20657C1");
    /*is_ambiguous_... S20657C11::S20657C6 */ AMB_check_base_class_offset(lv, (S3490C4*)(S20657C6*)(S20657C11*)(S20657C4*)(S20657C2*), ABISELECT(66768,47208), "S20657C1");
    /*is_ambiguous_... S20657C14::S20657C5 */ AMB_check_base_class_offset(lv, (S3490C4*)(S20657C5*)(S20657C14*), ABISELECT(66768,47208), "S20657C1");
    /*is_ambiguous_... S20657C11::S20657C5 */ AMB_check_base_class_offset(lv, (S3490C4*)(S20657C5*)(S20657C11*)(S20657C14*), ABISELECT(66768,47208), "S20657C1");
    check_base_class_offset(lv, (S3490C4*)(S20657C10*)(S20657C11*)(S20657C14*), ABISELECT(66768,47208), "S20657C1");
    /*is_ambiguous_... S20657C10::S20657C6 */ AMB_check_base_class_offset(lv, (S3490C4*)(S20657C6*)(S20657C10*)(S20657C11*)(S20657C14*), ABISELECT(66768,47208), "S20657C1");
    /*is_ambiguous_... S20657C11::S20657C6 */ AMB_check_base_class_offset(lv, (S3490C4*)(S20657C6*)(S20657C11*)(S20657C14*), ABISELECT(66768,47208), "S20657C1");
    /*is_ambiguous_... S20657C1::S20657C6 */ AMB_check_base_class_offset(lv, (S20657C7*)(S20657C6*), ABISELECT(66800,47232), "S20657C1");
    /*is_ambiguous_... S20657C1::S20657C5 */ AMB_check_base_class_offset(lv, (S20657C6*)(S20657C5*), ABISELECT(66800,47232), "S20657C1");
    /*is_ambiguous_... S20657C11::S20657C5 */ AMB_check_base_class_offset(lv, (S20657C6*)(S20657C5*)(S20657C11*)(S20657C4*)(S20657C2*), ABISELECT(66800,47232), "S20657C1");
    /*is_ambiguous_... S20657C14::S20657C5 */ AMB_check_base_class_offset(lv, (S20657C6*)(S20657C5*)(S20657C14*), ABISELECT(66800,47232), "S20657C1");
    /*is_ambiguous_... S20657C11::S20657C5 */ AMB_check_base_class_offset(lv, (S20657C6*)(S20657C5*)(S20657C11*)(S20657C14*), ABISELECT(66800,47232), "S20657C1");
    /*is_ambiguous_... S20657C1::S20657C5 */ AMB_check_base_class_offset(lv, (S20657C7*)(S20657C5*), ABISELECT(67312,47592), "S20657C1");
    /*is_ambiguous_... S20657C1::S20657C8 */ AMB_check_base_class_offset(lv, (S20657C7*)(S20657C8*), ABISELECT(67312,47592), "S20657C1");
    /*is_ambiguous_... S20657C10::S20657C8 */ AMB_check_base_class_offset(lv, (S20657C7*)(S20657C8*)(S20657C10*)(S20657C9*)(S20657C4*)(S20657C2*), ABISELECT(67312,47592), "S20657C1");
    /*is_ambiguous_... S20657C11::S20657C5 */ AMB_check_base_class_offset(lv, (S20657C7*)(S20657C5*)(S20657C11*)(S20657C4*)(S20657C2*), ABISELECT(67312,47592), "S20657C1");
    /*is_ambiguous_... S20657C10::S20657C8 */ AMB_check_base_class_offset(lv, (S20657C7*)(S20657C8*)(S20657C10*)(S20657C11*)(S20657C4*)(S20657C2*), ABISELECT(67312,47592), "S20657C1");
    /*is_ambiguous_... S20657C14::S20657C5 */ AMB_check_base_class_offset(lv, (S20657C7*)(S20657C5*)(S20657C14*), ABISELECT(67312,47592), "S20657C1");
    /*is_ambiguous_... S20657C11::S20657C5 */ AMB_check_base_class_offset(lv, (S20657C7*)(S20657C5*)(S20657C11*)(S20657C14*), ABISELECT(67312,47592), "S20657C1");
    /*is_ambiguous_... S20657C10::S20657C8 */ AMB_check_base_class_offset(lv, (S20657C7*)(S20657C8*)(S20657C10*)(S20657C11*)(S20657C14*), ABISELECT(67312,47592), "S20657C1");
    /*is_ambiguous_... S20657C1::S20657C5 */ AMB_check_base_class_offset(lv, (S20657C8*)(S20657C5*), ABISELECT(67408,47644), "S20657C1");
    /*is_ambiguous_... S20657C11::S20657C5 */ AMB_check_base_class_offset(lv, (S20657C8*)(S20657C5*)(S20657C11*)(S20657C4*)(S20657C2*), ABISELECT(67408,47644), "S20657C1");
    /*is_ambiguous_... S20657C14::S20657C5 */ AMB_check_base_class_offset(lv, (S20657C8*)(S20657C5*)(S20657C14*), ABISELECT(67408,47644), "S20657C1");
    /*is_ambiguous_... S20657C11::S20657C5 */ AMB_check_base_class_offset(lv, (S20657C8*)(S20657C5*)(S20657C11*)(S20657C14*), ABISELECT(67408,47644), "S20657C1");
    /*is_ambiguous_... S20657C4::S20657C5 */ AMB_check_base_class_offset(lv, (S20657C5*)(S20657C4*)(S20657C2*), ABISELECT(66784,47224), "S20657C1");
    check_base_class_offset(lv, (S20657C5*)(S20657C10*)(S20657C9*)(S20657C4*)(S20657C2*), ABISELECT(66784,47224), "S20657C1");
    check_base_class_offset(lv, (S20657C5*)(S20657C10*)(S20657C11*)(S20657C4*)(S20657C2*), ABISELECT(66784,47224), "S20657C1");
    check_base_class_offset(lv, (S20657C5*)(S20657C10*)(S20657C11*)(S20657C14*), ABISELECT(66784,47224), "S20657C1");
    /*is_ambiguous_... S20657C10::S20657C7 */ AMB_check_base_class_offset(lv, (S20657C7*)(S20657C10*)(S20657C9*)(S20657C4*)(S20657C2*), ABISELECT(10848,7640), "S20657C1");
    /*is_ambiguous_... S20657C10::S20657C6 */ AMB_check_base_class_offset(lv, (S20657C7*)(S20657C6*)(S20657C10*)(S20657C9*)(S20657C4*)(S20657C2*), ABISELECT(10944,7692), "S20657C1");
    /*is_ambiguous_... S20657C10::S20657C6 */ AMB_check_base_class_offset(lv, (S20657C6*)(S20657C10*)(S20657C9*)(S20657C4*)(S20657C2*), ABISELECT(10944,7692), "S20657C1");
    /*is_ambiguous_... S20657C10::S20657C8 */ AMB_check_base_class_offset(lv, (S20657C8*)(S20657C10*)(S20657C9*)(S20657C4*)(S20657C2*), ABISELECT(11456,8052), "S20657C1");
    check_base_class_offset(lv, (S20657C10*)(S20657C9*)(S20657C4*)(S20657C2*), ABISELECT(10848,7640), "S20657C1");
    check_base_class_offset(lv, (S20657C9*)(S20657C4*)(S20657C2*), ABISELECT(10848,7640), "S20657C1");
    /*is_ambiguous_... S20657C11::S20657C5 */ AMB_check_base_class_offset(lv, (S20657C5*)(S20657C11*)(S20657C4*)(S20657C2*), ABISELECT(14128,9972), "S20657C1");
    /*is_ambiguous_... S20657C10::S20657C7 */ AMB_check_base_class_offset(lv, (S20657C7*)(S20657C10*)(S20657C11*)(S20657C4*)(S20657C2*), ABISELECT(14144,9980), "S20657C1");
    /*is_ambiguous_... S20657C10::S20657C6 */ AMB_check_base_class_offset(lv, (S20657C7*)(S20657C6*)(S20657C10*)(S20657C11*)(S20657C4*)(S20657C2*), ABISELECT(14240,10032), "S20657C1");
    /*is_ambiguous_... S20657C10::S20657C6 */ AMB_check_base_class_offset(lv, (S20657C6*)(S20657C10*)(S20657C11*)(S20657C4*)(S20657C2*), ABISELECT(14240,10032), "S20657C1");
    /*is_ambiguous_... S20657C10::S20657C8 */ AMB_check_base_class_offset(lv, (S20657C8*)(S20657C10*)(S20657C11*)(S20657C4*)(S20657C2*), ABISELECT(14752,10392), "S20657C1");
    check_base_class_offset(lv, (S20657C10*)(S20657C11*)(S20657C4*)(S20657C2*), ABISELECT(14144,9980), "S20657C1");
    /*is_ambiguous_... S20657C11::S20657C6 */ AMB_check_base_class_offset(lv, (S20657C7*)(S20657C6*)(S20657C11*)(S20657C4*)(S20657C2*), ABISELECT(16848,11920), "S20657C1");
    /*is_ambiguous_... S20657C11::S20657C6 */ AMB_check_base_class_offset(lv, (S20657C6*)(S20657C11*)(S20657C4*)(S20657C2*), ABISELECT(16848,11920), "S20657C1");
    /*is_ambiguous_... S20657C11::S20657C7 */ AMB_check_base_class_offset(lv, (S20657C7*)(S20657C11*)(S20657C4*)(S20657C2*), ABISELECT(17360,12280), "S20657C1");
    check_base_class_offset(lv, (S20657C11*)(S20657C4*)(S20657C2*), ABISELECT(14128,9972), "S20657C1");
    check_base_class_offset(lv, (S20657C4*)(S20657C2*), ABISELECT(10848,7640), "S20657C1");
    check_base_class_offset(lv, (S20657C2*), ABISELECT(10848,7640), "S20657C1");
    /*is_ambiguous_... S20657C14::S20657C5 */ AMB_check_base_class_offset(lv, (S20657C5*)(S20657C14*), 0, "S20657C1");
    /*is_ambiguous_... S20657C11::S20657C5 */ AMB_check_base_class_offset(lv, (S20657C5*)(S20657C11*)(S20657C14*), ABISELECT(16,8), "S20657C1");
    /*is_ambiguous_... S20657C10::S20657C7 */ AMB_check_base_class_offset(lv, (S20657C7*)(S20657C10*)(S20657C11*)(S20657C14*), ABISELECT(32,16), "S20657C1");
    /*is_ambiguous_... S20657C10::S20657C6 */ AMB_check_base_class_offset(lv, (S20657C7*)(S20657C6*)(S20657C10*)(S20657C11*)(S20657C14*), ABISELECT(128,68), "S20657C1");
    /*is_ambiguous_... S20657C10::S20657C6 */ AMB_check_base_class_offset(lv, (S20657C6*)(S20657C10*)(S20657C11*)(S20657C14*), ABISELECT(128,68), "S20657C1");
    /*is_ambiguous_... S20657C10::S20657C8 */ AMB_check_base_class_offset(lv, (S20657C8*)(S20657C10*)(S20657C11*)(S20657C14*), ABISELECT(640,428), "S20657C1");
    check_base_class_offset(lv, (S20657C10*)(S20657C11*)(S20657C14*), ABISELECT(32,16), "S20657C1");
    /*is_ambiguous_... S20657C11::S20657C6 */ AMB_check_base_class_offset(lv, (S20657C7*)(S20657C6*)(S20657C11*)(S20657C14*), ABISELECT(2736,1956), "S20657C1");
    /*is_ambiguous_... S20657C11::S20657C6 */ AMB_check_base_class_offset(lv, (S20657C6*)(S20657C11*)(S20657C14*), ABISELECT(2736,1956), "S20657C1");
    /*is_ambiguous_... S20657C11::S20657C7 */ AMB_check_base_class_offset(lv, (S20657C7*)(S20657C11*)(S20657C14*), ABISELECT(3248,2316), "S20657C1");
    check_base_class_offset(lv, (S20657C11*)(S20657C14*), ABISELECT(16,8), "S20657C1");
    check_base_class_offset(lv, (S20657C14*), 0, "S20657C1");
    check_field_offset(lv, s20657c1f0, ABISELECT(10800,7608), "S20657C1.s20657c1f0");
    check_field_offset(lv, s20657c1f1, ABISELECT(10808,7612), "S20657C1.s20657c1f1");
    check_field_offset(lv, s20657c1f2, ABISELECT(10816,7616), "S20657C1.s20657c1f2");
    test_class_info(&lv, &cd_S20657C1);
    dp->~S20657C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20657C1(Test_S20657C1, "S20657C1", ABISELECT(67696,47876));

#else // __cplusplus

extern void _ZN8S20657C1C1Ev();
extern void _ZN8S20657C1D2Ev();
Name_Map name_map_S20657C1[] = {
  NSPAIR(_ZN8S20657C1C1Ev),
  NSPAIR(_ZN8S20657C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3490C4;
extern VTBL_ENTRY _ZTI7S3490C4[];
extern Class_Descriptor cd_S20657C7;
extern VTBL_ENTRY _ZTI8S20657C7[];
extern  VTBL_ENTRY _ZTV8S20657C7[];
extern Class_Descriptor cd_S20657C6;
extern VTBL_ENTRY _ZTI8S20657C6[];
extern  VTBL_ENTRY _ZTV8S20657C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20657C6[];
extern Class_Descriptor cd_S20657C7;
extern VTBL_ENTRY _ZTI8S20657C7[];
extern  VTBL_ENTRY _ZTV8S20657C7[];
extern Class_Descriptor cd_S20657C8;
extern VTBL_ENTRY _ZTI8S20657C8[];
extern  VTBL_ENTRY _ZTV8S20657C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20657C8[];
extern Class_Descriptor cd_S20657C5;
extern VTBL_ENTRY _ZTI8S20657C5[];
extern  VTBL_ENTRY _ZTV8S20657C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20657C5[];
extern Class_Descriptor cd_S20657C7;
extern VTBL_ENTRY _ZTI8S20657C7[];
extern  VTBL_ENTRY _ZTV8S20657C7[];
extern Class_Descriptor cd_S20657C7;
extern VTBL_ENTRY _ZTI8S20657C7[];
extern  VTBL_ENTRY _ZTV8S20657C7[];
extern Class_Descriptor cd_S20657C6;
extern VTBL_ENTRY _ZTI8S20657C6[];
extern  VTBL_ENTRY _ZTV8S20657C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20657C6[];
extern Class_Descriptor cd_S20657C8;
extern VTBL_ENTRY _ZTI8S20657C8[];
extern  VTBL_ENTRY _ZTV8S20657C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20657C8[];
extern Class_Descriptor cd_S20657C10;
extern VTBL_ENTRY _ZTI9S20657C10[];
extern  VTBL_ENTRY _ZTV9S20657C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20657C10[];
extern Class_Descriptor cd_S20657C9;
extern VTBL_ENTRY _ZTI8S20657C9[];
extern  VTBL_ENTRY _ZTV8S20657C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20657C9[];
extern Class_Descriptor cd_S20657C5;
extern VTBL_ENTRY _ZTI8S20657C5[];
extern  VTBL_ENTRY _ZTV8S20657C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20657C5[];
extern Class_Descriptor cd_S20657C7;
extern VTBL_ENTRY _ZTI8S20657C7[];
extern  VTBL_ENTRY _ZTV8S20657C7[];
extern Class_Descriptor cd_S20657C7;
extern VTBL_ENTRY _ZTI8S20657C7[];
extern  VTBL_ENTRY _ZTV8S20657C7[];
extern Class_Descriptor cd_S20657C6;
extern VTBL_ENTRY _ZTI8S20657C6[];
extern  VTBL_ENTRY _ZTV8S20657C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20657C6[];
extern Class_Descriptor cd_S20657C8;
extern VTBL_ENTRY _ZTI8S20657C8[];
extern  VTBL_ENTRY _ZTV8S20657C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20657C8[];
extern Class_Descriptor cd_S20657C10;
extern VTBL_ENTRY _ZTI9S20657C10[];
extern  VTBL_ENTRY _ZTV9S20657C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20657C10[];
extern Class_Descriptor cd_S20657C7;
extern VTBL_ENTRY _ZTI8S20657C7[];
extern  VTBL_ENTRY _ZTV8S20657C7[];
extern Class_Descriptor cd_S20657C6;
extern VTBL_ENTRY _ZTI8S20657C6[];
extern  VTBL_ENTRY _ZTV8S20657C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20657C6[];
extern Class_Descriptor cd_S20657C7;
extern VTBL_ENTRY _ZTI8S20657C7[];
extern  VTBL_ENTRY _ZTV8S20657C7[];
extern Class_Descriptor cd_S20657C11;
extern VTBL_ENTRY _ZTI9S20657C11[];
extern  VTBL_ENTRY _ZTV9S20657C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20657C11[];
extern Class_Descriptor cd_S20657C4;
extern VTBL_ENTRY _ZTI8S20657C4[];
extern  VTBL_ENTRY _ZTV8S20657C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20657C4[];
extern Class_Descriptor cd_S20657C2;
extern VTBL_ENTRY _ZTI8S20657C2[];
extern  VTBL_ENTRY _ZTV8S20657C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20657C2[];
extern Class_Descriptor cd_S20657C5;
extern VTBL_ENTRY _ZTI8S20657C5[];
extern  VTBL_ENTRY _ZTV8S20657C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20657C5[];
extern Class_Descriptor cd_S20657C5;
extern VTBL_ENTRY _ZTI8S20657C5[];
extern  VTBL_ENTRY _ZTV8S20657C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20657C5[];
extern Class_Descriptor cd_S20657C7;
extern VTBL_ENTRY _ZTI8S20657C7[];
extern  VTBL_ENTRY _ZTV8S20657C7[];
extern Class_Descriptor cd_S20657C7;
extern VTBL_ENTRY _ZTI8S20657C7[];
extern  VTBL_ENTRY _ZTV8S20657C7[];
extern Class_Descriptor cd_S20657C6;
extern VTBL_ENTRY _ZTI8S20657C6[];
extern  VTBL_ENTRY _ZTV8S20657C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20657C6[];
extern Class_Descriptor cd_S20657C8;
extern VTBL_ENTRY _ZTI8S20657C8[];
extern  VTBL_ENTRY _ZTV8S20657C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20657C8[];
extern Class_Descriptor cd_S20657C10;
extern VTBL_ENTRY _ZTI9S20657C10[];
extern  VTBL_ENTRY _ZTV9S20657C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20657C10[];
extern Class_Descriptor cd_S20657C7;
extern VTBL_ENTRY _ZTI8S20657C7[];
extern  VTBL_ENTRY _ZTV8S20657C7[];
extern Class_Descriptor cd_S20657C6;
extern VTBL_ENTRY _ZTI8S20657C6[];
extern  VTBL_ENTRY _ZTV8S20657C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20657C6[];
extern Class_Descriptor cd_S20657C7;
extern VTBL_ENTRY _ZTI8S20657C7[];
extern  VTBL_ENTRY _ZTV8S20657C7[];
extern Class_Descriptor cd_S20657C11;
extern VTBL_ENTRY _ZTI9S20657C11[];
extern  VTBL_ENTRY _ZTV9S20657C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20657C11[];
extern Class_Descriptor cd_S20657C14;
extern VTBL_ENTRY _ZTI9S20657C14[];
extern  VTBL_ENTRY _ZTV9S20657C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20657C14[];
static Base_Class bases_S20657C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3490C4,    ABISELECT(66768,47208), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20657C7,    ABISELECT(66800,47232), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20657C6,    ABISELECT(66800,47232), //bcp->offset
    116, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    42, //bcp->index_in_construction_vtbl_array
    127, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20657C7,    ABISELECT(67312,47592), //bcp->offset
    121, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    43, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20657C8,    ABISELECT(67408,47644), //bcp->offset
    125, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    44, //bcp->index_in_construction_vtbl_array
    128, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20657C5,    ABISELECT(66784,47224), //bcp->offset
    110, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    41, //bcp->index_in_construction_vtbl_array
    123, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S20657C7,    ABISELECT(10848,7640), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S20657C7,    ABISELECT(10944,7692), //bcp->offset
    -1, //bcp->virtual_function_table_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_S20657C6,    ABISELECT(10944,7692), //bcp->offset
    67, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    45, //bcp->index_in_construction_vtbl_array
    62, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S20657C8,    ABISELECT(11456,8052), //bcp->offset
    71, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    46, //bcp->index_in_construction_vtbl_array
    63, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S20657C10,    ABISELECT(10848,7640), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    61, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S20657C9,    ABISELECT(10848,7640), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    60, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S20657C5,    ABISELECT(14128,9972), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    78, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S20657C7,    ABISELECT(14144,9980), //bcp->offset
    -1, //bcp->virtual_function_table_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
    17, //immediately_derived
  0, 0},
  {&cd_S20657C7,    ABISELECT(14240,10032), //bcp->offset
    -1, //bcp->virtual_function_table_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
    15, //immediately_derived
  0, 0},
  {&cd_S20657C6,    ABISELECT(14240,10032), //bcp->offset
    95, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    49, //bcp->index_in_construction_vtbl_array
    83, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S20657C8,    ABISELECT(14752,10392), //bcp->offset
    99, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    50, //bcp->index_in_construction_vtbl_array
    84, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S20657C10,    ABISELECT(14144,9980), //bcp->offset
    85, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    48, //bcp->index_in_construction_vtbl_array
    82, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S20657C7,    ABISELECT(16848,11920), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S20657C6,    ABISELECT(16848,11920), //bcp->offset
    103, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    51, //bcp->index_in_construction_vtbl_array
    92, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S20657C7,    ABISELECT(17360,12280), //bcp->offset
    107, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    52, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S20657C11,    ABISELECT(14128,9972), //bcp->offset
    75, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    47, //bcp->index_in_construction_vtbl_array
    77, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S20657C4,    ABISELECT(10848,7640), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    59, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S20657C2,    ABISELECT(10848,7640), //bcp->offset
    47, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    40, //bcp->index_in_construction_vtbl_array
    58, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20657C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    35, //immediately_derived
  0, 0},
  {&cd_S20657C5,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S20657C7,    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
    26, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S20657C7,    ABISELECT(128,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
    27, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S20657C6,    ABISELECT(128,68), //bcp->offset
    32, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    55, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    28, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S20657C8,    ABISELECT(640,428), //bcp->offset
    36, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    56, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    29, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S20657C10,    ABISELECT(32,16), //bcp->offset
    22, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    54, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    30, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S20657C7,    ABISELECT(2736,1956), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    31, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S20657C6,    ABISELECT(2736,1956), //bcp->offset
    40, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    57, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    32, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S20657C7,    ABISELECT(3248,2316), //bcp->offset
    44, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    33, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S20657C11,    ABISELECT(16,8), //bcp->offset
    12, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    53, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    34, //init_seq
    35, //immediately_derived
  0, 0},
  {&cd_S20657C14,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    35, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20657C1[];
extern void _ZN8S20657C1D1Ev();
extern void _ZN8S20657C1D0Ev();
extern void _ZN9S20657C142v7Ev();
extern void _ZN9S20657C142v8Ev();
extern void _ZN9S20657C112v5Ev();
extern void ABISELECT(_ZThn16_N8S20657C1D1Ev,_ZThn8_N8S20657C1D1Ev)();
extern void ABISELECT(_ZThn16_N8S20657C1D0Ev,_ZThn8_N8S20657C1D0Ev)();
extern void _ZN8S20657C72v1Ev();
extern void ABISELECT(_ZThn32_N8S20657C1D1Ev,_ZThn16_N8S20657C1D1Ev)();
extern void ABISELECT(_ZThn32_N8S20657C1D0Ev,_ZThn16_N8S20657C1D0Ev)();
extern void _ZN8S20657C72v1Ev();
extern void _ZN8S20657C82v2Ev();
extern void _ZN8S20657C72v1Ev();
extern void _ZN8S20657C72v1Ev();
extern void _ZN8S20657C72v1Ev();
extern void ABISELECT(_ZTv0_n72_N8S20657C1D1Ev,_ZTv0_n36_N8S20657C1D1Ev)();
extern void ABISELECT(_ZThn10848_N8S20657C1D1Ev,_ZThn7640_N8S20657C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S20657C1D0Ev,_ZTv0_n36_N8S20657C1D0Ev)();
extern void ABISELECT(_ZThn10848_N8S20657C1D0Ev,_ZThn7640_N8S20657C1D0Ev)() __attribute__((weak));
extern void _ZN8S20657C92v3Ev();
extern void _ZN8S20657C92v4Ev();
extern void _ZN8S20657C22v6Ev();
extern void _ZN8S20657C72v1Ev();
extern void _ZN8S20657C82v2Ev();
extern void _ZN9S20657C112v5Ev();
extern void ABISELECT(_ZTvn3280_n72_N8S20657C1D1Ev,_ZTvn2332_n36_N8S20657C1D1Ev)();
extern void ABISELECT(_ZTvn3280_n72_N8S20657C1D0Ev,_ZTvn2332_n36_N8S20657C1D0Ev)();
extern void _ZN8S20657C72v1Ev();
extern void ABISELECT(_ZTvn3296_n72_N8S20657C1D1Ev,_ZTvn2340_n36_N8S20657C1D1Ev)();
extern void ABISELECT(_ZTvn3296_n72_N8S20657C1D0Ev,_ZTvn2340_n36_N8S20657C1D0Ev)();
extern void _ZN8S20657C72v1Ev();
extern void _ZN8S20657C82v2Ev();
extern void _ZN8S20657C72v1Ev();
extern void _ZN8S20657C72v1Ev();
extern void _ZN8S20657C72v1Ev();
extern void _ZN8S20657C72v1Ev();
extern void _ZN8S20657C82v2Ev();
static  VTBL_ENTRY vtc_S20657C1[] = {
  ABISELECT(10848,7640),
  ABISELECT(66784,47224),
  ABISELECT(67408,47644),
  ABISELECT(67312,47592),
  ABISELECT(66800,47232),
  ABISELECT(66768,47208),
  0,
  (VTBL_ENTRY)&(_ZTI8S20657C1[0]),
  (VTBL_ENTRY)&_ZN8S20657C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20657C1D0Ev,
  (VTBL_ENTRY)&_ZN9S20657C142v7Ev,
  (VTBL_ENTRY)&_ZN9S20657C142v8Ev,
  ABISELECT(66768,47216),
  ABISELECT(67392,47636),
  ABISELECT(67296,47584),
  ABISELECT(66784,47224),
  ABISELECT(66752,47200),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20657C1[0]),
  (VTBL_ENTRY)&_ZN9S20657C112v5Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S20657C1D1Ev,_ZThn8_N8S20657C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S20657C1D0Ev,_ZThn8_N8S20657C1D0Ev),
  ABISELECT(67376,47628),
  ABISELECT(66768,47216),
  ABISELECT(66752,47208),
  ABISELECT(67280,47576),
  ABISELECT(66736,47192),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S20657C1[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S20657C1D1Ev,_ZThn16_N8S20657C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S20657C1D0Ev,_ZThn16_N8S20657C1D0Ev),
  ABISELECT(66640,47140),
  ABISELECT(-128,-68),
  (VTBL_ENTRY)&(_ZTI8S20657C1[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
  ABISELECT(66672,47164),
  ABISELECT(-640,-428),
  (VTBL_ENTRY)&(_ZTI8S20657C1[0]),
  (VTBL_ENTRY)&_ZN8S20657C82v2Ev,
  ABISELECT(64032,45252),
  ABISELECT(-2736,-1956),
  (VTBL_ENTRY)&(_ZTI8S20657C1[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
  ABISELECT(-3248,-2316),
  (VTBL_ENTRY)&(_ZTI8S20657C1[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
  0,
  ABISELECT(3280,2332),
  0,
  0,
  ABISELECT(608,412),
  ABISELECT(-10848,-7640),
  0,
  ABISELECT(56560,40004),
  ABISELECT(55952,39592),
  ABISELECT(55936,39584),
  ABISELECT(56464,39952),
  ABISELECT(55920,39568),
  ABISELECT(-10848,-7640),
  (VTBL_ENTRY)&(_ZTI8S20657C1[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20657C1D1Ev,_ZTv0_n36_N8S20657C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20657C1D0Ev,_ZTv0_n36_N8S20657C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20657C92v3Ev,
  (VTBL_ENTRY)&_ZN8S20657C92v4Ev,
  (VTBL_ENTRY)&_ZN8S20657C22v6Ev,
  ABISELECT(55824,39516),
  ABISELECT(-10944,-7692),
  (VTBL_ENTRY)&(_ZTI8S20657C1[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
  ABISELECT(55856,39540),
  ABISELECT(-11456,-8052),
  (VTBL_ENTRY)&(_ZTI8S20657C1[0]),
  (VTBL_ENTRY)&_ZN8S20657C82v2Ev,
  ABISELECT(52656,37252),
  ABISELECT(53280,37672),
  ABISELECT(53184,37620),
  ABISELECT(52672,37260),
  ABISELECT(52640,37236),
  ABISELECT(-14128,-9972),
  (VTBL_ENTRY)&(_ZTI8S20657C1[0]),
  (VTBL_ENTRY)&_ZN9S20657C112v5Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn3280_n72_N8S20657C1D1Ev,_ZTvn2332_n36_N8S20657C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn3280_n72_N8S20657C1D0Ev,_ZTvn2332_n36_N8S20657C1D0Ev),
  ABISELECT(53264,37664),
  ABISELECT(52656,37252),
  ABISELECT(52640,37244),
  ABISELECT(53168,37612),
  ABISELECT(52624,37228),
  ABISELECT(-14144,-9980),
  (VTBL_ENTRY)&(_ZTI8S20657C1[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn3296_n72_N8S20657C1D1Ev,_ZTvn2340_n36_N8S20657C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn3296_n72_N8S20657C1D0Ev,_ZTvn2340_n36_N8S20657C1D0Ev),
  ABISELECT(52528,37176),
  ABISELECT(-14240,-10032),
  (VTBL_ENTRY)&(_ZTI8S20657C1[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
  ABISELECT(52560,37200),
  ABISELECT(-14752,-10392),
  (VTBL_ENTRY)&(_ZTI8S20657C1[0]),
  (VTBL_ENTRY)&_ZN8S20657C82v2Ev,
  ABISELECT(49920,35288),
  ABISELECT(-16848,-11920),
  (VTBL_ENTRY)&(_ZTI8S20657C1[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
  ABISELECT(-17360,-12280),
  (VTBL_ENTRY)&(_ZTI8S20657C1[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
  ABISELECT(624,420),
  ABISELECT(528,368),
  ABISELECT(16,8),
  -16,
  ABISELECT(-66784,-47224),
  (VTBL_ENTRY)&(_ZTI8S20657C1[0]),
  0,
  ABISELECT(-32,-24),
  ABISELECT(-66800,-47232),
  (VTBL_ENTRY)&(_ZTI8S20657C1[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
  0,
  ABISELECT(-67312,-47592),
  (VTBL_ENTRY)&(_ZTI8S20657C1[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
  0,
  ABISELECT(-96,-52),
  ABISELECT(-67408,-47644),
  (VTBL_ENTRY)&(_ZTI8S20657C1[0]),
  (VTBL_ENTRY)&_ZN8S20657C82v2Ev,
};
extern VTBL_ENTRY _ZTV8S20657C1[];
extern void _ZN9S20657C14D1Ev();
extern void _ZN9S20657C14D0Ev();
extern void _ZN9S20657C142v7Ev();
extern void _ZN9S20657C142v8Ev();
static  VTBL_ENTRY _tg__ZTV9S20657C14__8S20657C1[] = {
  ABISELECT(66784,47224),
  ABISELECT(67408,47644),
  ABISELECT(67312,47592),
  ABISELECT(66800,47232),
  ABISELECT(66768,47208),
  0,
  (VTBL_ENTRY)&(_ZTI9S20657C14[0]),
  (VTBL_ENTRY)&_ZN9S20657C14D1Ev,
  (VTBL_ENTRY)&_ZN9S20657C14D0Ev,
  (VTBL_ENTRY)&_ZN9S20657C142v7Ev,
  (VTBL_ENTRY)&_ZN9S20657C142v8Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20657C59S20657C14__A2__8S20657C1[] = {
  ABISELECT(67408,47644),
  ABISELECT(67312,47592),
  ABISELECT(66800,47232),
  ABISELECT(66768,47208),
  0,
  (VTBL_ENTRY)&(_ZTI8S20657C5[0]),
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C6__8S20657C59S20657C14__A2__8S20657C1[] = {
  0,
  ABISELECT(-32,-24),
  ABISELECT(-66800,-47232),
  (VTBL_ENTRY)&(_ZTI8S20657C5[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C7__A1__8S20657C59S20657C14__A2__8S20657C1[] = {
  0,
  ABISELECT(-67312,-47592),
  (VTBL_ENTRY)&(_ZTI8S20657C5[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C8__8S20657C59S20657C14__A2__8S20657C1[] = {
  0,
  ABISELECT(-96,-52),
  ABISELECT(-67408,-47644),
  (VTBL_ENTRY)&(_ZTI8S20657C5[0]),
  (VTBL_ENTRY)&_ZN8S20657C82v2Ev,
};
extern void _ZN9S20657C112v5Ev();
extern void _ZN9S20657C11D1Ev();
extern void _ZN9S20657C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20657C119S20657C14__A1__8S20657C1[] = {
  ABISELECT(66768,47216),
  ABISELECT(67392,47636),
  ABISELECT(67296,47584),
  ABISELECT(66784,47224),
  ABISELECT(66752,47200),
  0,
  (VTBL_ENTRY)&(_ZTI9S20657C11[0]),
  (VTBL_ENTRY)&_ZN9S20657C112v5Ev,
  (VTBL_ENTRY)&_ZN9S20657C11D1Ev,
  (VTBL_ENTRY)&_ZN9S20657C11D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20657C59S20657C119S20657C14__A3__8S20657C1[] = {
  ABISELECT(67392,47636),
  ABISELECT(67296,47584),
  ABISELECT(66784,47224),
  ABISELECT(66752,47200),
  0,
  (VTBL_ENTRY)&(_ZTI8S20657C5[0]),
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C6__8S20657C59S20657C119S20657C14__A3__8S20657C1[] = {
  0,
  ABISELECT(-32,-24),
  ABISELECT(-66784,-47224),
  (VTBL_ENTRY)&(_ZTI8S20657C5[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C7__A1__8S20657C59S20657C119S20657C14__A3__8S20657C1[] = {
  0,
  ABISELECT(-67296,-47584),
  (VTBL_ENTRY)&(_ZTI8S20657C5[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C8__8S20657C59S20657C119S20657C14__A3__8S20657C1[] = {
  0,
  ABISELECT(-96,-52),
  ABISELECT(-67392,-47636),
  (VTBL_ENTRY)&(_ZTI8S20657C5[0]),
  (VTBL_ENTRY)&_ZN8S20657C82v2Ev,
};
extern void _ZN8S20657C72v1Ev();
extern void _ZN9S20657C10D1Ev();
extern void _ZN9S20657C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20657C109S20657C119S20657C14__A2__8S20657C1[] = {
  ABISELECT(67376,47628),
  ABISELECT(66768,47216),
  ABISELECT(66752,47208),
  ABISELECT(67280,47576),
  ABISELECT(66736,47192),
  0,
  (VTBL_ENTRY)&(_ZTI9S20657C10[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
  (VTBL_ENTRY)&_ZN9S20657C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20657C10D0Ev,
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C69S20657C109S20657C119S20657C14__A4__8S20657C1[] = {
  ABISELECT(66640,47140),
  0,
  (VTBL_ENTRY)&(_ZTI8S20657C6[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C89S20657C109S20657C119S20657C14__A3__8S20657C1[] = {
  ABISELECT(66672,47164),
  0,
  (VTBL_ENTRY)&(_ZTI8S20657C8[0]),
  (VTBL_ENTRY)&_ZN8S20657C82v2Ev,
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C7__8S20657C89S20657C109S20657C119S20657C14__A3__8S20657C1[] = {
  0,
  ABISELECT(-66672,-47164),
  (VTBL_ENTRY)&(_ZTI8S20657C8[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C6__A__9S20657C109S20657C119S20657C14__A2__8S20657C1[] = {
  ABISELECT(66640,47140),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI9S20657C10[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C8__A__9S20657C109S20657C119S20657C14__A2__8S20657C1[] = {
  ABISELECT(66672,47164),
  ABISELECT(-608,-412),
  (VTBL_ENTRY)&(_ZTI9S20657C10[0]),
  (VTBL_ENTRY)&_ZN8S20657C82v2Ev,
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C7__A2__9S20657C109S20657C119S20657C14__A2__8S20657C1[] = {
  0,
  ABISELECT(-67280,-47576),
  (VTBL_ENTRY)&(_ZTI9S20657C10[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20657C5__9S20657C109S20657C119S20657C14__A2__8S20657C1[] = {
  ABISELECT(624,420),
  ABISELECT(528,368),
  ABISELECT(16,8),
  -16,
  ABISELECT(-66752,-47208),
  (VTBL_ENTRY)&(_ZTI9S20657C10[0]),
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C6__A1__9S20657C109S20657C119S20657C14__A2__8S20657C1[] = {
  0,
  ABISELECT(-32,-24),
  ABISELECT(-66768,-47216),
  (VTBL_ENTRY)&(_ZTI9S20657C10[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C8__A1__9S20657C109S20657C119S20657C14__A2__8S20657C1[] = {
  0,
  ABISELECT(-96,-52),
  ABISELECT(-67376,-47628),
  (VTBL_ENTRY)&(_ZTI9S20657C10[0]),
  (VTBL_ENTRY)&_ZN8S20657C82v2Ev,
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C69S20657C119S20657C14__A5__8S20657C1[] = {
  ABISELECT(64032,45252),
  0,
  (VTBL_ENTRY)&(_ZTI8S20657C6[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C6__9S20657C119S20657C14__A1__8S20657C1[] = {
  0,
  ABISELECT(-32,-24),
  ABISELECT(-66784,-47224),
  (VTBL_ENTRY)&(_ZTI9S20657C11[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C7__A1__9S20657C119S20657C14__A1__8S20657C1[] = {
  0,
  ABISELECT(-67296,-47584),
  (VTBL_ENTRY)&(_ZTI9S20657C11[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C8__9S20657C119S20657C14__A1__8S20657C1[] = {
  0,
  ABISELECT(-96,-52),
  ABISELECT(-67392,-47636),
  (VTBL_ENTRY)&(_ZTI9S20657C11[0]),
  (VTBL_ENTRY)&_ZN8S20657C82v2Ev,
};
extern void _ZN8S20657C72v1Ev();
extern void ABISELECT(_ZThn16_N9S20657C11D1Ev,_ZThn8_N9S20657C11D1Ev)();
extern void ABISELECT(_ZThn16_N9S20657C11D0Ev,_ZThn8_N9S20657C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20657C10__9S20657C119S20657C14__A1__8S20657C1[] = {
  ABISELECT(67376,47628),
  ABISELECT(66768,47216),
  ABISELECT(66752,47208),
  ABISELECT(67280,47576),
  ABISELECT(66736,47192),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20657C11[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S20657C11D1Ev,_ZThn8_N9S20657C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S20657C11D0Ev,_ZThn8_N9S20657C11D0Ev),
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C69S20657C10__A1__9S20657C119S20657C14__A1__8S20657C1[] = {
  ABISELECT(66640,47140),
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI9S20657C11[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C89S20657C10__A1__9S20657C119S20657C14__A1__8S20657C1[] = {
  ABISELECT(66672,47164),
  ABISELECT(-624,-420),
  (VTBL_ENTRY)&(_ZTI9S20657C11[0]),
  (VTBL_ENTRY)&_ZN8S20657C82v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20657C5__A1__9S20657C119S20657C14__A1__8S20657C1[] = {
  ABISELECT(624,420),
  ABISELECT(528,368),
  ABISELECT(16,8),
  -16,
  ABISELECT(-66768,-47216),
  (VTBL_ENTRY)&(_ZTI9S20657C11[0]),
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C6__A__9S20657C119S20657C14__A1__8S20657C1[] = {
  ABISELECT(64032,45252),
  ABISELECT(-2720,-1948),
  (VTBL_ENTRY)&(_ZTI9S20657C11[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C6__9S20657C14__8S20657C1[] = {
  0,
  ABISELECT(-32,-24),
  ABISELECT(-66800,-47232),
  (VTBL_ENTRY)&(_ZTI9S20657C14[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C7__A1__9S20657C14__8S20657C1[] = {
  0,
  ABISELECT(-67312,-47592),
  (VTBL_ENTRY)&(_ZTI9S20657C14[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C8__9S20657C14__8S20657C1[] = {
  0,
  ABISELECT(-96,-52),
  ABISELECT(-67408,-47644),
  (VTBL_ENTRY)&(_ZTI9S20657C14[0]),
  (VTBL_ENTRY)&_ZN8S20657C82v2Ev,
};
extern void _ZN9S20657C112v5Ev();
extern void ABISELECT(_ZThn16_N9S20657C14D1Ev,_ZThn8_N9S20657C14D1Ev)();
extern void ABISELECT(_ZThn16_N9S20657C14D0Ev,_ZThn8_N9S20657C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20657C11__9S20657C14__8S20657C1[] = {
  ABISELECT(66768,47216),
  ABISELECT(67392,47636),
  ABISELECT(67296,47584),
  ABISELECT(66784,47224),
  ABISELECT(66752,47200),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20657C14[0]),
  (VTBL_ENTRY)&_ZN9S20657C112v5Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S20657C14D1Ev,_ZThn8_N9S20657C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S20657C14D0Ev,_ZThn8_N9S20657C14D0Ev),
};
extern void _ZN8S20657C72v1Ev();
extern void ABISELECT(_ZThn32_N9S20657C14D1Ev,_ZThn16_N9S20657C14D1Ev)();
extern void ABISELECT(_ZThn32_N9S20657C14D0Ev,_ZThn16_N9S20657C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20657C109S20657C11__9S20657C14__8S20657C1[] = {
  ABISELECT(67376,47628),
  ABISELECT(66768,47216),
  ABISELECT(66752,47208),
  ABISELECT(67280,47576),
  ABISELECT(66736,47192),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S20657C14[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N9S20657C14D1Ev,_ZThn16_N9S20657C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N9S20657C14D0Ev,_ZThn16_N9S20657C14D0Ev),
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C69S20657C109S20657C11__A1__9S20657C14__8S20657C1[] = {
  ABISELECT(66640,47140),
  ABISELECT(-128,-68),
  (VTBL_ENTRY)&(_ZTI9S20657C14[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C89S20657C109S20657C11__A1__9S20657C14__8S20657C1[] = {
  ABISELECT(66672,47164),
  ABISELECT(-640,-428),
  (VTBL_ENTRY)&(_ZTI9S20657C14[0]),
  (VTBL_ENTRY)&_ZN8S20657C82v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20657C5__A2__9S20657C14__8S20657C1[] = {
  ABISELECT(624,420),
  ABISELECT(528,368),
  ABISELECT(16,8),
  -16,
  ABISELECT(-66784,-47224),
  (VTBL_ENTRY)&(_ZTI9S20657C14[0]),
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C69S20657C11__A2__9S20657C14__8S20657C1[] = {
  ABISELECT(64032,45252),
  ABISELECT(-2736,-1956),
  (VTBL_ENTRY)&(_ZTI9S20657C14[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C72v1Ev();
extern void _ZN8S20657C2D1Ev();
extern void _ZN8S20657C2D0Ev();
extern void _ZN8S20657C92v3Ev();
extern void _ZN8S20657C92v4Ev();
extern void _ZN8S20657C22v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C2__8S20657C1[] = {
  ABISELECT(56560,40004),
  ABISELECT(55952,39592),
  ABISELECT(55936,39584),
  ABISELECT(56464,39952),
  ABISELECT(55920,39568),
  0,
  (VTBL_ENTRY)&(_ZTI8S20657C2[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
  (VTBL_ENTRY)&_ZN8S20657C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20657C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20657C92v3Ev,
  (VTBL_ENTRY)&_ZN8S20657C92v4Ev,
  (VTBL_ENTRY)&_ZN8S20657C22v6Ev,
};
extern void _ZN8S20657C72v1Ev();
extern void _ZN8S20657C4D1Ev();
extern void _ZN8S20657C4D0Ev();
extern void _ZN8S20657C92v3Ev();
extern void _ZN8S20657C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C48S20657C2__8S20657C1[] = {
  ABISELECT(56560,40004),
  ABISELECT(55952,39592),
  ABISELECT(55936,39584),
  ABISELECT(56464,39952),
  ABISELECT(55920,39568),
  0,
  (VTBL_ENTRY)&(_ZTI8S20657C4[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
  (VTBL_ENTRY)&_ZN8S20657C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20657C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20657C92v3Ev,
  (VTBL_ENTRY)&_ZN8S20657C92v4Ev,
};
extern void _ZN8S20657C72v1Ev();
extern void _ZN8S20657C9D1Ev();
extern void _ZN8S20657C9D0Ev();
extern void _ZN8S20657C92v3Ev();
extern void _ZN8S20657C92v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C98S20657C48S20657C2__8S20657C1[] = {
  ABISELECT(56560,40004),
  ABISELECT(55952,39592),
  ABISELECT(55936,39584),
  ABISELECT(56464,39952),
  ABISELECT(55920,39568),
  0,
  (VTBL_ENTRY)&(_ZTI8S20657C9[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
  (VTBL_ENTRY)&_ZN8S20657C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20657C9D0Ev,
  (VTBL_ENTRY)&_ZN8S20657C92v3Ev,
  (VTBL_ENTRY)&_ZN8S20657C92v4Ev,
};
extern void _ZN8S20657C72v1Ev();
extern void _ZN9S20657C10D1Ev();
extern void _ZN9S20657C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20657C108S20657C98S20657C48S20657C2__8S20657C1[] = {
  ABISELECT(56560,40004),
  ABISELECT(55952,39592),
  ABISELECT(55936,39584),
  ABISELECT(56464,39952),
  ABISELECT(55920,39568),
  0,
  (VTBL_ENTRY)&(_ZTI9S20657C10[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
  (VTBL_ENTRY)&_ZN9S20657C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20657C10D0Ev,
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C69S20657C108S20657C98S20657C48S20657C2__A1__8S20657C1[] = {
  ABISELECT(55824,39516),
  0,
  (VTBL_ENTRY)&(_ZTI8S20657C6[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C89S20657C108S20657C98S20657C48S20657C2__A1__8S20657C1[] = {
  ABISELECT(55856,39540),
  0,
  (VTBL_ENTRY)&(_ZTI8S20657C8[0]),
  (VTBL_ENTRY)&_ZN8S20657C82v2Ev,
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C7__8S20657C89S20657C108S20657C98S20657C48S20657C2__A1__8S20657C1[] = {
  0,
  ABISELECT(-55856,-39540),
  (VTBL_ENTRY)&(_ZTI8S20657C8[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C6__A__9S20657C108S20657C98S20657C48S20657C2__8S20657C1[] = {
  ABISELECT(55824,39516),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI9S20657C10[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C8__A__9S20657C108S20657C98S20657C48S20657C2__8S20657C1[] = {
  ABISELECT(55856,39540),
  ABISELECT(-608,-412),
  (VTBL_ENTRY)&(_ZTI9S20657C10[0]),
  (VTBL_ENTRY)&_ZN8S20657C82v2Ev,
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C7__A2__9S20657C108S20657C98S20657C48S20657C2__8S20657C1[] = {
  0,
  ABISELECT(-56464,-39952),
  (VTBL_ENTRY)&(_ZTI9S20657C10[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20657C5__9S20657C108S20657C98S20657C48S20657C2__8S20657C1[] = {
  ABISELECT(624,420),
  ABISELECT(528,368),
  ABISELECT(16,8),
  -16,
  ABISELECT(-55936,-39584),
  (VTBL_ENTRY)&(_ZTI9S20657C10[0]),
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C6__A1__9S20657C108S20657C98S20657C48S20657C2__8S20657C1[] = {
  0,
  ABISELECT(-32,-24),
  ABISELECT(-55952,-39592),
  (VTBL_ENTRY)&(_ZTI9S20657C10[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C8__A1__9S20657C108S20657C98S20657C48S20657C2__8S20657C1[] = {
  0,
  ABISELECT(-96,-52),
  ABISELECT(-56560,-40004),
  (VTBL_ENTRY)&(_ZTI9S20657C10[0]),
  (VTBL_ENTRY)&_ZN8S20657C82v2Ev,
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C69S20657C10__8S20657C98S20657C48S20657C2__8S20657C1[] = {
  ABISELECT(55824,39516),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI8S20657C9[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C89S20657C10__8S20657C98S20657C48S20657C2__8S20657C1[] = {
  ABISELECT(55856,39540),
  ABISELECT(-608,-412),
  (VTBL_ENTRY)&(_ZTI8S20657C9[0]),
  (VTBL_ENTRY)&_ZN8S20657C82v2Ev,
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C7__A2__8S20657C98S20657C48S20657C2__8S20657C1[] = {
  0,
  ABISELECT(-56464,-39952),
  (VTBL_ENTRY)&(_ZTI8S20657C9[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20657C5__8S20657C98S20657C48S20657C2__8S20657C1[] = {
  ABISELECT(624,420),
  ABISELECT(528,368),
  ABISELECT(16,8),
  -16,
  ABISELECT(-55936,-39584),
  (VTBL_ENTRY)&(_ZTI8S20657C9[0]),
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C6__A1__8S20657C98S20657C48S20657C2__8S20657C1[] = {
  0,
  ABISELECT(-32,-24),
  ABISELECT(-55952,-39592),
  (VTBL_ENTRY)&(_ZTI8S20657C9[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C8__A1__8S20657C98S20657C48S20657C2__8S20657C1[] = {
  0,
  ABISELECT(-96,-52),
  ABISELECT(-56560,-40004),
  (VTBL_ENTRY)&(_ZTI8S20657C9[0]),
  (VTBL_ENTRY)&_ZN8S20657C82v2Ev,
};
extern void _ZN9S20657C112v5Ev();
extern void _ZN9S20657C11D1Ev();
extern void _ZN9S20657C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20657C118S20657C48S20657C2__8S20657C1[] = {
  ABISELECT(52656,37252),
  ABISELECT(53280,37672),
  ABISELECT(53184,37620),
  ABISELECT(52672,37260),
  ABISELECT(52640,37236),
  0,
  (VTBL_ENTRY)&(_ZTI9S20657C11[0]),
  (VTBL_ENTRY)&_ZN9S20657C112v5Ev,
  (VTBL_ENTRY)&_ZN9S20657C11D1Ev,
  (VTBL_ENTRY)&_ZN9S20657C11D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20657C59S20657C118S20657C48S20657C2__A1__8S20657C1[] = {
  ABISELECT(53280,37672),
  ABISELECT(53184,37620),
  ABISELECT(52672,37260),
  ABISELECT(52640,37236),
  0,
  (VTBL_ENTRY)&(_ZTI8S20657C5[0]),
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C6__8S20657C59S20657C118S20657C48S20657C2__A1__8S20657C1[] = {
  0,
  ABISELECT(-32,-24),
  ABISELECT(-52672,-37260),
  (VTBL_ENTRY)&(_ZTI8S20657C5[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C7__A1__8S20657C59S20657C118S20657C48S20657C2__A1__8S20657C1[] = {
  0,
  ABISELECT(-53184,-37620),
  (VTBL_ENTRY)&(_ZTI8S20657C5[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C8__8S20657C59S20657C118S20657C48S20657C2__A1__8S20657C1[] = {
  0,
  ABISELECT(-96,-52),
  ABISELECT(-53280,-37672),
  (VTBL_ENTRY)&(_ZTI8S20657C5[0]),
  (VTBL_ENTRY)&_ZN8S20657C82v2Ev,
};
extern void _ZN8S20657C72v1Ev();
extern void _ZN9S20657C10D1Ev();
extern void _ZN9S20657C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20657C109S20657C118S20657C48S20657C2__A1__8S20657C1[] = {
  ABISELECT(53264,37664),
  ABISELECT(52656,37252),
  ABISELECT(52640,37244),
  ABISELECT(53168,37612),
  ABISELECT(52624,37228),
  0,
  (VTBL_ENTRY)&(_ZTI9S20657C10[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
  (VTBL_ENTRY)&_ZN9S20657C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20657C10D0Ev,
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C69S20657C109S20657C118S20657C48S20657C2__A2__8S20657C1[] = {
  ABISELECT(52528,37176),
  0,
  (VTBL_ENTRY)&(_ZTI8S20657C6[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C89S20657C109S20657C118S20657C48S20657C2__A2__8S20657C1[] = {
  ABISELECT(52560,37200),
  0,
  (VTBL_ENTRY)&(_ZTI8S20657C8[0]),
  (VTBL_ENTRY)&_ZN8S20657C82v2Ev,
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C7__8S20657C89S20657C109S20657C118S20657C48S20657C2__A2__8S20657C1[] = {
  0,
  ABISELECT(-52560,-37200),
  (VTBL_ENTRY)&(_ZTI8S20657C8[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C6__A__9S20657C109S20657C118S20657C48S20657C2__A1__8S20657C1[] = {
  ABISELECT(52528,37176),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI9S20657C10[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C8__A__9S20657C109S20657C118S20657C48S20657C2__A1__8S20657C1[] = {
  ABISELECT(52560,37200),
  ABISELECT(-608,-412),
  (VTBL_ENTRY)&(_ZTI9S20657C10[0]),
  (VTBL_ENTRY)&_ZN8S20657C82v2Ev,
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C7__A2__9S20657C109S20657C118S20657C48S20657C2__A1__8S20657C1[] = {
  0,
  ABISELECT(-53168,-37612),
  (VTBL_ENTRY)&(_ZTI9S20657C10[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20657C5__9S20657C109S20657C118S20657C48S20657C2__A1__8S20657C1[] = {
  ABISELECT(624,420),
  ABISELECT(528,368),
  ABISELECT(16,8),
  -16,
  ABISELECT(-52640,-37244),
  (VTBL_ENTRY)&(_ZTI9S20657C10[0]),
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C6__A1__9S20657C109S20657C118S20657C48S20657C2__A1__8S20657C1[] = {
  0,
  ABISELECT(-32,-24),
  ABISELECT(-52656,-37252),
  (VTBL_ENTRY)&(_ZTI9S20657C10[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C8__A1__9S20657C109S20657C118S20657C48S20657C2__A1__8S20657C1[] = {
  0,
  ABISELECT(-96,-52),
  ABISELECT(-53264,-37664),
  (VTBL_ENTRY)&(_ZTI9S20657C10[0]),
  (VTBL_ENTRY)&_ZN8S20657C82v2Ev,
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C69S20657C118S20657C48S20657C2__A3__8S20657C1[] = {
  ABISELECT(49920,35288),
  0,
  (VTBL_ENTRY)&(_ZTI8S20657C6[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C6__9S20657C118S20657C48S20657C2__8S20657C1[] = {
  0,
  ABISELECT(-32,-24),
  ABISELECT(-52672,-37260),
  (VTBL_ENTRY)&(_ZTI9S20657C11[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C7__A1__9S20657C118S20657C48S20657C2__8S20657C1[] = {
  0,
  ABISELECT(-53184,-37620),
  (VTBL_ENTRY)&(_ZTI9S20657C11[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C8__9S20657C118S20657C48S20657C2__8S20657C1[] = {
  0,
  ABISELECT(-96,-52),
  ABISELECT(-53280,-37672),
  (VTBL_ENTRY)&(_ZTI9S20657C11[0]),
  (VTBL_ENTRY)&_ZN8S20657C82v2Ev,
};
extern void _ZN8S20657C72v1Ev();
extern void ABISELECT(_ZThn16_N9S20657C11D1Ev,_ZThn8_N9S20657C11D1Ev)();
extern void ABISELECT(_ZThn16_N9S20657C11D0Ev,_ZThn8_N9S20657C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20657C10__9S20657C118S20657C48S20657C2__8S20657C1[] = {
  ABISELECT(53264,37664),
  ABISELECT(52656,37252),
  ABISELECT(52640,37244),
  ABISELECT(53168,37612),
  ABISELECT(52624,37228),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20657C11[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S20657C11D1Ev,_ZThn8_N9S20657C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S20657C11D0Ev,_ZThn8_N9S20657C11D0Ev),
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C69S20657C10__A1__9S20657C118S20657C48S20657C2__8S20657C1[] = {
  ABISELECT(52528,37176),
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI9S20657C11[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C89S20657C10__A1__9S20657C118S20657C48S20657C2__8S20657C1[] = {
  ABISELECT(52560,37200),
  ABISELECT(-624,-420),
  (VTBL_ENTRY)&(_ZTI9S20657C11[0]),
  (VTBL_ENTRY)&_ZN8S20657C82v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20657C5__A1__9S20657C118S20657C48S20657C2__8S20657C1[] = {
  ABISELECT(624,420),
  ABISELECT(528,368),
  ABISELECT(16,8),
  -16,
  ABISELECT(-52656,-37252),
  (VTBL_ENTRY)&(_ZTI9S20657C11[0]),
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C6__A__9S20657C118S20657C48S20657C2__8S20657C1[] = {
  ABISELECT(49920,35288),
  ABISELECT(-2720,-1948),
  (VTBL_ENTRY)&(_ZTI9S20657C11[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20657C5__8S20657C48S20657C2__8S20657C1[] = {
  ABISELECT(624,420),
  ABISELECT(528,368),
  ABISELECT(16,8),
  -16,
  ABISELECT(-55936,-39584),
  (VTBL_ENTRY)&(_ZTI8S20657C4[0]),
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C6__8S20657C48S20657C2__8S20657C1[] = {
  0,
  ABISELECT(-32,-24),
  ABISELECT(-55952,-39592),
  (VTBL_ENTRY)&(_ZTI8S20657C4[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C7__A1__8S20657C48S20657C2__8S20657C1[] = {
  0,
  ABISELECT(-56464,-39952),
  (VTBL_ENTRY)&(_ZTI8S20657C4[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C8__8S20657C48S20657C2__8S20657C1[] = {
  0,
  ABISELECT(-96,-52),
  ABISELECT(-56560,-40004),
  (VTBL_ENTRY)&(_ZTI8S20657C4[0]),
  (VTBL_ENTRY)&_ZN8S20657C82v2Ev,
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C69S20657C108S20657C9__A1__8S20657C48S20657C2__8S20657C1[] = {
  ABISELECT(55824,39516),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI8S20657C4[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C89S20657C108S20657C9__A1__8S20657C48S20657C2__8S20657C1[] = {
  ABISELECT(55856,39540),
  ABISELECT(-608,-412),
  (VTBL_ENTRY)&(_ZTI8S20657C4[0]),
  (VTBL_ENTRY)&_ZN8S20657C82v2Ev,
};
extern void _ZN9S20657C112v5Ev();
extern void ABISELECT(_ZThn3280_N8S20657C4D1Ev,_ZThn2332_N8S20657C4D1Ev)();
extern void ABISELECT(_ZThn3280_N8S20657C4D0Ev,_ZThn2332_N8S20657C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20657C11__8S20657C48S20657C2__8S20657C1[] = {
  ABISELECT(52656,37252),
  ABISELECT(53280,37672),
  ABISELECT(53184,37620),
  ABISELECT(52672,37260),
  ABISELECT(52640,37236),
  ABISELECT(-3280,-2332),
  (VTBL_ENTRY)&(_ZTI8S20657C4[0]),
  (VTBL_ENTRY)&_ZN9S20657C112v5Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn3280_N8S20657C4D1Ev,_ZThn2332_N8S20657C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn3280_N8S20657C4D0Ev,_ZThn2332_N8S20657C4D0Ev),
};
extern void _ZN8S20657C72v1Ev();
extern void ABISELECT(_ZThn3296_N8S20657C4D1Ev,_ZThn2340_N8S20657C4D1Ev)();
extern void ABISELECT(_ZThn3296_N8S20657C4D0Ev,_ZThn2340_N8S20657C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20657C109S20657C11__A1__8S20657C48S20657C2__8S20657C1[] = {
  ABISELECT(53264,37664),
  ABISELECT(52656,37252),
  ABISELECT(52640,37244),
  ABISELECT(53168,37612),
  ABISELECT(52624,37228),
  ABISELECT(-3296,-2340),
  (VTBL_ENTRY)&(_ZTI8S20657C4[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn3296_N8S20657C4D1Ev,_ZThn2340_N8S20657C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn3296_N8S20657C4D0Ev,_ZThn2340_N8S20657C4D0Ev),
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C69S20657C109S20657C11__A2__8S20657C48S20657C2__8S20657C1[] = {
  ABISELECT(52528,37176),
  ABISELECT(-3392,-2392),
  (VTBL_ENTRY)&(_ZTI8S20657C4[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C89S20657C109S20657C11__A2__8S20657C48S20657C2__8S20657C1[] = {
  ABISELECT(52560,37200),
  ABISELECT(-3904,-2752),
  (VTBL_ENTRY)&(_ZTI8S20657C4[0]),
  (VTBL_ENTRY)&_ZN8S20657C82v2Ev,
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C69S20657C11__A3__8S20657C48S20657C2__8S20657C1[] = {
  ABISELECT(49920,35288),
  ABISELECT(-6000,-4280),
  (VTBL_ENTRY)&(_ZTI8S20657C4[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20657C5__8S20657C2__8S20657C1[] = {
  ABISELECT(624,420),
  ABISELECT(528,368),
  ABISELECT(16,8),
  -16,
  ABISELECT(-55936,-39584),
  (VTBL_ENTRY)&(_ZTI8S20657C2[0]),
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C6__8S20657C2__8S20657C1[] = {
  0,
  ABISELECT(-32,-24),
  ABISELECT(-55952,-39592),
  (VTBL_ENTRY)&(_ZTI8S20657C2[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C7__A1__8S20657C2__8S20657C1[] = {
  0,
  ABISELECT(-56464,-39952),
  (VTBL_ENTRY)&(_ZTI8S20657C2[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C8__8S20657C2__8S20657C1[] = {
  0,
  ABISELECT(-96,-52),
  ABISELECT(-56560,-40004),
  (VTBL_ENTRY)&(_ZTI8S20657C2[0]),
  (VTBL_ENTRY)&_ZN8S20657C82v2Ev,
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C69S20657C108S20657C98S20657C4__A1__8S20657C2__8S20657C1[] = {
  ABISELECT(55824,39516),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI8S20657C2[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C89S20657C108S20657C98S20657C4__A1__8S20657C2__8S20657C1[] = {
  ABISELECT(55856,39540),
  ABISELECT(-608,-412),
  (VTBL_ENTRY)&(_ZTI8S20657C2[0]),
  (VTBL_ENTRY)&_ZN8S20657C82v2Ev,
};
extern void _ZN9S20657C112v5Ev();
extern void ABISELECT(_ZThn3280_N8S20657C2D1Ev,_ZThn2332_N8S20657C2D1Ev)();
extern void ABISELECT(_ZThn3280_N8S20657C2D0Ev,_ZThn2332_N8S20657C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20657C118S20657C4__8S20657C2__8S20657C1[] = {
  ABISELECT(52656,37252),
  ABISELECT(53280,37672),
  ABISELECT(53184,37620),
  ABISELECT(52672,37260),
  ABISELECT(52640,37236),
  ABISELECT(-3280,-2332),
  (VTBL_ENTRY)&(_ZTI8S20657C2[0]),
  (VTBL_ENTRY)&_ZN9S20657C112v5Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn3280_N8S20657C2D1Ev,_ZThn2332_N8S20657C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn3280_N8S20657C2D0Ev,_ZThn2332_N8S20657C2D0Ev),
};
extern void _ZN8S20657C72v1Ev();
extern void ABISELECT(_ZThn3296_N8S20657C2D1Ev,_ZThn2340_N8S20657C2D1Ev)();
extern void ABISELECT(_ZThn3296_N8S20657C2D0Ev,_ZThn2340_N8S20657C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20657C109S20657C118S20657C4__A1__8S20657C2__8S20657C1[] = {
  ABISELECT(53264,37664),
  ABISELECT(52656,37252),
  ABISELECT(52640,37244),
  ABISELECT(53168,37612),
  ABISELECT(52624,37228),
  ABISELECT(-3296,-2340),
  (VTBL_ENTRY)&(_ZTI8S20657C2[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn3296_N8S20657C2D1Ev,_ZThn2340_N8S20657C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn3296_N8S20657C2D0Ev,_ZThn2340_N8S20657C2D0Ev),
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C69S20657C109S20657C118S20657C4__A2__8S20657C2__8S20657C1[] = {
  ABISELECT(52528,37176),
  ABISELECT(-3392,-2392),
  (VTBL_ENTRY)&(_ZTI8S20657C2[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C89S20657C109S20657C118S20657C4__A2__8S20657C2__8S20657C1[] = {
  ABISELECT(52560,37200),
  ABISELECT(-3904,-2752),
  (VTBL_ENTRY)&(_ZTI8S20657C2[0]),
  (VTBL_ENTRY)&_ZN8S20657C82v2Ev,
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C69S20657C118S20657C4__A3__8S20657C2__8S20657C1[] = {
  ABISELECT(49920,35288),
  ABISELECT(-6000,-4280),
  (VTBL_ENTRY)&(_ZTI8S20657C2[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20657C5__8S20657C1[] = {
  ABISELECT(624,420),
  ABISELECT(528,368),
  ABISELECT(16,8),
  -16,
  0,
  (VTBL_ENTRY)&(_ZTI8S20657C5[0]),
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C6__8S20657C5__8S20657C1[] = {
  0,
  ABISELECT(-32,-24),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20657C5[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C7__A1__8S20657C5__8S20657C1[] = {
  0,
  ABISELECT(-528,-368),
  (VTBL_ENTRY)&(_ZTI8S20657C5[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C8__8S20657C5__8S20657C1[] = {
  0,
  ABISELECT(-96,-52),
  ABISELECT(-624,-420),
  (VTBL_ENTRY)&(_ZTI8S20657C5[0]),
  (VTBL_ENTRY)&_ZN8S20657C82v2Ev,
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C6__8S20657C1[] = {
  ABISELECT(-32,-24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20657C6[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
extern void _ZN8S20657C82v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C8__8S20657C1[] = {
  ABISELECT(-96,-52),
  0,
  (VTBL_ENTRY)&(_ZTI8S20657C8[0]),
  (VTBL_ENTRY)&_ZN8S20657C82v2Ev,
};
extern void _ZN8S20657C72v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20657C7__8S20657C8__8S20657C1[] = {
  0,
  ABISELECT(96,52),
  (VTBL_ENTRY)&(_ZTI8S20657C8[0]),
  (VTBL_ENTRY)&_ZN8S20657C72v1Ev,
};
static  VTT_ENTRY vtt_S20657C1[] = {
  {&(_ZTV8S20657C1[8]),  8,130},
  {&(_tg__ZTV9S20657C14__8S20657C1[7]),  7,11},
  {&(_tg__ZTV8S20657C59S20657C14__A2__8S20657C1[6]),  6,6},
  {&(_tg__ZTV8S20657C6__8S20657C59S20657C14__A2__8S20657C1[4]),  4,5},
  {&(_tg__ZTV8S20657C7__A1__8S20657C59S20657C14__A2__8S20657C1[3]),  3,4},
  {&(_tg__ZTV8S20657C8__8S20657C59S20657C14__A2__8S20657C1[4]),  4,5},
  {&(_tg__ZTV9S20657C119S20657C14__A1__8S20657C1[7]),  7,10},
  {&(_tg__ZTV8S20657C59S20657C119S20657C14__A3__8S20657C1[6]),  6,6},
  {&(_tg__ZTV8S20657C6__8S20657C59S20657C119S20657C14__A3__8S20657C1[4]),  4,5},
  {&(_tg__ZTV8S20657C7__A1__8S20657C59S20657C119S20657C14__A3__8S20657C1[3]),  3,4},
  {&(_tg__ZTV8S20657C8__8S20657C59S20657C119S20657C14__A3__8S20657C1[4]),  4,5},
  {&(_tg__ZTV9S20657C109S20657C119S20657C14__A2__8S20657C1[7]),  7,10},
  {&(_tg__ZTV8S20657C69S20657C109S20657C119S20657C14__A4__8S20657C1[3]),  3,4},
  {&(_tg__ZTV8S20657C89S20657C109S20657C119S20657C14__A3__8S20657C1[3]),  3,4},
  {&(_tg__ZTV8S20657C7__8S20657C89S20657C109S20657C119S20657C14__A3__8S20657C1[3]),  3,4},
  {&(_tg__ZTV8S20657C6__A__9S20657C109S20657C119S20657C14__A2__8S20657C1[3]),  3,4},
  {&(_tg__ZTV8S20657C8__A__9S20657C109S20657C119S20657C14__A2__8S20657C1[3]),  3,4},
  {&(_tg__ZTV8S20657C7__A2__9S20657C109S20657C119S20657C14__A2__8S20657C1[3]),  3,4},
  {&(_tg__ZTV8S20657C5__9S20657C109S20657C119S20657C14__A2__8S20657C1[6]),  6,6},
  {&(_tg__ZTV8S20657C6__A1__9S20657C109S20657C119S20657C14__A2__8S20657C1[4]),  4,5},
  {&(_tg__ZTV8S20657C8__A1__9S20657C109S20657C119S20657C14__A2__8S20657C1[4]),  4,5},
  {&(_tg__ZTV8S20657C69S20657C119S20657C14__A5__8S20657C1[3]),  3,4},
  {&(_tg__ZTV8S20657C6__9S20657C119S20657C14__A1__8S20657C1[4]),  4,5},
  {&(_tg__ZTV8S20657C7__A1__9S20657C119S20657C14__A1__8S20657C1[3]),  3,4},
  {&(_tg__ZTV8S20657C8__9S20657C119S20657C14__A1__8S20657C1[4]),  4,5},
  {&(_tg__ZTV9S20657C10__9S20657C119S20657C14__A1__8S20657C1[7]),  7,10},
  {&(_tg__ZTV8S20657C69S20657C10__A1__9S20657C119S20657C14__A1__8S20657C1[3]),  3,4},
  {&(_tg__ZTV8S20657C89S20657C10__A1__9S20657C119S20657C14__A1__8S20657C1[3]),  3,4},
  {&(_tg__ZTV8S20657C5__A1__9S20657C119S20657C14__A1__8S20657C1[6]),  6,6},
  {&(_tg__ZTV8S20657C6__A__9S20657C119S20657C14__A1__8S20657C1[3]),  3,4},
  {&(_tg__ZTV8S20657C6__9S20657C14__8S20657C1[4]),  4,5},
  {&(_tg__ZTV8S20657C7__A1__9S20657C14__8S20657C1[3]),  3,4},
  {&(_tg__ZTV8S20657C8__9S20657C14__8S20657C1[4]),  4,5},
  {&(_tg__ZTV9S20657C11__9S20657C14__8S20657C1[7]),  7,10},
  {&(_tg__ZTV9S20657C109S20657C11__9S20657C14__8S20657C1[7]),  7,10},
  {&(_tg__ZTV8S20657C69S20657C109S20657C11__A1__9S20657C14__8S20657C1[3]),  3,4},
  {&(_tg__ZTV8S20657C89S20657C109S20657C11__A1__9S20657C14__8S20657C1[3]),  3,4},
  {&(_tg__ZTV8S20657C5__A2__9S20657C14__8S20657C1[6]),  6,6},
  {&(_tg__ZTV8S20657C69S20657C11__A2__9S20657C14__8S20657C1[3]),  3,4},
  {&(_ZTV8S20657C1[61]),  61,130},
  {&(_ZTV8S20657C1[116]),  116,130},
  {&(_ZTV8S20657C1[120]),  120,130},
  {&(_ZTV8S20657C1[124]),  124,130},
  {&(_ZTV8S20657C1[129]),  129,130},
  {&(_ZTV8S20657C1[70]),  70,130},
  {&(_ZTV8S20657C1[74]),  74,130},
  {&(_ZTV8S20657C1[82]),  82,130},
  {&(_ZTV8S20657C1[92]),  92,130},
  {&(_ZTV8S20657C1[98]),  98,130},
  {&(_ZTV8S20657C1[102]),  102,130},
  {&(_ZTV8S20657C1[106]),  106,130},
  {&(_ZTV8S20657C1[109]),  109,130},
  {&(_ZTV8S20657C1[19]),  19,130},
  {&(_ZTV8S20657C1[29]),  29,130},
  {&(_ZTV8S20657C1[35]),  35,130},
  {&(_ZTV8S20657C1[39]),  39,130},
  {&(_ZTV8S20657C1[43]),  43,130},
  {&(_tg__ZTV8S20657C2__8S20657C1[7]),  7,13},
  {&(_tg__ZTV8S20657C48S20657C2__8S20657C1[7]),  7,12},
  {&(_tg__ZTV8S20657C98S20657C48S20657C2__8S20657C1[7]),  7,12},
  {&(_tg__ZTV9S20657C108S20657C98S20657C48S20657C2__8S20657C1[7]),  7,10},
  {&(_tg__ZTV8S20657C69S20657C108S20657C98S20657C48S20657C2__A1__8S20657C1[3]),  3,4},
  {&(_tg__ZTV8S20657C89S20657C108S20657C98S20657C48S20657C2__A1__8S20657C1[3]),  3,4},
  {&(_tg__ZTV8S20657C7__8S20657C89S20657C108S20657C98S20657C48S20657C2__A1__8S20657C1[3]),  3,4},
  {&(_tg__ZTV8S20657C6__A__9S20657C108S20657C98S20657C48S20657C2__8S20657C1[3]),  3,4},
  {&(_tg__ZTV8S20657C8__A__9S20657C108S20657C98S20657C48S20657C2__8S20657C1[3]),  3,4},
  {&(_tg__ZTV8S20657C7__A2__9S20657C108S20657C98S20657C48S20657C2__8S20657C1[3]),  3,4},
  {&(_tg__ZTV8S20657C5__9S20657C108S20657C98S20657C48S20657C2__8S20657C1[6]),  6,6},
  {&(_tg__ZTV8S20657C6__A1__9S20657C108S20657C98S20657C48S20657C2__8S20657C1[4]),  4,5},
  {&(_tg__ZTV8S20657C8__A1__9S20657C108S20657C98S20657C48S20657C2__8S20657C1[4]),  4,5},
  {&(_tg__ZTV8S20657C69S20657C10__8S20657C98S20657C48S20657C2__8S20657C1[3]),  3,4},
  {&(_tg__ZTV8S20657C89S20657C10__8S20657C98S20657C48S20657C2__8S20657C1[3]),  3,4},
  {&(_tg__ZTV8S20657C7__A2__8S20657C98S20657C48S20657C2__8S20657C1[3]),  3,4},
  {&(_tg__ZTV8S20657C5__8S20657C98S20657C48S20657C2__8S20657C1[6]),  6,6},
  {&(_tg__ZTV8S20657C6__A1__8S20657C98S20657C48S20657C2__8S20657C1[4]),  4,5},
  {&(_tg__ZTV8S20657C8__A1__8S20657C98S20657C48S20657C2__8S20657C1[4]),  4,5},
  {&(_tg__ZTV9S20657C118S20657C48S20657C2__8S20657C1[7]),  7,10},
  {&(_tg__ZTV8S20657C59S20657C118S20657C48S20657C2__A1__8S20657C1[6]),  6,6},
  {&(_tg__ZTV8S20657C6__8S20657C59S20657C118S20657C48S20657C2__A1__8S20657C1[4]),  4,5},
  {&(_tg__ZTV8S20657C7__A1__8S20657C59S20657C118S20657C48S20657C2__A1__8S20657C1[3]),  3,4},
  {&(_tg__ZTV8S20657C8__8S20657C59S20657C118S20657C48S20657C2__A1__8S20657C1[4]),  4,5},
  {&(_tg__ZTV9S20657C109S20657C118S20657C48S20657C2__A1__8S20657C1[7]),  7,10},
  {&(_tg__ZTV8S20657C69S20657C109S20657C118S20657C48S20657C2__A2__8S20657C1[3]),  3,4},
  {&(_tg__ZTV8S20657C89S20657C109S20657C118S20657C48S20657C2__A2__8S20657C1[3]),  3,4},
  {&(_tg__ZTV8S20657C7__8S20657C89S20657C109S20657C118S20657C48S20657C2__A2__8S20657C1[3]),  3,4},
  {&(_tg__ZTV8S20657C6__A__9S20657C109S20657C118S20657C48S20657C2__A1__8S20657C1[3]),  3,4},
  {&(_tg__ZTV8S20657C8__A__9S20657C109S20657C118S20657C48S20657C2__A1__8S20657C1[3]),  3,4},
  {&(_tg__ZTV8S20657C7__A2__9S20657C109S20657C118S20657C48S20657C2__A1__8S20657C1[3]),  3,4},
  {&(_tg__ZTV8S20657C5__9S20657C109S20657C118S20657C48S20657C2__A1__8S20657C1[6]),  6,6},
  {&(_tg__ZTV8S20657C6__A1__9S20657C109S20657C118S20657C48S20657C2__A1__8S20657C1[4]),  4,5},
  {&(_tg__ZTV8S20657C8__A1__9S20657C109S20657C118S20657C48S20657C2__A1__8S20657C1[4]),  4,5},
  {&(_tg__ZTV8S20657C69S20657C118S20657C48S20657C2__A3__8S20657C1[3]),  3,4},
  {&(_tg__ZTV8S20657C6__9S20657C118S20657C48S20657C2__8S20657C1[4]),  4,5},
  {&(_tg__ZTV8S20657C7__A1__9S20657C118S20657C48S20657C2__8S20657C1[3]),  3,4},
  {&(_tg__ZTV8S20657C8__9S20657C118S20657C48S20657C2__8S20657C1[4]),  4,5},
  {&(_tg__ZTV9S20657C10__9S20657C118S20657C48S20657C2__8S20657C1[7]),  7,10},
  {&(_tg__ZTV8S20657C69S20657C10__A1__9S20657C118S20657C48S20657C2__8S20657C1[3]),  3,4},
  {&(_tg__ZTV8S20657C89S20657C10__A1__9S20657C118S20657C48S20657C2__8S20657C1[3]),  3,4},
  {&(_tg__ZTV8S20657C5__A1__9S20657C118S20657C48S20657C2__8S20657C1[6]),  6,6},
  {&(_tg__ZTV8S20657C6__A__9S20657C118S20657C48S20657C2__8S20657C1[3]),  3,4},
  {&(_tg__ZTV8S20657C5__8S20657C48S20657C2__8S20657C1[6]),  6,6},
  {&(_tg__ZTV8S20657C6__8S20657C48S20657C2__8S20657C1[4]),  4,5},
  {&(_tg__ZTV8S20657C7__A1__8S20657C48S20657C2__8S20657C1[3]),  3,4},
  {&(_tg__ZTV8S20657C8__8S20657C48S20657C2__8S20657C1[4]),  4,5},
  {&(_tg__ZTV8S20657C69S20657C108S20657C9__A1__8S20657C48S20657C2__8S20657C1[3]),  3,4},
  {&(_tg__ZTV8S20657C89S20657C108S20657C9__A1__8S20657C48S20657C2__8S20657C1[3]),  3,4},
  {&(_tg__ZTV9S20657C11__8S20657C48S20657C2__8S20657C1[7]),  7,10},
  {&(_tg__ZTV9S20657C109S20657C11__A1__8S20657C48S20657C2__8S20657C1[7]),  7,10},
  {&(_tg__ZTV8S20657C69S20657C109S20657C11__A2__8S20657C48S20657C2__8S20657C1[3]),  3,4},
  {&(_tg__ZTV8S20657C89S20657C109S20657C11__A2__8S20657C48S20657C2__8S20657C1[3]),  3,4},
  {&(_tg__ZTV8S20657C69S20657C11__A3__8S20657C48S20657C2__8S20657C1[3]),  3,4},
  {&(_tg__ZTV8S20657C5__8S20657C2__8S20657C1[6]),  6,6},
  {&(_tg__ZTV8S20657C6__8S20657C2__8S20657C1[4]),  4,5},
  {&(_tg__ZTV8S20657C7__A1__8S20657C2__8S20657C1[3]),  3,4},
  {&(_tg__ZTV8S20657C8__8S20657C2__8S20657C1[4]),  4,5},
  {&(_tg__ZTV8S20657C69S20657C108S20657C98S20657C4__A1__8S20657C2__8S20657C1[3]),  3,4},
  {&(_tg__ZTV8S20657C89S20657C108S20657C98S20657C4__A1__8S20657C2__8S20657C1[3]),  3,4},
  {&(_tg__ZTV9S20657C118S20657C4__8S20657C2__8S20657C1[7]),  7,10},
  {&(_tg__ZTV9S20657C109S20657C118S20657C4__A1__8S20657C2__8S20657C1[7]),  7,10},
  {&(_tg__ZTV8S20657C69S20657C109S20657C118S20657C4__A2__8S20657C2__8S20657C1[3]),  3,4},
  {&(_tg__ZTV8S20657C89S20657C109S20657C118S20657C4__A2__8S20657C2__8S20657C1[3]),  3,4},
  {&(_tg__ZTV8S20657C69S20657C118S20657C4__A3__8S20657C2__8S20657C1[3]),  3,4},
  {&(_tg__ZTV8S20657C5__8S20657C1[6]),  6,6},
  {&(_tg__ZTV8S20657C6__8S20657C5__8S20657C1[4]),  4,5},
  {&(_tg__ZTV8S20657C7__A1__8S20657C5__8S20657C1[3]),  3,4},
  {&(_tg__ZTV8S20657C8__8S20657C5__8S20657C1[4]),  4,5},
  {&(_tg__ZTV8S20657C6__8S20657C1[3]),  3,4},
  {&(_tg__ZTV8S20657C8__8S20657C1[3]),  3,4},
  {&(_tg__ZTV8S20657C7__8S20657C8__8S20657C1[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S20657C1[];
extern  VTBL_ENTRY _ZTV8S20657C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20657C1[];
static VTBL_ENTRY alt_thunk_names4[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20657C1D0Ev,_ZTv0_n36_N8S20657C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10848_N8S20657C1D0Ev,_ZThn7640_N8S20657C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20657C1D1Ev,_ZTv0_n36_N8S20657C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10848_N8S20657C1D1Ev,_ZThn7640_N8S20657C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20657C1 = {  "S20657C1", // class name
  bases_S20657C1, 36,
  &(vtc_S20657C1[0]), // expected_vtbl_contents
  &(vtt_S20657C1[0]), // expected_vtt_contents
  ABISELECT(67696,47876), // object size
  NSPAIRA(_ZTI8S20657C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20657C1),130, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20657C1),129, //virtual table table var
  35, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names4,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3421C3  {
  ::S2120C13_nt s3421c3f0;
  ::S2120C13_nt s3421c3f1;
  void *s3421c3f2;
  int s3421c3f3;
  ::S601C8 s3421c3f4;
  int s3421c3f5:2;
  int s3421c3f6:2;
  unsigned char s3421c3f7:1;
  unsigned char s3421c3f8:1;
  ::S601C53 s3421c3f9;
  ::S601C11 s3421c3f10[2];
  virtual  ~S3421C3(); // _ZN7S3421C3D1Ev
  virtual void  v8(); // _ZN7S3421C32v8Ev
  virtual void  v9(); // _ZN7S3421C32v9Ev
  virtual void  v10(); // _ZN7S3421C33v10Ev
  virtual void  v11(); // _ZN7S3421C33v11Ev
  virtual void  v12(); // _ZN7S3421C33v12Ev
  virtual void  v13(); // _ZN7S3421C33v13Ev
  virtual void  v14(); // _ZN7S3421C33v14Ev
  virtual void  v15(); // _ZN7S3421C33v15Ev
  virtual void  v16(); // _ZN7S3421C33v16Ev
  virtual void  v17(); // _ZN7S3421C33v17Ev
  virtual void  v18(); // _ZN7S3421C33v18Ev
  virtual void  v19(); // _ZN7S3421C33v19Ev
  virtual void  v20(); // _ZN7S3421C33v20Ev
  virtual void  v21(); // _ZN7S3421C33v21Ev
  virtual void  v22(); // _ZN7S3421C33v22Ev
  S3421C3(); // tgen
};
//SIG(-1 S3421C3) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 FC2{ m FC3{ m FL[2]}} FC2 Fp Fi FU4{ m FC5{ Fi:4 Fi:4 Fi:4 Fi:2 Fi:1 Fi:17} Fi} Fi:2 Fi:2 Fc:1 Fc:1 FC6{ m Fp Fp} FC7{ Fp Fp}[2]}


 S3421C3 ::~S3421C3(){ note_dtor("S3421C3", this);}
void  S3421C3 ::v8(){vfunc_called(this, "_ZN7S3421C32v8Ev");}
void  S3421C3 ::v9(){vfunc_called(this, "_ZN7S3421C32v9Ev");}
void  S3421C3 ::v10(){vfunc_called(this, "_ZN7S3421C33v10Ev");}
void  S3421C3 ::v11(){vfunc_called(this, "_ZN7S3421C33v11Ev");}
void  S3421C3 ::v12(){vfunc_called(this, "_ZN7S3421C33v12Ev");}
void  S3421C3 ::v13(){vfunc_called(this, "_ZN7S3421C33v13Ev");}
void  S3421C3 ::v14(){vfunc_called(this, "_ZN7S3421C33v14Ev");}
void  S3421C3 ::v15(){vfunc_called(this, "_ZN7S3421C33v15Ev");}
void  S3421C3 ::v16(){vfunc_called(this, "_ZN7S3421C33v16Ev");}
void  S3421C3 ::v17(){vfunc_called(this, "_ZN7S3421C33v17Ev");}
void  S3421C3 ::v18(){vfunc_called(this, "_ZN7S3421C33v18Ev");}
void  S3421C3 ::v19(){vfunc_called(this, "_ZN7S3421C33v19Ev");}
void  S3421C3 ::v20(){vfunc_called(this, "_ZN7S3421C33v20Ev");}
void  S3421C3 ::v21(){vfunc_called(this, "_ZN7S3421C33v21Ev");}
void  S3421C3 ::v22(){vfunc_called(this, "_ZN7S3421C33v22Ev");}
S3421C3 ::S3421C3(){ note_ctor("S3421C3", this);} // tgen

static void Test_S3421C3()
{
  extern Class_Descriptor cd_S3421C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,20)];
    init_test(&cd_S3421C3, buf);
    S3421C3 *dp, &lv = *(dp=new (buf) S3421C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,76), "sizeof(S3421C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3421C3)");
    check_field_offset(lv, s3421c3f0, ABISELECT(8,4), "S3421C3.s3421c3f0");
    check_field_offset(lv, s3421c3f1, ABISELECT(24,20), "S3421C3.s3421c3f1");
    check_field_offset(lv, s3421c3f2, ABISELECT(40,36), "S3421C3.s3421c3f2");
    check_field_offset(lv, s3421c3f3, ABISELECT(48,40), "S3421C3.s3421c3f3");
    check_field_offset(lv, s3421c3f4, ABISELECT(52,44), "S3421C3.s3421c3f4");
    set_bf_and_test(lv, s3421c3f5, ABISELECT(56,48), 0, 2, 1, "S3421C3");
    set_bf_and_test(lv, s3421c3f5, ABISELECT(56,48), 0, 2, hide_sll(1LL<<1), "S3421C3");
    set_bf_and_test(lv, s3421c3f6, ABISELECT(56,48), 2, 2, 1, "S3421C3");
    set_bf_and_test(lv, s3421c3f6, ABISELECT(56,48), 2, 2, hide_sll(1LL<<1), "S3421C3");
    set_bf_and_test(lv, s3421c3f7, ABISELECT(56,48), 4, 1, 1, "S3421C3");
    set_bf_and_test(lv, s3421c3f8, ABISELECT(56,48), 5, 1, 1, "S3421C3");
    check_field_offset(lv, s3421c3f9, ABISELECT(64,52), "S3421C3.s3421c3f9");
    check_field_offset(lv, s3421c3f10, ABISELECT(80,60), "S3421C3.s3421c3f10");
    test_class_info(&lv, &cd_S3421C3);
    dp->~S3421C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3421C3(Test_S3421C3, "S3421C3", ABISELECT(112,76));

#else // __cplusplus

extern void _ZN7S3421C3C1Ev();
extern void _ZN7S3421C3D1Ev();
Name_Map name_map_S3421C3[] = {
  NSPAIR(_ZN7S3421C3C1Ev),
  NSPAIR(_ZN7S3421C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3421C3[];
extern void _ZN7S3421C3D1Ev();
extern void _ZN7S3421C3D0Ev();
extern void _ZN7S3421C32v8Ev();
extern void _ZN7S3421C32v9Ev();
extern void _ZN7S3421C33v10Ev();
extern void _ZN7S3421C33v11Ev();
extern void _ZN7S3421C33v12Ev();
extern void _ZN7S3421C33v13Ev();
extern void _ZN7S3421C33v14Ev();
extern void _ZN7S3421C33v15Ev();
extern void _ZN7S3421C33v16Ev();
extern void _ZN7S3421C33v17Ev();
extern void _ZN7S3421C33v18Ev();
extern void _ZN7S3421C33v19Ev();
extern void _ZN7S3421C33v20Ev();
extern void _ZN7S3421C33v21Ev();
extern void _ZN7S3421C33v22Ev();
static  VTBL_ENTRY vtc_S3421C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3421C3[0]),
  (VTBL_ENTRY)&_ZN7S3421C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3421C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3421C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3421C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3421C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3421C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3421C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3421C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3421C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3421C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3421C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3421C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3421C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3421C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3421C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3421C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3421C33v22Ev,
};
extern VTBL_ENTRY _ZTI7S3421C3[];
extern  VTBL_ENTRY _ZTV7S3421C3[];
Class_Descriptor cd_S3421C3 = {  "S3421C3", // class name
  0,0,//no base classes
  &(vtc_S3421C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,76), // object size
  NSPAIRA(_ZTI7S3421C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3421C3),19, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3421C2  : S3421C3 {
  unsigned char s3421c2f0:1;
  unsigned char s3421c2f1:1;
  unsigned char s3421c2f2:1;
  unsigned char s3421c2f3:1;
  unsigned char s3421c2f4:1;
  unsigned char s3421c2f5:1;
  unsigned char s3421c2f6:1;
  char s3421c2f7;
  int s3421c2f8[2];
  int s3421c2f9[2];
  void *s3421c2f10;
  ::S2120C13_nt s3421c2f11;
  ::S2120C13_nt s3421c2f12;
  ::S2120C13_nt s3421c2f13;
  ::S601C12 s3421c2f14;
  void *s3421c2f15;
  int s3421c2f16;
  int s3421c2f17;
  ::S601C13_nt s3421c2f18[4];
  void *s3421c2f19;
  virtual  ~S3421C2(); // _ZN7S3421C2D1Ev
  virtual void  v23(); // _ZN7S3421C23v23Ev
  virtual void  v24(); // _ZN7S3421C23v24Ev
  virtual void  v25(); // _ZN7S3421C23v25Ev
  virtual void  v26(); // _ZN7S3421C23v26Ev
  virtual void  v27(); // _ZN7S3421C23v27Ev
  virtual void  v28(); // _ZN7S3421C23v28Ev
  virtual void  v29(); // _ZN7S3421C23v29Ev
  virtual void  v30(); // _ZN7S3421C23v30Ev
  virtual void  v31(); // _ZN7S3421C23v31Ev
  virtual void  v32(); // _ZN7S3421C23v32Ev
  virtual void  v33(); // _ZN7S3421C23v33Ev
  virtual void  v34(); // _ZN7S3421C23v34Ev
  virtual void  v35(); // _ZN7S3421C23v35Ev
  virtual void  v36(); // _ZN7S3421C23v36Ev
  virtual void  v37(); // _ZN7S3421C23v37Ev
  S3421C2(); // tgen
};
//SIG(-1 S3421C2) C1{ BC2{ vd v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 FC3{ m FC4{ m FL[2]}} FC3 Fp Fi FU5{ m FC6{ Fi:4 Fi:4 Fi:4 Fi:2 Fi:1 Fi:17} Fi} Fi:2 Fi:2 Fc:1 Fc:1 FC7{ m Fp Fp} FC8{ Fp Fp}[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc Fi[2] Fi[2] Fp FC3 FC3 FC3 FC9{ m FC3 FC3} Fp Fi Fi FC10{ m Fp}[4] Fp}


 S3421C2 ::~S3421C2(){ note_dtor("S3421C2", this);}
void  S3421C2 ::v23(){vfunc_called(this, "_ZN7S3421C23v23Ev");}
void  S3421C2 ::v24(){vfunc_called(this, "_ZN7S3421C23v24Ev");}
void  S3421C2 ::v25(){vfunc_called(this, "_ZN7S3421C23v25Ev");}
void  S3421C2 ::v26(){vfunc_called(this, "_ZN7S3421C23v26Ev");}
void  S3421C2 ::v27(){vfunc_called(this, "_ZN7S3421C23v27Ev");}
void  S3421C2 ::v28(){vfunc_called(this, "_ZN7S3421C23v28Ev");}
void  S3421C2 ::v29(){vfunc_called(this, "_ZN7S3421C23v29Ev");}
void  S3421C2 ::v30(){vfunc_called(this, "_ZN7S3421C23v30Ev");}
void  S3421C2 ::v31(){vfunc_called(this, "_ZN7S3421C23v31Ev");}
void  S3421C2 ::v32(){vfunc_called(this, "_ZN7S3421C23v32Ev");}
void  S3421C2 ::v33(){vfunc_called(this, "_ZN7S3421C23v33Ev");}
void  S3421C2 ::v34(){vfunc_called(this, "_ZN7S3421C23v34Ev");}
void  S3421C2 ::v35(){vfunc_called(this, "_ZN7S3421C23v35Ev");}
void  S3421C2 ::v36(){vfunc_called(this, "_ZN7S3421C23v36Ev");}
void  S3421C2 ::v37(){vfunc_called(this, "_ZN7S3421C23v37Ev");}
S3421C2 ::S3421C2(){ note_ctor("S3421C2", this);} // tgen

static void Test_S3421C2()
{
  extern Class_Descriptor cd_S3421C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(36,54)];
    init_test(&cd_S3421C2, buf);
    S3421C2 *dp, &lv = *(dp=new (buf) S3421C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(280,212), "sizeof(S3421C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3421C2)");
    check_base_class_offset(lv, (S3421C3*), 0, "S3421C2");
    set_bf_and_test(lv, s3421c2f0, ABISELECT(112,76), 0, 1, 1, "S3421C2");
    set_bf_and_test(lv, s3421c2f1, ABISELECT(112,76), 1, 1, 1, "S3421C2");
    set_bf_and_test(lv, s3421c2f2, ABISELECT(112,76), 2, 1, 1, "S3421C2");
    set_bf_and_test(lv, s3421c2f3, ABISELECT(112,76), 3, 1, 1, "S3421C2");
    set_bf_and_test(lv, s3421c2f4, ABISELECT(112,76), 4, 1, 1, "S3421C2");
    set_bf_and_test(lv, s3421c2f5, ABISELECT(112,76), 5, 1, 1, "S3421C2");
    set_bf_and_test(lv, s3421c2f6, ABISELECT(112,76), 6, 1, 1, "S3421C2");
    check_field_offset(lv, s3421c2f7, ABISELECT(113,77), "S3421C2.s3421c2f7");
    check_field_offset(lv, s3421c2f8, ABISELECT(116,80), "S3421C2.s3421c2f8");
    check_field_offset(lv, s3421c2f9, ABISELECT(124,88), "S3421C2.s3421c2f9");
    check_field_offset(lv, s3421c2f10, ABISELECT(136,96), "S3421C2.s3421c2f10");
    check_field_offset(lv, s3421c2f11, ABISELECT(144,100), "S3421C2.s3421c2f11");
    check_field_offset(lv, s3421c2f12, ABISELECT(160,116), "S3421C2.s3421c2f12");
    check_field_offset(lv, s3421c2f13, ABISELECT(176,132), "S3421C2.s3421c2f13");
    check_field_offset(lv, s3421c2f14, ABISELECT(192,148), "S3421C2.s3421c2f14");
    check_field_offset(lv, s3421c2f15, ABISELECT(224,180), "S3421C2.s3421c2f15");
    check_field_offset(lv, s3421c2f16, ABISELECT(232,184), "S3421C2.s3421c2f16");
    check_field_offset(lv, s3421c2f17, ABISELECT(236,188), "S3421C2.s3421c2f17");
    check_field_offset(lv, s3421c2f18, ABISELECT(240,192), "S3421C2.s3421c2f18");
    check_field_offset(lv, s3421c2f19, ABISELECT(272,208), "S3421C2.s3421c2f19");
    test_class_info(&lv, &cd_S3421C2);
    dp->~S3421C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3421C2(Test_S3421C2, "S3421C2", ABISELECT(280,212));

#else // __cplusplus

extern void _ZN7S3421C2C1Ev();
extern void _ZN7S3421C2D1Ev();
Name_Map name_map_S3421C2[] = {
  NSPAIR(_ZN7S3421C2C1Ev),
  NSPAIR(_ZN7S3421C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3421C3;
extern VTBL_ENTRY _ZTI7S3421C3[];
extern  VTBL_ENTRY _ZTV7S3421C3[];
static Base_Class bases_S3421C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3421C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3421C2[];
extern void _ZN7S3421C2D1Ev();
extern void _ZN7S3421C2D0Ev();
extern void _ZN7S3421C32v8Ev();
extern void _ZN7S3421C32v9Ev();
extern void _ZN7S3421C33v10Ev();
extern void _ZN7S3421C33v11Ev();
extern void _ZN7S3421C33v12Ev();
extern void _ZN7S3421C33v13Ev();
extern void _ZN7S3421C33v14Ev();
extern void _ZN7S3421C33v15Ev();
extern void _ZN7S3421C33v16Ev();
extern void _ZN7S3421C33v17Ev();
extern void _ZN7S3421C33v18Ev();
extern void _ZN7S3421C33v19Ev();
extern void _ZN7S3421C33v20Ev();
extern void _ZN7S3421C33v21Ev();
extern void _ZN7S3421C33v22Ev();
extern void _ZN7S3421C23v23Ev();
extern void _ZN7S3421C23v24Ev();
extern void _ZN7S3421C23v25Ev();
extern void _ZN7S3421C23v26Ev();
extern void _ZN7S3421C23v27Ev();
extern void _ZN7S3421C23v28Ev();
extern void _ZN7S3421C23v29Ev();
extern void _ZN7S3421C23v30Ev();
extern void _ZN7S3421C23v31Ev();
extern void _ZN7S3421C23v32Ev();
extern void _ZN7S3421C23v33Ev();
extern void _ZN7S3421C23v34Ev();
extern void _ZN7S3421C23v35Ev();
extern void _ZN7S3421C23v36Ev();
extern void _ZN7S3421C23v37Ev();
static  VTBL_ENTRY vtc_S3421C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3421C2[0]),
  (VTBL_ENTRY)&_ZN7S3421C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3421C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3421C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3421C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3421C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3421C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3421C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3421C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3421C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3421C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3421C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3421C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3421C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3421C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3421C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3421C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3421C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3421C23v23Ev,
  (VTBL_ENTRY)&_ZN7S3421C23v24Ev,
  (VTBL_ENTRY)&_ZN7S3421C23v25Ev,
  (VTBL_ENTRY)&_ZN7S3421C23v26Ev,
  (VTBL_ENTRY)&_ZN7S3421C23v27Ev,
  (VTBL_ENTRY)&_ZN7S3421C23v28Ev,
  (VTBL_ENTRY)&_ZN7S3421C23v29Ev,
  (VTBL_ENTRY)&_ZN7S3421C23v30Ev,
  (VTBL_ENTRY)&_ZN7S3421C23v31Ev,
  (VTBL_ENTRY)&_ZN7S3421C23v32Ev,
  (VTBL_ENTRY)&_ZN7S3421C23v33Ev,
  (VTBL_ENTRY)&_ZN7S3421C23v34Ev,
  (VTBL_ENTRY)&_ZN7S3421C23v35Ev,
  (VTBL_ENTRY)&_ZN7S3421C23v36Ev,
  (VTBL_ENTRY)&_ZN7S3421C23v37Ev,
};
extern VTBL_ENTRY _ZTI7S3421C2[];
extern  VTBL_ENTRY _ZTV7S3421C2[];
Class_Descriptor cd_S3421C2 = {  "S3421C2", // class name
  bases_S3421C2, 1,
  &(vtc_S3421C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(280,212), // object size
  NSPAIRA(_ZTI7S3421C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3421C2),34, //virtual function table var
  2, // 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  S3421C12_nt  {
  int s3421c12f0;
  int s3421c12f1;
  void  mf3421c12(); // _ZN11S3421C12_nt9mf3421c12Ev
};
//SIG(-1 S3421C12_nt) C1{ m Fi[2]}


void  S3421C12_nt ::mf3421c12(){}

//skip512 S3421C12_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3421C1  : S3421C2 {
  int s3421c1f0;
  ::S3421C12_nt s3421c1f1;
  ::S601C29_nt s3421c1f2;
  ::S601C29_nt s3421c1f3;
  ::S601C25_nt s3421c1f4;
  virtual  ~S3421C1(); // _ZN7S3421C1D1Ev
  virtual void  v1(); // _ZN7S3421C12v1Ev
  virtual void  v2(); // _ZN7S3421C12v2Ev
  virtual void  v3(); // _ZN7S3421C12v3Ev
  virtual void  v4(); // _ZN7S3421C12v4Ev
  virtual void  v5(); // _ZN7S3421C12v5Ev
  virtual void  v6(); // _ZN7S3421C12v6Ev
  virtual void  v7(); // _ZN7S3421C12v7Ev
  S3421C1(); // tgen
};
//SIG(1 S3421C1) C1{ BC2{ BC3{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 FC4{ m FC5{ m FL[2]}} FC4 Fp Fi FU6{ m FC7{ Fi:4 Fi:4 Fi:4 Fi:2 Fi:1 Fi:17} Fi} Fi:2 Fi:2 Fc:1 Fc:1 FC8{ m Fp Fp} FC9{ Fp Fp}[2]} vd v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc Fi[2] Fi[2] Fp FC4 FC4 FC4 FC10{ m FC4 FC4} Fp Fi Fi FC11{ m Fp}[4] Fp} vd v1 v2 v3 v4 v5 v6 v7 Fi FC12{ m Fi Fi} FC13{ m FC14{ m FL}} FC13 FC15{ m FC5}}


 S3421C1 ::~S3421C1(){ note_dtor("S3421C1", this);}
void  S3421C1 ::v1(){vfunc_called(this, "_ZN7S3421C12v1Ev");}
void  S3421C1 ::v2(){vfunc_called(this, "_ZN7S3421C12v2Ev");}
void  S3421C1 ::v3(){vfunc_called(this, "_ZN7S3421C12v3Ev");}
void  S3421C1 ::v4(){vfunc_called(this, "_ZN7S3421C12v4Ev");}
void  S3421C1 ::v5(){vfunc_called(this, "_ZN7S3421C12v5Ev");}
void  S3421C1 ::v6(){vfunc_called(this, "_ZN7S3421C12v6Ev");}
void  S3421C1 ::v7(){vfunc_called(this, "_ZN7S3421C12v7Ev");}
S3421C1 ::S3421C1(){ note_ctor("S3421C1", this);} // tgen

static void Test_S3421C1()
{
  extern Class_Descriptor cd_S3421C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(42,65)];
    init_test(&cd_S3421C1, buf);
    S3421C1 *dp, &lv = *(dp=new (buf) S3421C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(328,256), "sizeof(S3421C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3421C1)");
    check_base_class_offset(lv, (S3421C3*)(S3421C2*), 0, "S3421C1");
    check_base_class_offset(lv, (S3421C2*), 0, "S3421C1");
    check_field_offset(lv, s3421c1f0, ABISELECT(280,212), "S3421C1.s3421c1f0");
    check_field_offset(lv, s3421c1f1, ABISELECT(284,216), "S3421C1.s3421c1f1");
    check_field_offset(lv, s3421c1f2, ABISELECT(296,224), "S3421C1.s3421c1f2");
    check_field_offset(lv, s3421c1f3, ABISELECT(304,232), "S3421C1.s3421c1f3");
    check_field_offset(lv, s3421c1f4, ABISELECT(312,240), "S3421C1.s3421c1f4");
    test_class_info(&lv, &cd_S3421C1);
    dp->~S3421C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3421C1(Test_S3421C1, "S3421C1", ABISELECT(328,256));

#else // __cplusplus

extern void _ZN7S3421C1C1Ev();
extern void _ZN7S3421C1D1Ev();
Name_Map name_map_S3421C1[] = {
  NSPAIR(_ZN7S3421C1C1Ev),
  NSPAIR(_ZN7S3421C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3421C3;
extern VTBL_ENTRY _ZTI7S3421C3[];
extern  VTBL_ENTRY _ZTV7S3421C3[];
extern Class_Descriptor cd_S3421C2;
extern VTBL_ENTRY _ZTI7S3421C2[];
extern  VTBL_ENTRY _ZTV7S3421C2[];
static Base_Class bases_S3421C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3421C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3421C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S3421C1[];
extern void _ZN7S3421C1D1Ev();
extern void _ZN7S3421C1D0Ev();
extern void _ZN7S3421C32v8Ev();
extern void _ZN7S3421C32v9Ev();
extern void _ZN7S3421C33v10Ev();
extern void _ZN7S3421C33v11Ev();
extern void _ZN7S3421C33v12Ev();
extern void _ZN7S3421C33v13Ev();
extern void _ZN7S3421C33v14Ev();
extern void _ZN7S3421C33v15Ev();
extern void _ZN7S3421C33v16Ev();
extern void _ZN7S3421C33v17Ev();
extern void _ZN7S3421C33v18Ev();
extern void _ZN7S3421C33v19Ev();
extern void _ZN7S3421C33v20Ev();
extern void _ZN7S3421C33v21Ev();
extern void _ZN7S3421C33v22Ev();
extern void _ZN7S3421C23v23Ev();
extern void _ZN7S3421C23v24Ev();
extern void _ZN7S3421C23v25Ev();
extern void _ZN7S3421C23v26Ev();
extern void _ZN7S3421C23v27Ev();
extern void _ZN7S3421C23v28Ev();
extern void _ZN7S3421C23v29Ev();
extern void _ZN7S3421C23v30Ev();
extern void _ZN7S3421C23v31Ev();
extern void _ZN7S3421C23v32Ev();
extern void _ZN7S3421C23v33Ev();
extern void _ZN7S3421C23v34Ev();
extern void _ZN7S3421C23v35Ev();
extern void _ZN7S3421C23v36Ev();
extern void _ZN7S3421C23v37Ev();
extern void _ZN7S3421C12v1Ev();
extern void _ZN7S3421C12v2Ev();
extern void _ZN7S3421C12v3Ev();
extern void _ZN7S3421C12v4Ev();
extern void _ZN7S3421C12v5Ev();
extern void _ZN7S3421C12v6Ev();
extern void _ZN7S3421C12v7Ev();
static  VTBL_ENTRY vtc_S3421C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3421C1[0]),
  (VTBL_ENTRY)&_ZN7S3421C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3421C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3421C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3421C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3421C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3421C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3421C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3421C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3421C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3421C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3421C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3421C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3421C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3421C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3421C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3421C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3421C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3421C23v23Ev,
  (VTBL_ENTRY)&_ZN7S3421C23v24Ev,
  (VTBL_ENTRY)&_ZN7S3421C23v25Ev,
  (VTBL_ENTRY)&_ZN7S3421C23v26Ev,
  (VTBL_ENTRY)&_ZN7S3421C23v27Ev,
  (VTBL_ENTRY)&_ZN7S3421C23v28Ev,
  (VTBL_ENTRY)&_ZN7S3421C23v29Ev,
  (VTBL_ENTRY)&_ZN7S3421C23v30Ev,
  (VTBL_ENTRY)&_ZN7S3421C23v31Ev,
  (VTBL_ENTRY)&_ZN7S3421C23v32Ev,
  (VTBL_ENTRY)&_ZN7S3421C23v33Ev,
  (VTBL_ENTRY)&_ZN7S3421C23v34Ev,
  (VTBL_ENTRY)&_ZN7S3421C23v35Ev,
  (VTBL_ENTRY)&_ZN7S3421C23v36Ev,
  (VTBL_ENTRY)&_ZN7S3421C23v37Ev,
  (VTBL_ENTRY)&_ZN7S3421C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3421C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3421C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3421C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3421C12v5Ev,
  (VTBL_ENTRY)&_ZN7S3421C12v6Ev,
  (VTBL_ENTRY)&_ZN7S3421C12v7Ev,
};
extern VTBL_ENTRY _ZTI7S3421C1[];
extern  VTBL_ENTRY _ZTV7S3421C1[];
Class_Descriptor cd_S3421C1 = {  "S3421C1", // class name
  bases_S3421C1, 2,
  &(vtc_S3421C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(328,256), // object size
  NSPAIRA(_ZTI7S3421C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3421C1),41, //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  S3278C3  {
  ::S2120C13_nt s3278c3f0;
  ::S2120C13_nt s3278c3f1;
  void *s3278c3f2;
  int s3278c3f3;
  ::S601C8 s3278c3f4;
  int s3278c3f5:2;
  int s3278c3f6:2;
  unsigned char s3278c3f7:1;
  unsigned char s3278c3f8:1;
  ::S601C53 s3278c3f9;
  ::S601C11 s3278c3f10[2];
  virtual  ~S3278C3(); // _ZN7S3278C3D1Ev
  virtual void  v5(); // _ZN7S3278C32v5Ev
  virtual void  v6(); // _ZN7S3278C32v6Ev
  virtual void  v7(); // _ZN7S3278C32v7Ev
  virtual void  v8(); // _ZN7S3278C32v8Ev
  virtual void  v9(); // _ZN7S3278C32v9Ev
  virtual void  v10(); // _ZN7S3278C33v10Ev
  virtual void  v11(); // _ZN7S3278C33v11Ev
  virtual void  v12(); // _ZN7S3278C33v12Ev
  virtual void  v13(); // _ZN7S3278C33v13Ev
  virtual void  v14(); // _ZN7S3278C33v14Ev
  virtual void  v15(); // _ZN7S3278C33v15Ev
  virtual void  v16(); // _ZN7S3278C33v16Ev
  virtual void  v17(); // _ZN7S3278C33v17Ev
  virtual void  v18(); // _ZN7S3278C33v18Ev
  virtual void  v19(); // _ZN7S3278C33v19Ev
  S3278C3(); // tgen
};
//SIG(-1 S3278C3) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 FC2{ m FC3{ m FL[2]}} FC2 Fp Fi FU4{ m FC5{ Fi:4 Fi:4 Fi:4 Fi:2 Fi:1 Fi:17} Fi} Fi:2 Fi:2 Fc:1 Fc:1 FC6{ m Fp Fp} FC7{ Fp Fp}[2]}


 S3278C3 ::~S3278C3(){ note_dtor("S3278C3", this);}
void  S3278C3 ::v5(){vfunc_called(this, "_ZN7S3278C32v5Ev");}
void  S3278C3 ::v6(){vfunc_called(this, "_ZN7S3278C32v6Ev");}
void  S3278C3 ::v7(){vfunc_called(this, "_ZN7S3278C32v7Ev");}
void  S3278C3 ::v8(){vfunc_called(this, "_ZN7S3278C32v8Ev");}
void  S3278C3 ::v9(){vfunc_called(this, "_ZN7S3278C32v9Ev");}
void  S3278C3 ::v10(){vfunc_called(this, "_ZN7S3278C33v10Ev");}
void  S3278C3 ::v11(){vfunc_called(this, "_ZN7S3278C33v11Ev");}
void  S3278C3 ::v12(){vfunc_called(this, "_ZN7S3278C33v12Ev");}
void  S3278C3 ::v13(){vfunc_called(this, "_ZN7S3278C33v13Ev");}
void  S3278C3 ::v14(){vfunc_called(this, "_ZN7S3278C33v14Ev");}
void  S3278C3 ::v15(){vfunc_called(this, "_ZN7S3278C33v15Ev");}
void  S3278C3 ::v16(){vfunc_called(this, "_ZN7S3278C33v16Ev");}
void  S3278C3 ::v17(){vfunc_called(this, "_ZN7S3278C33v17Ev");}
void  S3278C3 ::v18(){vfunc_called(this, "_ZN7S3278C33v18Ev");}
void  S3278C3 ::v19(){vfunc_called(this, "_ZN7S3278C33v19Ev");}
S3278C3 ::S3278C3(){ note_ctor("S3278C3", this);} // tgen

static void Test_S3278C3()
{
  extern Class_Descriptor cd_S3278C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,20)];
    init_test(&cd_S3278C3, buf);
    S3278C3 *dp, &lv = *(dp=new (buf) S3278C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,76), "sizeof(S3278C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3278C3)");
    check_field_offset(lv, s3278c3f0, ABISELECT(8,4), "S3278C3.s3278c3f0");
    check_field_offset(lv, s3278c3f1, ABISELECT(24,20), "S3278C3.s3278c3f1");
    check_field_offset(lv, s3278c3f2, ABISELECT(40,36), "S3278C3.s3278c3f2");
    check_field_offset(lv, s3278c3f3, ABISELECT(48,40), "S3278C3.s3278c3f3");
    check_field_offset(lv, s3278c3f4, ABISELECT(52,44), "S3278C3.s3278c3f4");
    set_bf_and_test(lv, s3278c3f5, ABISELECT(56,48), 0, 2, 1, "S3278C3");
    set_bf_and_test(lv, s3278c3f5, ABISELECT(56,48), 0, 2, hide_sll(1LL<<1), "S3278C3");
    set_bf_and_test(lv, s3278c3f6, ABISELECT(56,48), 2, 2, 1, "S3278C3");
    set_bf_and_test(lv, s3278c3f6, ABISELECT(56,48), 2, 2, hide_sll(1LL<<1), "S3278C3");
    set_bf_and_test(lv, s3278c3f7, ABISELECT(56,48), 4, 1, 1, "S3278C3");
    set_bf_and_test(lv, s3278c3f8, ABISELECT(56,48), 5, 1, 1, "S3278C3");
    check_field_offset(lv, s3278c3f9, ABISELECT(64,52), "S3278C3.s3278c3f9");
    check_field_offset(lv, s3278c3f10, ABISELECT(80,60), "S3278C3.s3278c3f10");
    test_class_info(&lv, &cd_S3278C3);
    dp->~S3278C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3278C3(Test_S3278C3, "S3278C3", ABISELECT(112,76));

#else // __cplusplus

extern void _ZN7S3278C3C1Ev();
extern void _ZN7S3278C3D1Ev();
Name_Map name_map_S3278C3[] = {
  NSPAIR(_ZN7S3278C3C1Ev),
  NSPAIR(_ZN7S3278C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3278C3[];
extern void _ZN7S3278C3D1Ev();
extern void _ZN7S3278C3D0Ev();
extern void _ZN7S3278C32v5Ev();
extern void _ZN7S3278C32v6Ev();
extern void _ZN7S3278C32v7Ev();
extern void _ZN7S3278C32v8Ev();
extern void _ZN7S3278C32v9Ev();
extern void _ZN7S3278C33v10Ev();
extern void _ZN7S3278C33v11Ev();
extern void _ZN7S3278C33v12Ev();
extern void _ZN7S3278C33v13Ev();
extern void _ZN7S3278C33v14Ev();
extern void _ZN7S3278C33v15Ev();
extern void _ZN7S3278C33v16Ev();
extern void _ZN7S3278C33v17Ev();
extern void _ZN7S3278C33v18Ev();
extern void _ZN7S3278C33v19Ev();
static  VTBL_ENTRY vtc_S3278C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3278C3[0]),
  (VTBL_ENTRY)&_ZN7S3278C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3278C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3278C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3278C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3278C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3278C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3278C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3278C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3278C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3278C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3278C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3278C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3278C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3278C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3278C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3278C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3278C33v19Ev,
};
extern VTBL_ENTRY _ZTI7S3278C3[];
extern  VTBL_ENTRY _ZTV7S3278C3[];
Class_Descriptor cd_S3278C3 = {  "S3278C3", // class name
  0,0,//no base classes
  &(vtc_S3278C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,76), // object size
  NSPAIRA(_ZTI7S3278C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3278C3),19, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3278C2  : S3278C3 {
  unsigned char s3278c2f0:1;
  unsigned char s3278c2f1:1;
  unsigned char s3278c2f2:1;
  unsigned char s3278c2f3:1;
  unsigned char s3278c2f4:1;
  unsigned char s3278c2f5:1;
  unsigned char s3278c2f6:1;
  char s3278c2f7;
  int s3278c2f8[2];
  int s3278c2f9[2];
  void *s3278c2f10;
  ::S2120C13_nt s3278c2f11;
  ::S2120C13_nt s3278c2f12;
  ::S2120C13_nt s3278c2f13;
  ::S601C12 s3278c2f14;
  void *s3278c2f15;
  int s3278c2f16;
  int s3278c2f17;
  ::S601C13_nt s3278c2f18[4];
  void *s3278c2f19;
  virtual  ~S3278C2(); // _ZN7S3278C2D1Ev
  virtual void  v20(); // _ZN7S3278C23v20Ev
  virtual void  v21(); // _ZN7S3278C23v21Ev
  virtual void  v22(); // _ZN7S3278C23v22Ev
  virtual void  v23(); // _ZN7S3278C23v23Ev
  virtual void  v24(); // _ZN7S3278C23v24Ev
  virtual void  v25(); // _ZN7S3278C23v25Ev
  virtual void  v26(); // _ZN7S3278C23v26Ev
  virtual void  v27(); // _ZN7S3278C23v27Ev
  virtual void  v28(); // _ZN7S3278C23v28Ev
  virtual void  v29(); // _ZN7S3278C23v29Ev
  virtual void  v30(); // _ZN7S3278C23v30Ev
  virtual void  v31(); // _ZN7S3278C23v31Ev
  virtual void  v32(); // _ZN7S3278C23v32Ev
  virtual void  v33(); // _ZN7S3278C23v33Ev
  virtual void  v34(); // _ZN7S3278C23v34Ev
  S3278C2(); // tgen
};
//SIG(-1 S3278C2) C1{ BC2{ vd v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 FC3{ m FC4{ m FL[2]}} FC3 Fp Fi FU5{ m FC6{ Fi:4 Fi:4 Fi:4 Fi:2 Fi:1 Fi:17} Fi} Fi:2 Fi:2 Fc:1 Fc:1 FC7{ m Fp Fp} FC8{ Fp Fp}[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc Fi[2] Fi[2] Fp FC3 FC3 FC3 FC9{ m FC3 FC3} Fp Fi Fi FC10{ m Fp}[4] Fp}


 S3278C2 ::~S3278C2(){ note_dtor("S3278C2", this);}
void  S3278C2 ::v20(){vfunc_called(this, "_ZN7S3278C23v20Ev");}
void  S3278C2 ::v21(){vfunc_called(this, "_ZN7S3278C23v21Ev");}
void  S3278C2 ::v22(){vfunc_called(this, "_ZN7S3278C23v22Ev");}
void  S3278C2 ::v23(){vfunc_called(this, "_ZN7S3278C23v23Ev");}
void  S3278C2 ::v24(){vfunc_called(this, "_ZN7S3278C23v24Ev");}
void  S3278C2 ::v25(){vfunc_called(this, "_ZN7S3278C23v25Ev");}
void  S3278C2 ::v26(){vfunc_called(this, "_ZN7S3278C23v26Ev");}
void  S3278C2 ::v27(){vfunc_called(this, "_ZN7S3278C23v27Ev");}
void  S3278C2 ::v28(){vfunc_called(this, "_ZN7S3278C23v28Ev");}
void  S3278C2 ::v29(){vfunc_called(this, "_ZN7S3278C23v29Ev");}
void  S3278C2 ::v30(){vfunc_called(this, "_ZN7S3278C23v30Ev");}
void  S3278C2 ::v31(){vfunc_called(this, "_ZN7S3278C23v31Ev");}
void  S3278C2 ::v32(){vfunc_called(this, "_ZN7S3278C23v32Ev");}
void  S3278C2 ::v33(){vfunc_called(this, "_ZN7S3278C23v33Ev");}
void  S3278C2 ::v34(){vfunc_called(this, "_ZN7S3278C23v34Ev");}
S3278C2 ::S3278C2(){ note_ctor("S3278C2", this);} // tgen

static void Test_S3278C2()
{
  extern Class_Descriptor cd_S3278C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(36,54)];
    init_test(&cd_S3278C2, buf);
    S3278C2 *dp, &lv = *(dp=new (buf) S3278C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(280,212), "sizeof(S3278C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3278C2)");
    check_base_class_offset(lv, (S3278C3*), 0, "S3278C2");
    set_bf_and_test(lv, s3278c2f0, ABISELECT(112,76), 0, 1, 1, "S3278C2");
    set_bf_and_test(lv, s3278c2f1, ABISELECT(112,76), 1, 1, 1, "S3278C2");
    set_bf_and_test(lv, s3278c2f2, ABISELECT(112,76), 2, 1, 1, "S3278C2");
    set_bf_and_test(lv, s3278c2f3, ABISELECT(112,76), 3, 1, 1, "S3278C2");
    set_bf_and_test(lv, s3278c2f4, ABISELECT(112,76), 4, 1, 1, "S3278C2");
    set_bf_and_test(lv, s3278c2f5, ABISELECT(112,76), 5, 1, 1, "S3278C2");
    set_bf_and_test(lv, s3278c2f6, ABISELECT(112,76), 6, 1, 1, "S3278C2");
    check_field_offset(lv, s3278c2f7, ABISELECT(113,77), "S3278C2.s3278c2f7");
    check_field_offset(lv, s3278c2f8, ABISELECT(116,80), "S3278C2.s3278c2f8");
    check_field_offset(lv, s3278c2f9, ABISELECT(124,88), "S3278C2.s3278c2f9");
    check_field_offset(lv, s3278c2f10, ABISELECT(136,96), "S3278C2.s3278c2f10");
    check_field_offset(lv, s3278c2f11, ABISELECT(144,100), "S3278C2.s3278c2f11");
    check_field_offset(lv, s3278c2f12, ABISELECT(160,116), "S3278C2.s3278c2f12");
    check_field_offset(lv, s3278c2f13, ABISELECT(176,132), "S3278C2.s3278c2f13");
    check_field_offset(lv, s3278c2f14, ABISELECT(192,148), "S3278C2.s3278c2f14");
    check_field_offset(lv, s3278c2f15, ABISELECT(224,180), "S3278C2.s3278c2f15");
    check_field_offset(lv, s3278c2f16, ABISELECT(232,184), "S3278C2.s3278c2f16");
    check_field_offset(lv, s3278c2f17, ABISELECT(236,188), "S3278C2.s3278c2f17");
    check_field_offset(lv, s3278c2f18, ABISELECT(240,192), "S3278C2.s3278c2f18");
    check_field_offset(lv, s3278c2f19, ABISELECT(272,208), "S3278C2.s3278c2f19");
    test_class_info(&lv, &cd_S3278C2);
    dp->~S3278C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3278C2(Test_S3278C2, "S3278C2", ABISELECT(280,212));

#else // __cplusplus

extern void _ZN7S3278C2C1Ev();
extern void _ZN7S3278C2D1Ev();
Name_Map name_map_S3278C2[] = {
  NSPAIR(_ZN7S3278C2C1Ev),
  NSPAIR(_ZN7S3278C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3278C3;
extern VTBL_ENTRY _ZTI7S3278C3[];
extern  VTBL_ENTRY _ZTV7S3278C3[];
static Base_Class bases_S3278C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3278C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3278C2[];
extern void _ZN7S3278C2D1Ev();
extern void _ZN7S3278C2D0Ev();
extern void _ZN7S3278C32v5Ev();
extern void _ZN7S3278C32v6Ev();
extern void _ZN7S3278C32v7Ev();
extern void _ZN7S3278C32v8Ev();
extern void _ZN7S3278C32v9Ev();
extern void _ZN7S3278C33v10Ev();
extern void _ZN7S3278C33v11Ev();
extern void _ZN7S3278C33v12Ev();
extern void _ZN7S3278C33v13Ev();
extern void _ZN7S3278C33v14Ev();
extern void _ZN7S3278C33v15Ev();
extern void _ZN7S3278C33v16Ev();
extern void _ZN7S3278C33v17Ev();
extern void _ZN7S3278C33v18Ev();
extern void _ZN7S3278C33v19Ev();
extern void _ZN7S3278C23v20Ev();
extern void _ZN7S3278C23v21Ev();
extern void _ZN7S3278C23v22Ev();
extern void _ZN7S3278C23v23Ev();
extern void _ZN7S3278C23v24Ev();
extern void _ZN7S3278C23v25Ev();
extern void _ZN7S3278C23v26Ev();
extern void _ZN7S3278C23v27Ev();
extern void _ZN7S3278C23v28Ev();
extern void _ZN7S3278C23v29Ev();
extern void _ZN7S3278C23v30Ev();
extern void _ZN7S3278C23v31Ev();
extern void _ZN7S3278C23v32Ev();
extern void _ZN7S3278C23v33Ev();
extern void _ZN7S3278C23v34Ev();
static  VTBL_ENTRY vtc_S3278C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3278C2[0]),
  (VTBL_ENTRY)&_ZN7S3278C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3278C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3278C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3278C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3278C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3278C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3278C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3278C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3278C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3278C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3278C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3278C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3278C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3278C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3278C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3278C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3278C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3278C23v20Ev,
  (VTBL_ENTRY)&_ZN7S3278C23v21Ev,
  (VTBL_ENTRY)&_ZN7S3278C23v22Ev,
  (VTBL_ENTRY)&_ZN7S3278C23v23Ev,
  (VTBL_ENTRY)&_ZN7S3278C23v24Ev,
  (VTBL_ENTRY)&_ZN7S3278C23v25Ev,
  (VTBL_ENTRY)&_ZN7S3278C23v26Ev,
  (VTBL_ENTRY)&_ZN7S3278C23v27Ev,
  (VTBL_ENTRY)&_ZN7S3278C23v28Ev,
  (VTBL_ENTRY)&_ZN7S3278C23v29Ev,
  (VTBL_ENTRY)&_ZN7S3278C23v30Ev,
  (VTBL_ENTRY)&_ZN7S3278C23v31Ev,
  (VTBL_ENTRY)&_ZN7S3278C23v32Ev,
  (VTBL_ENTRY)&_ZN7S3278C23v33Ev,
  (VTBL_ENTRY)&_ZN7S3278C23v34Ev,
};
extern VTBL_ENTRY _ZTI7S3278C2[];
extern  VTBL_ENTRY _ZTV7S3278C2[];
Class_Descriptor cd_S3278C2 = {  "S3278C2", // class name
  bases_S3278C2, 1,
  &(vtc_S3278C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(280,212), // object size
  NSPAIRA(_ZTI7S3278C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3278C2),34, //virtual function table var
  2, // 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  S3278C12  {
  int s3278c12f0;
  void *s3278c12f1;
  void *s3278c12f2;
  int s3278c12f3;
  int s3278c12f4;
  void *s3278c12f5;
  int s3278c12f6;
  void *s3278c12f7;
  void *s3278c12f8;
  int s3278c12f9;
  void  mf3278c12(); // _ZN8S3278C129mf3278c12Ev
  virtual  ~S3278C12(); // _ZN8S3278C12D1Ev
  S3278C12(); // tgen
};
//SIG(-1 S3278C12) C1{ vd m Fi Fp[2] Fi[2] Fp Fi Fp[2] Fi}


void  S3278C12 ::mf3278c12(){}
 S3278C12 ::~S3278C12(){ note_dtor("S3278C12", this);}
S3278C12 ::S3278C12(){ note_ctor("S3278C12", this);} // tgen

static void Test_S3278C12()
{
  extern Class_Descriptor cd_S3278C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,12)];
    init_test(&cd_S3278C12, buf);
    S3278C12 *dp, &lv = *(dp=new (buf) S3278C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,44), "sizeof(S3278C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3278C12)");
    check_field_offset(lv, s3278c12f0, ABISELECT(8,4), "S3278C12.s3278c12f0");
    check_field_offset(lv, s3278c12f1, ABISELECT(16,8), "S3278C12.s3278c12f1");
    check_field_offset(lv, s3278c12f2, ABISELECT(24,12), "S3278C12.s3278c12f2");
    check_field_offset(lv, s3278c12f3, ABISELECT(32,16), "S3278C12.s3278c12f3");
    check_field_offset(lv, s3278c12f4, ABISELECT(36,20), "S3278C12.s3278c12f4");
    check_field_offset(lv, s3278c12f5, ABISELECT(40,24), "S3278C12.s3278c12f5");
    check_field_offset(lv, s3278c12f6, ABISELECT(48,28), "S3278C12.s3278c12f6");
    check_field_offset(lv, s3278c12f7, ABISELECT(56,32), "S3278C12.s3278c12f7");
    check_field_offset(lv, s3278c12f8, ABISELECT(64,36), "S3278C12.s3278c12f8");
    check_field_offset(lv, s3278c12f9, ABISELECT(72,40), "S3278C12.s3278c12f9");
    test_class_info(&lv, &cd_S3278C12);
    dp->~S3278C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3278C12(Test_S3278C12, "S3278C12", ABISELECT(80,44));

#else // __cplusplus

extern void _ZN8S3278C12C1Ev();
extern void _ZN8S3278C12D1Ev();
Name_Map name_map_S3278C12[] = {
  NSPAIR(_ZN8S3278C12C1Ev),
  NSPAIR(_ZN8S3278C12D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S3278C12[];
extern void _ZN8S3278C12D1Ev();
extern void _ZN8S3278C12D0Ev();
static  VTBL_ENTRY vtc_S3278C12[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S3278C12[0]),
  (VTBL_ENTRY)&_ZN8S3278C12D1Ev,
  (VTBL_ENTRY)&_ZN8S3278C12D0Ev,
};
extern VTBL_ENTRY _ZTI8S3278C12[];
extern  VTBL_ENTRY _ZTV8S3278C12[];
Class_Descriptor cd_S3278C12 = {  "S3278C12", // class name
  0,0,//no base classes
  &(vtc_S3278C12[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,44), // object size
  NSPAIRA(_ZTI8S3278C12),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S3278C12),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  S3278C1  : S3278C2 {
  void *s3278c1f0;
  ::S3278C12 s3278c1f1;
  void *s3278c1f2;
  void *s3278c1f3;
  int s3278c1f4;
  int s3278c1f5;
  virtual  ~S3278C1(); // _ZN7S3278C1D1Ev
  virtual void  v1(); // _ZN7S3278C12v1Ev
  virtual void  v2(); // _ZN7S3278C12v2Ev
  virtual void  v3(); // _ZN7S3278C12v3Ev
  virtual void  v4(); // _ZN7S3278C12v4Ev
  S3278C1(); // tgen
};
//SIG(1 S3278C1) C1{ BC2{ BC3{ vd v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 FC4{ m FC5{ m FL[2]}} FC4 Fp Fi FU6{ m FC7{ Fi:4 Fi:4 Fi:4 Fi:2 Fi:1 Fi:17} Fi} Fi:2 Fi:2 Fc:1 Fc:1 FC8{ m Fp Fp} FC9{ Fp Fp}[2]} vd v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc Fi[2] Fi[2] Fp FC4 FC4 FC4 FC10{ m FC4 FC4} Fp Fi Fi FC11{ m Fp}[4] Fp} vd v1 v2 v3 v4 Fp FC12{ vd m Fi Fp Fp Fi Fi Fp Fi Fp Fp Fi} Fp Fp Fi Fi}


 S3278C1 ::~S3278C1(){ note_dtor("S3278C1", this);}
void  S3278C1 ::v1(){vfunc_called(this, "_ZN7S3278C12v1Ev");}
void  S3278C1 ::v2(){vfunc_called(this, "_ZN7S3278C12v2Ev");}
void  S3278C1 ::v3(){vfunc_called(this, "_ZN7S3278C12v3Ev");}
void  S3278C1 ::v4(){vfunc_called(this, "_ZN7S3278C12v4Ev");}
S3278C1 ::S3278C1(){ note_ctor("S3278C1", this);} // tgen

static void Test_S3278C1()
{
  extern Class_Descriptor cd_S3278C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(50,70)];
    init_test(&cd_S3278C1, buf);
    S3278C1 *dp, &lv = *(dp=new (buf) S3278C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(392,276), "sizeof(S3278C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3278C1)");
    check_base_class_offset(lv, (S3278C3*)(S3278C2*), 0, "S3278C1");
    check_base_class_offset(lv, (S3278C2*), 0, "S3278C1");
    check_field_offset(lv, s3278c1f0, ABISELECT(280,212), "S3278C1.s3278c1f0");
    check_field_offset(lv, s3278c1f1, ABISELECT(288,216), "S3278C1.s3278c1f1");
    check_field_offset(lv, s3278c1f2, ABISELECT(368,260), "S3278C1.s3278c1f2");
    check_field_offset(lv, s3278c1f3, ABISELECT(376,264), "S3278C1.s3278c1f3");
    check_field_offset(lv, s3278c1f4, ABISELECT(384,268), "S3278C1.s3278c1f4");
    check_field_offset(lv, s3278c1f5, ABISELECT(388,272), "S3278C1.s3278c1f5");
    test_class_info(&lv, &cd_S3278C1);
    dp->~S3278C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3278C1(Test_S3278C1, "S3278C1", ABISELECT(392,276));

#else // __cplusplus

extern void _ZN7S3278C1C1Ev();
extern void _ZN7S3278C1D1Ev();
Name_Map name_map_S3278C1[] = {
  NSPAIR(_ZN7S3278C1C1Ev),
  NSPAIR(_ZN7S3278C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3278C3;
extern VTBL_ENTRY _ZTI7S3278C3[];
extern  VTBL_ENTRY _ZTV7S3278C3[];
extern Class_Descriptor cd_S3278C2;
extern VTBL_ENTRY _ZTI7S3278C2[];
extern  VTBL_ENTRY _ZTV7S3278C2[];
static Base_Class bases_S3278C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3278C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3278C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S3278C1[];
extern void _ZN7S3278C1D1Ev();
extern void _ZN7S3278C1D0Ev();
extern void _ZN7S3278C32v5Ev();
extern void _ZN7S3278C32v6Ev();
extern void _ZN7S3278C32v7Ev();
extern void _ZN7S3278C32v8Ev();
extern void _ZN7S3278C32v9Ev();
extern void _ZN7S3278C33v10Ev();
extern void _ZN7S3278C33v11Ev();
extern void _ZN7S3278C33v12Ev();
extern void _ZN7S3278C33v13Ev();
extern void _ZN7S3278C33v14Ev();
extern void _ZN7S3278C33v15Ev();
extern void _ZN7S3278C33v16Ev();
extern void _ZN7S3278C33v17Ev();
extern void _ZN7S3278C33v18Ev();
extern void _ZN7S3278C33v19Ev();
extern void _ZN7S3278C23v20Ev();
extern void _ZN7S3278C23v21Ev();
extern void _ZN7S3278C23v22Ev();
extern void _ZN7S3278C23v23Ev();
extern void _ZN7S3278C23v24Ev();
extern void _ZN7S3278C23v25Ev();
extern void _ZN7S3278C23v26Ev();
extern void _ZN7S3278C23v27Ev();
extern void _ZN7S3278C23v28Ev();
extern void _ZN7S3278C23v29Ev();
extern void _ZN7S3278C23v30Ev();
extern void _ZN7S3278C23v31Ev();
extern void _ZN7S3278C23v32Ev();
extern void _ZN7S3278C23v33Ev();
extern void _ZN7S3278C23v34Ev();
extern void _ZN7S3278C12v1Ev();
extern void _ZN7S3278C12v2Ev();
extern void _ZN7S3278C12v3Ev();
extern void _ZN7S3278C12v4Ev();
static  VTBL_ENTRY vtc_S3278C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3278C1[0]),
  (VTBL_ENTRY)&_ZN7S3278C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3278C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3278C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3278C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3278C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3278C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3278C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3278C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3278C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3278C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3278C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3278C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3278C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3278C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3278C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3278C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3278C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3278C23v20Ev,
  (VTBL_ENTRY)&_ZN7S3278C23v21Ev,
  (VTBL_ENTRY)&_ZN7S3278C23v22Ev,
  (VTBL_ENTRY)&_ZN7S3278C23v23Ev,
  (VTBL_ENTRY)&_ZN7S3278C23v24Ev,
  (VTBL_ENTRY)&_ZN7S3278C23v25Ev,
  (VTBL_ENTRY)&_ZN7S3278C23v26Ev,
  (VTBL_ENTRY)&_ZN7S3278C23v27Ev,
  (VTBL_ENTRY)&_ZN7S3278C23v28Ev,
  (VTBL_ENTRY)&_ZN7S3278C23v29Ev,
  (VTBL_ENTRY)&_ZN7S3278C23v30Ev,
  (VTBL_ENTRY)&_ZN7S3278C23v31Ev,
  (VTBL_ENTRY)&_ZN7S3278C23v32Ev,
  (VTBL_ENTRY)&_ZN7S3278C23v33Ev,
  (VTBL_ENTRY)&_ZN7S3278C23v34Ev,
  (VTBL_ENTRY)&_ZN7S3278C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3278C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3278C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3278C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S3278C1[];
extern  VTBL_ENTRY _ZTV7S3278C1[];
Class_Descriptor cd_S3278C1 = {  "S3278C1", // class name
  bases_S3278C1, 2,
  &(vtc_S3278C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(392,276), // object size
  NSPAIRA(_ZTI7S3278C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3278C1),38, //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  S3206C3  {
  ::S2120C13_nt s3206c3f0;
  ::S2120C13_nt s3206c3f1;
  void *s3206c3f2;
  int s3206c3f3;
  ::S601C8 s3206c3f4;
  int s3206c3f5:2;
  int s3206c3f6:2;
  unsigned char s3206c3f7:1;
  unsigned char s3206c3f8:1;
  ::S601C53 s3206c3f9;
  ::S601C11 s3206c3f10[2];
  virtual  ~S3206C3(); // _ZN7S3206C3D1Ev
  virtual void  v4(); // _ZN7S3206C32v4Ev
  virtual void  v5(); // _ZN7S3206C32v5Ev
  virtual void  v6(); // _ZN7S3206C32v6Ev
  virtual void  v7(); // _ZN7S3206C32v7Ev
  virtual void  v8(); // _ZN7S3206C32v8Ev
  virtual void  v9(); // _ZN7S3206C32v9Ev
  virtual void  v10(); // _ZN7S3206C33v10Ev
  virtual void  v11(); // _ZN7S3206C33v11Ev
  virtual void  v12(); // _ZN7S3206C33v12Ev
  virtual void  v13(); // _ZN7S3206C33v13Ev
  virtual void  v14(); // _ZN7S3206C33v14Ev
  virtual void  v15(); // _ZN7S3206C33v15Ev
  virtual void  v16(); // _ZN7S3206C33v16Ev
  virtual void  v17(); // _ZN7S3206C33v17Ev
  virtual void  v18(); // _ZN7S3206C33v18Ev
  S3206C3(); // tgen
};
//SIG(-1 S3206C3) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 FC2{ m FC3{ m FL[2]}} FC2 Fp Fi FU4{ m FC5{ Fi:4 Fi:4 Fi:4 Fi:2 Fi:1 Fi:17} Fi} Fi:2 Fi:2 Fc:1 Fc:1 FC6{ m Fp Fp} FC7{ Fp Fp}[2]}


 S3206C3 ::~S3206C3(){ note_dtor("S3206C3", this);}
void  S3206C3 ::v4(){vfunc_called(this, "_ZN7S3206C32v4Ev");}
void  S3206C3 ::v5(){vfunc_called(this, "_ZN7S3206C32v5Ev");}
void  S3206C3 ::v6(){vfunc_called(this, "_ZN7S3206C32v6Ev");}
void  S3206C3 ::v7(){vfunc_called(this, "_ZN7S3206C32v7Ev");}
void  S3206C3 ::v8(){vfunc_called(this, "_ZN7S3206C32v8Ev");}
void  S3206C3 ::v9(){vfunc_called(this, "_ZN7S3206C32v9Ev");}
void  S3206C3 ::v10(){vfunc_called(this, "_ZN7S3206C33v10Ev");}
void  S3206C3 ::v11(){vfunc_called(this, "_ZN7S3206C33v11Ev");}
void  S3206C3 ::v12(){vfunc_called(this, "_ZN7S3206C33v12Ev");}
void  S3206C3 ::v13(){vfunc_called(this, "_ZN7S3206C33v13Ev");}
void  S3206C3 ::v14(){vfunc_called(this, "_ZN7S3206C33v14Ev");}
void  S3206C3 ::v15(){vfunc_called(this, "_ZN7S3206C33v15Ev");}
void  S3206C3 ::v16(){vfunc_called(this, "_ZN7S3206C33v16Ev");}
void  S3206C3 ::v17(){vfunc_called(this, "_ZN7S3206C33v17Ev");}
void  S3206C3 ::v18(){vfunc_called(this, "_ZN7S3206C33v18Ev");}
S3206C3 ::S3206C3(){ note_ctor("S3206C3", this);} // tgen

static void Test_S3206C3()
{
  extern Class_Descriptor cd_S3206C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,20)];
    init_test(&cd_S3206C3, buf);
    S3206C3 *dp, &lv = *(dp=new (buf) S3206C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,76), "sizeof(S3206C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3206C3)");
    check_field_offset(lv, s3206c3f0, ABISELECT(8,4), "S3206C3.s3206c3f0");
    check_field_offset(lv, s3206c3f1, ABISELECT(24,20), "S3206C3.s3206c3f1");
    check_field_offset(lv, s3206c3f2, ABISELECT(40,36), "S3206C3.s3206c3f2");
    check_field_offset(lv, s3206c3f3, ABISELECT(48,40), "S3206C3.s3206c3f3");
    check_field_offset(lv, s3206c3f4, ABISELECT(52,44), "S3206C3.s3206c3f4");
    set_bf_and_test(lv, s3206c3f5, ABISELECT(56,48), 0, 2, 1, "S3206C3");
    set_bf_and_test(lv, s3206c3f5, ABISELECT(56,48), 0, 2, hide_sll(1LL<<1), "S3206C3");
    set_bf_and_test(lv, s3206c3f6, ABISELECT(56,48), 2, 2, 1, "S3206C3");
    set_bf_and_test(lv, s3206c3f6, ABISELECT(56,48), 2, 2, hide_sll(1LL<<1), "S3206C3");
    set_bf_and_test(lv, s3206c3f7, ABISELECT(56,48), 4, 1, 1, "S3206C3");
    set_bf_and_test(lv, s3206c3f8, ABISELECT(56,48), 5, 1, 1, "S3206C3");
    check_field_offset(lv, s3206c3f9, ABISELECT(64,52), "S3206C3.s3206c3f9");
    check_field_offset(lv, s3206c3f10, ABISELECT(80,60), "S3206C3.s3206c3f10");
    test_class_info(&lv, &cd_S3206C3);
    dp->~S3206C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3206C3(Test_S3206C3, "S3206C3", ABISELECT(112,76));

#else // __cplusplus

extern void _ZN7S3206C3C1Ev();
extern void _ZN7S3206C3D1Ev();
Name_Map name_map_S3206C3[] = {
  NSPAIR(_ZN7S3206C3C1Ev),
  NSPAIR(_ZN7S3206C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3206C3[];
extern void _ZN7S3206C3D1Ev();
extern void _ZN7S3206C3D0Ev();
extern void _ZN7S3206C32v4Ev();
extern void _ZN7S3206C32v5Ev();
extern void _ZN7S3206C32v6Ev();
extern void _ZN7S3206C32v7Ev();
extern void _ZN7S3206C32v8Ev();
extern void _ZN7S3206C32v9Ev();
extern void _ZN7S3206C33v10Ev();
extern void _ZN7S3206C33v11Ev();
extern void _ZN7S3206C33v12Ev();
extern void _ZN7S3206C33v13Ev();
extern void _ZN7S3206C33v14Ev();
extern void _ZN7S3206C33v15Ev();
extern void _ZN7S3206C33v16Ev();
extern void _ZN7S3206C33v17Ev();
extern void _ZN7S3206C33v18Ev();
static  VTBL_ENTRY vtc_S3206C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3206C3[0]),
  (VTBL_ENTRY)&_ZN7S3206C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3206C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3206C32v4Ev,
  (VTBL_ENTRY)&_ZN7S3206C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3206C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3206C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3206C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3206C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3206C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3206C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3206C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3206C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3206C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3206C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3206C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3206C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3206C33v18Ev,
};
extern VTBL_ENTRY _ZTI7S3206C3[];
extern  VTBL_ENTRY _ZTV7S3206C3[];
Class_Descriptor cd_S3206C3 = {  "S3206C3", // class name
  0,0,//no base classes
  &(vtc_S3206C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,76), // object size
  NSPAIRA(_ZTI7S3206C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3206C3),19, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3206C2  : S3206C3 {
  unsigned char s3206c2f0:1;
  unsigned char s3206c2f1:1;
  unsigned char s3206c2f2:1;
  unsigned char s3206c2f3:1;
  unsigned char s3206c2f4:1;
  unsigned char s3206c2f5:1;
  unsigned char s3206c2f6:1;
  char s3206c2f7;
  int s3206c2f8[2];
  int s3206c2f9[2];
  void *s3206c2f10;
  ::S2120C13_nt s3206c2f11;
  ::S2120C13_nt s3206c2f12;
  ::S2120C13_nt s3206c2f13;
  ::S601C12 s3206c2f14;
  void *s3206c2f15;
  int s3206c2f16;
  int s3206c2f17;
  ::S601C13_nt s3206c2f18[4];
  void *s3206c2f19;
  virtual  ~S3206C2(); // _ZN7S3206C2D1Ev
  virtual void  v19(); // _ZN7S3206C23v19Ev
  virtual void  v20(); // _ZN7S3206C23v20Ev
  virtual void  v21(); // _ZN7S3206C23v21Ev
  virtual void  v22(); // _ZN7S3206C23v22Ev
  virtual void  v23(); // _ZN7S3206C23v23Ev
  virtual void  v24(); // _ZN7S3206C23v24Ev
  virtual void  v25(); // _ZN7S3206C23v25Ev
  virtual void  v26(); // _ZN7S3206C23v26Ev
  virtual void  v27(); // _ZN7S3206C23v27Ev
  virtual void  v28(); // _ZN7S3206C23v28Ev
  virtual void  v29(); // _ZN7S3206C23v29Ev
  virtual void  v30(); // _ZN7S3206C23v30Ev
  virtual void  v31(); // _ZN7S3206C23v31Ev
  virtual void  v32(); // _ZN7S3206C23v32Ev
  virtual void  v33(); // _ZN7S3206C23v33Ev
  S3206C2(); // tgen
};
//SIG(-1 S3206C2) C1{ BC2{ vd v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 FC3{ m FC4{ m FL[2]}} FC3 Fp Fi FU5{ m FC6{ Fi:4 Fi:4 Fi:4 Fi:2 Fi:1 Fi:17} Fi} Fi:2 Fi:2 Fc:1 Fc:1 FC7{ m Fp Fp} FC8{ Fp Fp}[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc Fi[2] Fi[2] Fp FC3 FC3 FC3 FC9{ m FC3 FC3} Fp Fi Fi FC10{ m Fp}[4] Fp}


 S3206C2 ::~S3206C2(){ note_dtor("S3206C2", this);}
void  S3206C2 ::v19(){vfunc_called(this, "_ZN7S3206C23v19Ev");}
void  S3206C2 ::v20(){vfunc_called(this, "_ZN7S3206C23v20Ev");}
void  S3206C2 ::v21(){vfunc_called(this, "_ZN7S3206C23v21Ev");}
void  S3206C2 ::v22(){vfunc_called(this, "_ZN7S3206C23v22Ev");}
void  S3206C2 ::v23(){vfunc_called(this, "_ZN7S3206C23v23Ev");}
void  S3206C2 ::v24(){vfunc_called(this, "_ZN7S3206C23v24Ev");}
void  S3206C2 ::v25(){vfunc_called(this, "_ZN7S3206C23v25Ev");}
void  S3206C2 ::v26(){vfunc_called(this, "_ZN7S3206C23v26Ev");}
void  S3206C2 ::v27(){vfunc_called(this, "_ZN7S3206C23v27Ev");}
void  S3206C2 ::v28(){vfunc_called(this, "_ZN7S3206C23v28Ev");}
void  S3206C2 ::v29(){vfunc_called(this, "_ZN7S3206C23v29Ev");}
void  S3206C2 ::v30(){vfunc_called(this, "_ZN7S3206C23v30Ev");}
void  S3206C2 ::v31(){vfunc_called(this, "_ZN7S3206C23v31Ev");}
void  S3206C2 ::v32(){vfunc_called(this, "_ZN7S3206C23v32Ev");}
void  S3206C2 ::v33(){vfunc_called(this, "_ZN7S3206C23v33Ev");}
S3206C2 ::S3206C2(){ note_ctor("S3206C2", this);} // tgen

static void Test_S3206C2()
{
  extern Class_Descriptor cd_S3206C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(36,54)];
    init_test(&cd_S3206C2, buf);
    S3206C2 *dp, &lv = *(dp=new (buf) S3206C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(280,212), "sizeof(S3206C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3206C2)");
    check_base_class_offset(lv, (S3206C3*), 0, "S3206C2");
    set_bf_and_test(lv, s3206c2f0, ABISELECT(112,76), 0, 1, 1, "S3206C2");
    set_bf_and_test(lv, s3206c2f1, ABISELECT(112,76), 1, 1, 1, "S3206C2");
    set_bf_and_test(lv, s3206c2f2, ABISELECT(112,76), 2, 1, 1, "S3206C2");
    set_bf_and_test(lv, s3206c2f3, ABISELECT(112,76), 3, 1, 1, "S3206C2");
    set_bf_and_test(lv, s3206c2f4, ABISELECT(112,76), 4, 1, 1, "S3206C2");
    set_bf_and_test(lv, s3206c2f5, ABISELECT(112,76), 5, 1, 1, "S3206C2");
    set_bf_and_test(lv, s3206c2f6, ABISELECT(112,76), 6, 1, 1, "S3206C2");
    check_field_offset(lv, s3206c2f7, ABISELECT(113,77), "S3206C2.s3206c2f7");
    check_field_offset(lv, s3206c2f8, ABISELECT(116,80), "S3206C2.s3206c2f8");
    check_field_offset(lv, s3206c2f9, ABISELECT(124,88), "S3206C2.s3206c2f9");
    check_field_offset(lv, s3206c2f10, ABISELECT(136,96), "S3206C2.s3206c2f10");
    check_field_offset(lv, s3206c2f11, ABISELECT(144,100), "S3206C2.s3206c2f11");
    check_field_offset(lv, s3206c2f12, ABISELECT(160,116), "S3206C2.s3206c2f12");
    check_field_offset(lv, s3206c2f13, ABISELECT(176,132), "S3206C2.s3206c2f13");
    check_field_offset(lv, s3206c2f14, ABISELECT(192,148), "S3206C2.s3206c2f14");
    check_field_offset(lv, s3206c2f15, ABISELECT(224,180), "S3206C2.s3206c2f15");
    check_field_offset(lv, s3206c2f16, ABISELECT(232,184), "S3206C2.s3206c2f16");
    check_field_offset(lv, s3206c2f17, ABISELECT(236,188), "S3206C2.s3206c2f17");
    check_field_offset(lv, s3206c2f18, ABISELECT(240,192), "S3206C2.s3206c2f18");
    check_field_offset(lv, s3206c2f19, ABISELECT(272,208), "S3206C2.s3206c2f19");
    test_class_info(&lv, &cd_S3206C2);
    dp->~S3206C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3206C2(Test_S3206C2, "S3206C2", ABISELECT(280,212));

#else // __cplusplus

extern void _ZN7S3206C2C1Ev();
extern void _ZN7S3206C2D1Ev();
Name_Map name_map_S3206C2[] = {
  NSPAIR(_ZN7S3206C2C1Ev),
  NSPAIR(_ZN7S3206C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3206C3;
extern VTBL_ENTRY _ZTI7S3206C3[];
extern  VTBL_ENTRY _ZTV7S3206C3[];
static Base_Class bases_S3206C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3206C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3206C2[];
extern void _ZN7S3206C2D1Ev();
extern void _ZN7S3206C2D0Ev();
extern void _ZN7S3206C32v4Ev();
extern void _ZN7S3206C32v5Ev();
extern void _ZN7S3206C32v6Ev();
extern void _ZN7S3206C32v7Ev();
extern void _ZN7S3206C32v8Ev();
extern void _ZN7S3206C32v9Ev();
extern void _ZN7S3206C33v10Ev();
extern void _ZN7S3206C33v11Ev();
extern void _ZN7S3206C33v12Ev();
extern void _ZN7S3206C33v13Ev();
extern void _ZN7S3206C33v14Ev();
extern void _ZN7S3206C33v15Ev();
extern void _ZN7S3206C33v16Ev();
extern void _ZN7S3206C33v17Ev();
extern void _ZN7S3206C33v18Ev();
extern void _ZN7S3206C23v19Ev();
extern void _ZN7S3206C23v20Ev();
extern void _ZN7S3206C23v21Ev();
extern void _ZN7S3206C23v22Ev();
extern void _ZN7S3206C23v23Ev();
extern void _ZN7S3206C23v24Ev();
extern void _ZN7S3206C23v25Ev();
extern void _ZN7S3206C23v26Ev();
extern void _ZN7S3206C23v27Ev();
extern void _ZN7S3206C23v28Ev();
extern void _ZN7S3206C23v29Ev();
extern void _ZN7S3206C23v30Ev();
extern void _ZN7S3206C23v31Ev();
extern void _ZN7S3206C23v32Ev();
extern void _ZN7S3206C23v33Ev();
static  VTBL_ENTRY vtc_S3206C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3206C2[0]),
  (VTBL_ENTRY)&_ZN7S3206C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3206C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3206C32v4Ev,
  (VTBL_ENTRY)&_ZN7S3206C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3206C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3206C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3206C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3206C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3206C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3206C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3206C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3206C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3206C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3206C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3206C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3206C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3206C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3206C23v19Ev,
  (VTBL_ENTRY)&_ZN7S3206C23v20Ev,
  (VTBL_ENTRY)&_ZN7S3206C23v21Ev,
  (VTBL_ENTRY)&_ZN7S3206C23v22Ev,
  (VTBL_ENTRY)&_ZN7S3206C23v23Ev,
  (VTBL_ENTRY)&_ZN7S3206C23v24Ev,
  (VTBL_ENTRY)&_ZN7S3206C23v25Ev,
  (VTBL_ENTRY)&_ZN7S3206C23v26Ev,
  (VTBL_ENTRY)&_ZN7S3206C23v27Ev,
  (VTBL_ENTRY)&_ZN7S3206C23v28Ev,
  (VTBL_ENTRY)&_ZN7S3206C23v29Ev,
  (VTBL_ENTRY)&_ZN7S3206C23v30Ev,
  (VTBL_ENTRY)&_ZN7S3206C23v31Ev,
  (VTBL_ENTRY)&_ZN7S3206C23v32Ev,
  (VTBL_ENTRY)&_ZN7S3206C23v33Ev,
};
extern VTBL_ENTRY _ZTI7S3206C2[];
extern  VTBL_ENTRY _ZTV7S3206C2[];
Class_Descriptor cd_S3206C2 = {  "S3206C2", // class name
  bases_S3206C2, 1,
  &(vtc_S3206C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(280,212), // object size
  NSPAIRA(_ZTI7S3206C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3206C2),34, //virtual function table var
  2, // 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  S3206C1  : S3206C2 {
  void *s3206c1f0;
  void *s3206c1f1;
  ::S601C13_nt s3206c1f2;
  ::S601C13_nt s3206c1f3;
  int s3206c1f4;
  int s3206c1f5;
  ::S601C25_nt s3206c1f6;
  int s3206c1f7;
  int s3206c1f8;
  char s3206c1f9;
  int s3206c1f10;
  virtual  ~S3206C1(); // _ZN7S3206C1D1Ev
  virtual void  v1(); // _ZN7S3206C12v1Ev
  virtual void  v2(); // _ZN7S3206C12v2Ev
  virtual void  v3(); // _ZN7S3206C12v3Ev
  S3206C1(); // tgen
};
//SIG(1 S3206C1) C1{ BC2{ BC3{ vd v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 FC4{ m FC5{ m FL[2]}} FC4 Fp Fi FU6{ m FC7{ Fi:4 Fi:4 Fi:4 Fi:2 Fi:1 Fi:17} Fi} Fi:2 Fi:2 Fc:1 Fc:1 FC8{ m Fp Fp} FC9{ Fp Fp}[2]} vd v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc Fi[2] Fi[2] Fp FC4 FC4 FC4 FC10{ m FC4 FC4} Fp Fi Fi FC11{ m Fp}[4] Fp} vd v1 v2 v3 Fp Fp FC11 FC11 Fi Fi FC12{ m FC5} Fi Fi Fc Fi}


 S3206C1 ::~S3206C1(){ note_dtor("S3206C1", this);}
void  S3206C1 ::v1(){vfunc_called(this, "_ZN7S3206C12v1Ev");}
void  S3206C1 ::v2(){vfunc_called(this, "_ZN7S3206C12v2Ev");}
void  S3206C1 ::v3(){vfunc_called(this, "_ZN7S3206C12v3Ev");}
S3206C1 ::S3206C1(){ note_ctor("S3206C1", this);} // tgen

static void Test_S3206C1()
{
  extern Class_Descriptor cd_S3206C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(45,68)];
    init_test(&cd_S3206C1, buf);
    S3206C1 *dp, &lv = *(dp=new (buf) S3206C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(352,268), "sizeof(S3206C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3206C1)");
    check_base_class_offset(lv, (S3206C3*)(S3206C2*), 0, "S3206C1");
    check_base_class_offset(lv, (S3206C2*), 0, "S3206C1");
    check_field_offset(lv, s3206c1f0, ABISELECT(280,212), "S3206C1.s3206c1f0");
    check_field_offset(lv, s3206c1f1, ABISELECT(288,216), "S3206C1.s3206c1f1");
    check_field_offset(lv, s3206c1f2, ABISELECT(296,220), "S3206C1.s3206c1f2");
    check_field_offset(lv, s3206c1f3, ABISELECT(304,224), "S3206C1.s3206c1f3");
    check_field_offset(lv, s3206c1f4, ABISELECT(312,228), "S3206C1.s3206c1f4");
    check_field_offset(lv, s3206c1f5, ABISELECT(316,232), "S3206C1.s3206c1f5");
    check_field_offset(lv, s3206c1f6, ABISELECT(320,236), "S3206C1.s3206c1f6");
    check_field_offset(lv, s3206c1f7, ABISELECT(336,252), "S3206C1.s3206c1f7");
    check_field_offset(lv, s3206c1f8, ABISELECT(340,256), "S3206C1.s3206c1f8");
    check_field_offset(lv, s3206c1f9, ABISELECT(344,260), "S3206C1.s3206c1f9");
    check_field_offset(lv, s3206c1f10, ABISELECT(348,264), "S3206C1.s3206c1f10");
    test_class_info(&lv, &cd_S3206C1);
    dp->~S3206C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3206C1(Test_S3206C1, "S3206C1", ABISELECT(352,268));

#else // __cplusplus

extern void _ZN7S3206C1C1Ev();
extern void _ZN7S3206C1D1Ev();
Name_Map name_map_S3206C1[] = {
  NSPAIR(_ZN7S3206C1C1Ev),
  NSPAIR(_ZN7S3206C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3206C3;
extern VTBL_ENTRY _ZTI7S3206C3[];
extern  VTBL_ENTRY _ZTV7S3206C3[];
extern Class_Descriptor cd_S3206C2;
extern VTBL_ENTRY _ZTI7S3206C2[];
extern  VTBL_ENTRY _ZTV7S3206C2[];
static Base_Class bases_S3206C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3206C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3206C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S3206C1[];
extern void _ZN7S3206C1D1Ev();
extern void _ZN7S3206C1D0Ev();
extern void _ZN7S3206C32v4Ev();
extern void _ZN7S3206C32v5Ev();
extern void _ZN7S3206C32v6Ev();
extern void _ZN7S3206C32v7Ev();
extern void _ZN7S3206C32v8Ev();
extern void _ZN7S3206C32v9Ev();
extern void _ZN7S3206C33v10Ev();
extern void _ZN7S3206C33v11Ev();
extern void _ZN7S3206C33v12Ev();
extern void _ZN7S3206C33v13Ev();
extern void _ZN7S3206C33v14Ev();
extern void _ZN7S3206C33v15Ev();
extern void _ZN7S3206C33v16Ev();
extern void _ZN7S3206C33v17Ev();
extern void _ZN7S3206C33v18Ev();
extern void _ZN7S3206C23v19Ev();
extern void _ZN7S3206C23v20Ev();
extern void _ZN7S3206C23v21Ev();
extern void _ZN7S3206C23v22Ev();
extern void _ZN7S3206C23v23Ev();
extern void _ZN7S3206C23v24Ev();
extern void _ZN7S3206C23v25Ev();
extern void _ZN7S3206C23v26Ev();
extern void _ZN7S3206C23v27Ev();
extern void _ZN7S3206C23v28Ev();
extern void _ZN7S3206C23v29Ev();
extern void _ZN7S3206C23v30Ev();
extern void _ZN7S3206C23v31Ev();
extern void _ZN7S3206C23v32Ev();
extern void _ZN7S3206C23v33Ev();
extern void _ZN7S3206C12v1Ev();
extern void _ZN7S3206C12v2Ev();
extern void _ZN7S3206C12v3Ev();
static  VTBL_ENTRY vtc_S3206C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3206C1[0]),
  (VTBL_ENTRY)&_ZN7S3206C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3206C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3206C32v4Ev,
  (VTBL_ENTRY)&_ZN7S3206C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3206C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3206C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3206C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3206C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3206C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3206C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3206C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3206C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3206C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3206C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3206C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3206C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3206C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3206C23v19Ev,
  (VTBL_ENTRY)&_ZN7S3206C23v20Ev,
  (VTBL_ENTRY)&_ZN7S3206C23v21Ev,
  (VTBL_ENTRY)&_ZN7S3206C23v22Ev,
  (VTBL_ENTRY)&_ZN7S3206C23v23Ev,
  (VTBL_ENTRY)&_ZN7S3206C23v24Ev,
  (VTBL_ENTRY)&_ZN7S3206C23v25Ev,
  (VTBL_ENTRY)&_ZN7S3206C23v26Ev,
  (VTBL_ENTRY)&_ZN7S3206C23v27Ev,
  (VTBL_ENTRY)&_ZN7S3206C23v28Ev,
  (VTBL_ENTRY)&_ZN7S3206C23v29Ev,
  (VTBL_ENTRY)&_ZN7S3206C23v30Ev,
  (VTBL_ENTRY)&_ZN7S3206C23v31Ev,
  (VTBL_ENTRY)&_ZN7S3206C23v32Ev,
  (VTBL_ENTRY)&_ZN7S3206C23v33Ev,
  (VTBL_ENTRY)&_ZN7S3206C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3206C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3206C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S3206C1[];
extern  VTBL_ENTRY _ZTV7S3206C1[];
Class_Descriptor cd_S3206C1 = {  "S3206C1", // class name
  bases_S3206C1, 2,
  &(vtc_S3206C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(352,268), // object size
  NSPAIRA(_ZTI7S3206C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3206C1),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3207C3  {
  ::S2120C13_nt s3207c3f0;
  ::S2120C13_nt s3207c3f1;
  void *s3207c3f2;
  int s3207c3f3;
  ::S601C8 s3207c3f4;
  int s3207c3f5:2;
  int s3207c3f6:2;
  unsigned char s3207c3f7:1;
  unsigned char s3207c3f8:1;
  ::S601C53 s3207c3f9;
  ::S601C11 s3207c3f10[2];
  virtual  ~S3207C3(); // _ZN7S3207C3D1Ev
  virtual void  v4(); // _ZN7S3207C32v4Ev
  virtual void  v5(); // _ZN7S3207C32v5Ev
  virtual void  v6(); // _ZN7S3207C32v6Ev
  virtual void  v7(); // _ZN7S3207C32v7Ev
  virtual void  v8(); // _ZN7S3207C32v8Ev
  virtual void  v9(); // _ZN7S3207C32v9Ev
  virtual void  v10(); // _ZN7S3207C33v10Ev
  virtual void  v11(); // _ZN7S3207C33v11Ev
  virtual void  v12(); // _ZN7S3207C33v12Ev
  virtual void  v13(); // _ZN7S3207C33v13Ev
  virtual void  v14(); // _ZN7S3207C33v14Ev
  virtual void  v15(); // _ZN7S3207C33v15Ev
  virtual void  v16(); // _ZN7S3207C33v16Ev
  virtual void  v17(); // _ZN7S3207C33v17Ev
  virtual void  v18(); // _ZN7S3207C33v18Ev
  S3207C3(); // tgen
};
//SIG(-1 S3207C3) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 FC2{ m FC3{ m FL[2]}} FC2 Fp Fi FU4{ m FC5{ Fi:4 Fi:4 Fi:4 Fi:2 Fi:1 Fi:17} Fi} Fi:2 Fi:2 Fc:1 Fc:1 FC6{ m Fp Fp} FC7{ Fp Fp}[2]}


 S3207C3 ::~S3207C3(){ note_dtor("S3207C3", this);}
void  S3207C3 ::v4(){vfunc_called(this, "_ZN7S3207C32v4Ev");}
void  S3207C3 ::v5(){vfunc_called(this, "_ZN7S3207C32v5Ev");}
void  S3207C3 ::v6(){vfunc_called(this, "_ZN7S3207C32v6Ev");}
void  S3207C3 ::v7(){vfunc_called(this, "_ZN7S3207C32v7Ev");}
void  S3207C3 ::v8(){vfunc_called(this, "_ZN7S3207C32v8Ev");}
void  S3207C3 ::v9(){vfunc_called(this, "_ZN7S3207C32v9Ev");}
void  S3207C3 ::v10(){vfunc_called(this, "_ZN7S3207C33v10Ev");}
void  S3207C3 ::v11(){vfunc_called(this, "_ZN7S3207C33v11Ev");}
void  S3207C3 ::v12(){vfunc_called(this, "_ZN7S3207C33v12Ev");}
void  S3207C3 ::v13(){vfunc_called(this, "_ZN7S3207C33v13Ev");}
void  S3207C3 ::v14(){vfunc_called(this, "_ZN7S3207C33v14Ev");}
void  S3207C3 ::v15(){vfunc_called(this, "_ZN7S3207C33v15Ev");}
void  S3207C3 ::v16(){vfunc_called(this, "_ZN7S3207C33v16Ev");}
void  S3207C3 ::v17(){vfunc_called(this, "_ZN7S3207C33v17Ev");}
void  S3207C3 ::v18(){vfunc_called(this, "_ZN7S3207C33v18Ev");}
S3207C3 ::S3207C3(){ note_ctor("S3207C3", this);} // tgen

static void Test_S3207C3()
{
  extern Class_Descriptor cd_S3207C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,20)];
    init_test(&cd_S3207C3, buf);
    S3207C3 *dp, &lv = *(dp=new (buf) S3207C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,76), "sizeof(S3207C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3207C3)");
    check_field_offset(lv, s3207c3f0, ABISELECT(8,4), "S3207C3.s3207c3f0");
    check_field_offset(lv, s3207c3f1, ABISELECT(24,20), "S3207C3.s3207c3f1");
    check_field_offset(lv, s3207c3f2, ABISELECT(40,36), "S3207C3.s3207c3f2");
    check_field_offset(lv, s3207c3f3, ABISELECT(48,40), "S3207C3.s3207c3f3");
    check_field_offset(lv, s3207c3f4, ABISELECT(52,44), "S3207C3.s3207c3f4");
    set_bf_and_test(lv, s3207c3f5, ABISELECT(56,48), 0, 2, 1, "S3207C3");
    set_bf_and_test(lv, s3207c3f5, ABISELECT(56,48), 0, 2, hide_sll(1LL<<1), "S3207C3");
    set_bf_and_test(lv, s3207c3f6, ABISELECT(56,48), 2, 2, 1, "S3207C3");
    set_bf_and_test(lv, s3207c3f6, ABISELECT(56,48), 2, 2, hide_sll(1LL<<1), "S3207C3");
    set_bf_and_test(lv, s3207c3f7, ABISELECT(56,48), 4, 1, 1, "S3207C3");
    set_bf_and_test(lv, s3207c3f8, ABISELECT(56,48), 5, 1, 1, "S3207C3");
    check_field_offset(lv, s3207c3f9, ABISELECT(64,52), "S3207C3.s3207c3f9");
    check_field_offset(lv, s3207c3f10, ABISELECT(80,60), "S3207C3.s3207c3f10");
    test_class_info(&lv, &cd_S3207C3);
    dp->~S3207C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3207C3(Test_S3207C3, "S3207C3", ABISELECT(112,76));

#else // __cplusplus

extern void _ZN7S3207C3C1Ev();
extern void _ZN7S3207C3D1Ev();
Name_Map name_map_S3207C3[] = {
  NSPAIR(_ZN7S3207C3C1Ev),
  NSPAIR(_ZN7S3207C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3207C3[];
extern void _ZN7S3207C3D1Ev();
extern void _ZN7S3207C3D0Ev();
extern void _ZN7S3207C32v4Ev();
extern void _ZN7S3207C32v5Ev();
extern void _ZN7S3207C32v6Ev();
extern void _ZN7S3207C32v7Ev();
extern void _ZN7S3207C32v8Ev();
extern void _ZN7S3207C32v9Ev();
extern void _ZN7S3207C33v10Ev();
extern void _ZN7S3207C33v11Ev();
extern void _ZN7S3207C33v12Ev();
extern void _ZN7S3207C33v13Ev();
extern void _ZN7S3207C33v14Ev();
extern void _ZN7S3207C33v15Ev();
extern void _ZN7S3207C33v16Ev();
extern void _ZN7S3207C33v17Ev();
extern void _ZN7S3207C33v18Ev();
static  VTBL_ENTRY vtc_S3207C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3207C3[0]),
  (VTBL_ENTRY)&_ZN7S3207C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3207C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3207C32v4Ev,
  (VTBL_ENTRY)&_ZN7S3207C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3207C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3207C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3207C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3207C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3207C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3207C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3207C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3207C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3207C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3207C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3207C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3207C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3207C33v18Ev,
};
extern VTBL_ENTRY _ZTI7S3207C3[];
extern  VTBL_ENTRY _ZTV7S3207C3[];
Class_Descriptor cd_S3207C3 = {  "S3207C3", // class name
  0,0,//no base classes
  &(vtc_S3207C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,76), // object size
  NSPAIRA(_ZTI7S3207C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3207C3),19, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3207C2  : S3207C3 {
  unsigned char s3207c2f0:1;
  unsigned char s3207c2f1:1;
  unsigned char s3207c2f2:1;
  unsigned char s3207c2f3:1;
  unsigned char s3207c2f4:1;
  unsigned char s3207c2f5:1;
  unsigned char s3207c2f6:1;
  char s3207c2f7;
  int s3207c2f8[2];
  int s3207c2f9[2];
  void *s3207c2f10;
  ::S2120C13_nt s3207c2f11;
  ::S2120C13_nt s3207c2f12;
  ::S2120C13_nt s3207c2f13;
  ::S601C12 s3207c2f14;
  void *s3207c2f15;
  int s3207c2f16;
  int s3207c2f17;
  ::S601C13_nt s3207c2f18[4];
  void *s3207c2f19;
  virtual  ~S3207C2(); // _ZN7S3207C2D1Ev
  virtual void  v19(); // _ZN7S3207C23v19Ev
  virtual void  v20(); // _ZN7S3207C23v20Ev
  virtual void  v21(); // _ZN7S3207C23v21Ev
  virtual void  v22(); // _ZN7S3207C23v22Ev
  virtual void  v23(); // _ZN7S3207C23v23Ev
  virtual void  v24(); // _ZN7S3207C23v24Ev
  virtual void  v25(); // _ZN7S3207C23v25Ev
  virtual void  v26(); // _ZN7S3207C23v26Ev
  virtual void  v27(); // _ZN7S3207C23v27Ev
  virtual void  v28(); // _ZN7S3207C23v28Ev
  virtual void  v29(); // _ZN7S3207C23v29Ev
  virtual void  v30(); // _ZN7S3207C23v30Ev
  virtual void  v31(); // _ZN7S3207C23v31Ev
  virtual void  v32(); // _ZN7S3207C23v32Ev
  virtual void  v33(); // _ZN7S3207C23v33Ev
  S3207C2(); // tgen
};
//SIG(-1 S3207C2) C1{ BC2{ vd v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 FC3{ m FC4{ m FL[2]}} FC3 Fp Fi FU5{ m FC6{ Fi:4 Fi:4 Fi:4 Fi:2 Fi:1 Fi:17} Fi} Fi:2 Fi:2 Fc:1 Fc:1 FC7{ m Fp Fp} FC8{ Fp Fp}[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc Fi[2] Fi[2] Fp FC3 FC3 FC3 FC9{ m FC3 FC3} Fp Fi Fi FC10{ m Fp}[4] Fp}


 S3207C2 ::~S3207C2(){ note_dtor("S3207C2", this);}
void  S3207C2 ::v19(){vfunc_called(this, "_ZN7S3207C23v19Ev");}
void  S3207C2 ::v20(){vfunc_called(this, "_ZN7S3207C23v20Ev");}
void  S3207C2 ::v21(){vfunc_called(this, "_ZN7S3207C23v21Ev");}
void  S3207C2 ::v22(){vfunc_called(this, "_ZN7S3207C23v22Ev");}
void  S3207C2 ::v23(){vfunc_called(this, "_ZN7S3207C23v23Ev");}
void  S3207C2 ::v24(){vfunc_called(this, "_ZN7S3207C23v24Ev");}
void  S3207C2 ::v25(){vfunc_called(this, "_ZN7S3207C23v25Ev");}
void  S3207C2 ::v26(){vfunc_called(this, "_ZN7S3207C23v26Ev");}
void  S3207C2 ::v27(){vfunc_called(this, "_ZN7S3207C23v27Ev");}
void  S3207C2 ::v28(){vfunc_called(this, "_ZN7S3207C23v28Ev");}
void  S3207C2 ::v29(){vfunc_called(this, "_ZN7S3207C23v29Ev");}
void  S3207C2 ::v30(){vfunc_called(this, "_ZN7S3207C23v30Ev");}
void  S3207C2 ::v31(){vfunc_called(this, "_ZN7S3207C23v31Ev");}
void  S3207C2 ::v32(){vfunc_called(this, "_ZN7S3207C23v32Ev");}
void  S3207C2 ::v33(){vfunc_called(this, "_ZN7S3207C23v33Ev");}
S3207C2 ::S3207C2(){ note_ctor("S3207C2", this);} // tgen

static void Test_S3207C2()
{
  extern Class_Descriptor cd_S3207C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(36,54)];
    init_test(&cd_S3207C2, buf);
    S3207C2 *dp, &lv = *(dp=new (buf) S3207C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(280,212), "sizeof(S3207C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3207C2)");
    check_base_class_offset(lv, (S3207C3*), 0, "S3207C2");
    set_bf_and_test(lv, s3207c2f0, ABISELECT(112,76), 0, 1, 1, "S3207C2");
    set_bf_and_test(lv, s3207c2f1, ABISELECT(112,76), 1, 1, 1, "S3207C2");
    set_bf_and_test(lv, s3207c2f2, ABISELECT(112,76), 2, 1, 1, "S3207C2");
    set_bf_and_test(lv, s3207c2f3, ABISELECT(112,76), 3, 1, 1, "S3207C2");
    set_bf_and_test(lv, s3207c2f4, ABISELECT(112,76), 4, 1, 1, "S3207C2");
    set_bf_and_test(lv, s3207c2f5, ABISELECT(112,76), 5, 1, 1, "S3207C2");
    set_bf_and_test(lv, s3207c2f6, ABISELECT(112,76), 6, 1, 1, "S3207C2");
    check_field_offset(lv, s3207c2f7, ABISELECT(113,77), "S3207C2.s3207c2f7");
    check_field_offset(lv, s3207c2f8, ABISELECT(116,80), "S3207C2.s3207c2f8");
    check_field_offset(lv, s3207c2f9, ABISELECT(124,88), "S3207C2.s3207c2f9");
    check_field_offset(lv, s3207c2f10, ABISELECT(136,96), "S3207C2.s3207c2f10");
    check_field_offset(lv, s3207c2f11, ABISELECT(144,100), "S3207C2.s3207c2f11");
    check_field_offset(lv, s3207c2f12, ABISELECT(160,116), "S3207C2.s3207c2f12");
    check_field_offset(lv, s3207c2f13, ABISELECT(176,132), "S3207C2.s3207c2f13");
    check_field_offset(lv, s3207c2f14, ABISELECT(192,148), "S3207C2.s3207c2f14");
    check_field_offset(lv, s3207c2f15, ABISELECT(224,180), "S3207C2.s3207c2f15");
    check_field_offset(lv, s3207c2f16, ABISELECT(232,184), "S3207C2.s3207c2f16");
    check_field_offset(lv, s3207c2f17, ABISELECT(236,188), "S3207C2.s3207c2f17");
    check_field_offset(lv, s3207c2f18, ABISELECT(240,192), "S3207C2.s3207c2f18");
    check_field_offset(lv, s3207c2f19, ABISELECT(272,208), "S3207C2.s3207c2f19");
    test_class_info(&lv, &cd_S3207C2);
    dp->~S3207C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3207C2(Test_S3207C2, "S3207C2", ABISELECT(280,212));

#else // __cplusplus

extern void _ZN7S3207C2C1Ev();
extern void _ZN7S3207C2D1Ev();
Name_Map name_map_S3207C2[] = {
  NSPAIR(_ZN7S3207C2C1Ev),
  NSPAIR(_ZN7S3207C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3207C3;
extern VTBL_ENTRY _ZTI7S3207C3[];
extern  VTBL_ENTRY _ZTV7S3207C3[];
static Base_Class bases_S3207C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3207C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3207C2[];
extern void _ZN7S3207C2D1Ev();
extern void _ZN7S3207C2D0Ev();
extern void _ZN7S3207C32v4Ev();
extern void _ZN7S3207C32v5Ev();
extern void _ZN7S3207C32v6Ev();
extern void _ZN7S3207C32v7Ev();
extern void _ZN7S3207C32v8Ev();
extern void _ZN7S3207C32v9Ev();
extern void _ZN7S3207C33v10Ev();
extern void _ZN7S3207C33v11Ev();
extern void _ZN7S3207C33v12Ev();
extern void _ZN7S3207C33v13Ev();
extern void _ZN7S3207C33v14Ev();
extern void _ZN7S3207C33v15Ev();
extern void _ZN7S3207C33v16Ev();
extern void _ZN7S3207C33v17Ev();
extern void _ZN7S3207C33v18Ev();
extern void _ZN7S3207C23v19Ev();
extern void _ZN7S3207C23v20Ev();
extern void _ZN7S3207C23v21Ev();
extern void _ZN7S3207C23v22Ev();
extern void _ZN7S3207C23v23Ev();
extern void _ZN7S3207C23v24Ev();
extern void _ZN7S3207C23v25Ev();
extern void _ZN7S3207C23v26Ev();
extern void _ZN7S3207C23v27Ev();
extern void _ZN7S3207C23v28Ev();
extern void _ZN7S3207C23v29Ev();
extern void _ZN7S3207C23v30Ev();
extern void _ZN7S3207C23v31Ev();
extern void _ZN7S3207C23v32Ev();
extern void _ZN7S3207C23v33Ev();
static  VTBL_ENTRY vtc_S3207C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3207C2[0]),
  (VTBL_ENTRY)&_ZN7S3207C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3207C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3207C32v4Ev,
  (VTBL_ENTRY)&_ZN7S3207C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3207C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3207C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3207C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3207C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3207C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3207C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3207C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3207C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3207C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3207C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3207C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3207C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3207C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3207C23v19Ev,
  (VTBL_ENTRY)&_ZN7S3207C23v20Ev,
  (VTBL_ENTRY)&_ZN7S3207C23v21Ev,
  (VTBL_ENTRY)&_ZN7S3207C23v22Ev,
  (VTBL_ENTRY)&_ZN7S3207C23v23Ev,
  (VTBL_ENTRY)&_ZN7S3207C23v24Ev,
  (VTBL_ENTRY)&_ZN7S3207C23v25Ev,
  (VTBL_ENTRY)&_ZN7S3207C23v26Ev,
  (VTBL_ENTRY)&_ZN7S3207C23v27Ev,
  (VTBL_ENTRY)&_ZN7S3207C23v28Ev,
  (VTBL_ENTRY)&_ZN7S3207C23v29Ev,
  (VTBL_ENTRY)&_ZN7S3207C23v30Ev,
  (VTBL_ENTRY)&_ZN7S3207C23v31Ev,
  (VTBL_ENTRY)&_ZN7S3207C23v32Ev,
  (VTBL_ENTRY)&_ZN7S3207C23v33Ev,
};
extern VTBL_ENTRY _ZTI7S3207C2[];
extern  VTBL_ENTRY _ZTV7S3207C2[];
Class_Descriptor cd_S3207C2 = {  "S3207C2", // class name
  bases_S3207C2, 1,
  &(vtc_S3207C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(280,212), // object size
  NSPAIRA(_ZTI7S3207C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3207C2),34, //virtual function table var
  2, // 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  S3207C1  : S3207C2 {
  void *s3207c1f0;
  void *s3207c1f1;
  void *s3207c1f2;
  ::S601C25_nt s3207c1f3;
  int s3207c1f4;
  int s3207c1f5;
  ::S601C13_nt s3207c1f6;
  virtual  ~S3207C1(); // _ZN7S3207C1D1Ev
  virtual void  v1(); // _ZN7S3207C12v1Ev
  virtual void  v2(); // _ZN7S3207C12v2Ev
  virtual void  v3(); // _ZN7S3207C12v3Ev
  S3207C1(); // tgen
};
//SIG(1 S3207C1) C1{ BC2{ BC3{ vd v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 FC4{ m FC5{ m FL[2]}} FC4 Fp Fi FU6{ m FC7{ Fi:4 Fi:4 Fi:4 Fi:2 Fi:1 Fi:17} Fi} Fi:2 Fi:2 Fc:1 Fc:1 FC8{ m Fp Fp} FC9{ Fp Fp}[2]} vd v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc Fi[2] Fi[2] Fp FC4 FC4 FC4 FC10{ m FC4 FC4} Fp Fi Fi FC11{ m Fp}[4] Fp} vd v1 v2 v3 Fp Fp Fp FC12{ m FC5} Fi Fi FC11}


 S3207C1 ::~S3207C1(){ note_dtor("S3207C1", this);}
void  S3207C1 ::v1(){vfunc_called(this, "_ZN7S3207C12v1Ev");}
void  S3207C1 ::v2(){vfunc_called(this, "_ZN7S3207C12v2Ev");}
void  S3207C1 ::v3(){vfunc_called(this, "_ZN7S3207C12v3Ev");}
S3207C1 ::S3207C1(){ note_ctor("S3207C1", this);} // tgen

static void Test_S3207C1()
{
  extern Class_Descriptor cd_S3207C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(43,64)];
    init_test(&cd_S3207C1, buf);
    S3207C1 *dp, &lv = *(dp=new (buf) S3207C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,252), "sizeof(S3207C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3207C1)");
    check_base_class_offset(lv, (S3207C3*)(S3207C2*), 0, "S3207C1");
    check_base_class_offset(lv, (S3207C2*), 0, "S3207C1");
    check_field_offset(lv, s3207c1f0, ABISELECT(280,212), "S3207C1.s3207c1f0");
    check_field_offset(lv, s3207c1f1, ABISELECT(288,216), "S3207C1.s3207c1f1");
    check_field_offset(lv, s3207c1f2, ABISELECT(296,220), "S3207C1.s3207c1f2");
    check_field_offset(lv, s3207c1f3, ABISELECT(304,224), "S3207C1.s3207c1f3");
    check_field_offset(lv, s3207c1f4, ABISELECT(320,240), "S3207C1.s3207c1f4");
    check_field_offset(lv, s3207c1f5, ABISELECT(324,244), "S3207C1.s3207c1f5");
    check_field_offset(lv, s3207c1f6, ABISELECT(328,248), "S3207C1.s3207c1f6");
    test_class_info(&lv, &cd_S3207C1);
    dp->~S3207C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3207C1(Test_S3207C1, "S3207C1", ABISELECT(336,252));

#else // __cplusplus

extern void _ZN7S3207C1C1Ev();
extern void _ZN7S3207C1D1Ev();
Name_Map name_map_S3207C1[] = {
  NSPAIR(_ZN7S3207C1C1Ev),
  NSPAIR(_ZN7S3207C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3207C3;
extern VTBL_ENTRY _ZTI7S3207C3[];
extern  VTBL_ENTRY _ZTV7S3207C3[];
extern Class_Descriptor cd_S3207C2;
extern VTBL_ENTRY _ZTI7S3207C2[];
extern  VTBL_ENTRY _ZTV7S3207C2[];
static Base_Class bases_S3207C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3207C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3207C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S3207C1[];
extern void _ZN7S3207C1D1Ev();
extern void _ZN7S3207C1D0Ev();
extern void _ZN7S3207C32v4Ev();
extern void _ZN7S3207C32v5Ev();
extern void _ZN7S3207C32v6Ev();
extern void _ZN7S3207C32v7Ev();
extern void _ZN7S3207C32v8Ev();
extern void _ZN7S3207C32v9Ev();
extern void _ZN7S3207C33v10Ev();
extern void _ZN7S3207C33v11Ev();
extern void _ZN7S3207C33v12Ev();
extern void _ZN7S3207C33v13Ev();
extern void _ZN7S3207C33v14Ev();
extern void _ZN7S3207C33v15Ev();
extern void _ZN7S3207C33v16Ev();
extern void _ZN7S3207C33v17Ev();
extern void _ZN7S3207C33v18Ev();
extern void _ZN7S3207C23v19Ev();
extern void _ZN7S3207C23v20Ev();
extern void _ZN7S3207C23v21Ev();
extern void _ZN7S3207C23v22Ev();
extern void _ZN7S3207C23v23Ev();
extern void _ZN7S3207C23v24Ev();
extern void _ZN7S3207C23v25Ev();
extern void _ZN7S3207C23v26Ev();
extern void _ZN7S3207C23v27Ev();
extern void _ZN7S3207C23v28Ev();
extern void _ZN7S3207C23v29Ev();
extern void _ZN7S3207C23v30Ev();
extern void _ZN7S3207C23v31Ev();
extern void _ZN7S3207C23v32Ev();
extern void _ZN7S3207C23v33Ev();
extern void _ZN7S3207C12v1Ev();
extern void _ZN7S3207C12v2Ev();
extern void _ZN7S3207C12v3Ev();
static  VTBL_ENTRY vtc_S3207C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3207C1[0]),
  (VTBL_ENTRY)&_ZN7S3207C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3207C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3207C32v4Ev,
  (VTBL_ENTRY)&_ZN7S3207C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3207C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3207C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3207C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3207C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3207C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3207C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3207C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3207C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3207C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3207C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3207C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3207C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3207C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3207C23v19Ev,
  (VTBL_ENTRY)&_ZN7S3207C23v20Ev,
  (VTBL_ENTRY)&_ZN7S3207C23v21Ev,
  (VTBL_ENTRY)&_ZN7S3207C23v22Ev,
  (VTBL_ENTRY)&_ZN7S3207C23v23Ev,
  (VTBL_ENTRY)&_ZN7S3207C23v24Ev,
  (VTBL_ENTRY)&_ZN7S3207C23v25Ev,
  (VTBL_ENTRY)&_ZN7S3207C23v26Ev,
  (VTBL_ENTRY)&_ZN7S3207C23v27Ev,
  (VTBL_ENTRY)&_ZN7S3207C23v28Ev,
  (VTBL_ENTRY)&_ZN7S3207C23v29Ev,
  (VTBL_ENTRY)&_ZN7S3207C23v30Ev,
  (VTBL_ENTRY)&_ZN7S3207C23v31Ev,
  (VTBL_ENTRY)&_ZN7S3207C23v32Ev,
  (VTBL_ENTRY)&_ZN7S3207C23v33Ev,
  (VTBL_ENTRY)&_ZN7S3207C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3207C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3207C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S3207C1[];
extern  VTBL_ENTRY _ZTV7S3207C1[];
Class_Descriptor cd_S3207C1 = {  "S3207C1", // class name
  bases_S3207C1, 2,
  &(vtc_S3207C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(336,252), // object size
  NSPAIRA(_ZTI7S3207C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3207C1),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3205C3  {
  ::S2120C13_nt s3205c3f0;
  ::S2120C13_nt s3205c3f1;
  void *s3205c3f2;
  int s3205c3f3;
  ::S601C8 s3205c3f4;
  int s3205c3f5:2;
  int s3205c3f6:2;
  unsigned char s3205c3f7:1;
  unsigned char s3205c3f8:1;
  ::S601C53 s3205c3f9;
  ::S601C11 s3205c3f10[2];
  virtual  ~S3205C3(); // _ZN7S3205C3D1Ev
  virtual void  v4(); // _ZN7S3205C32v4Ev
  virtual void  v5(); // _ZN7S3205C32v5Ev
  virtual void  v6(); // _ZN7S3205C32v6Ev
  virtual void  v7(); // _ZN7S3205C32v7Ev
  virtual void  v8(); // _ZN7S3205C32v8Ev
  virtual void  v9(); // _ZN7S3205C32v9Ev
  virtual void  v10(); // _ZN7S3205C33v10Ev
  virtual void  v11(); // _ZN7S3205C33v11Ev
  virtual void  v12(); // _ZN7S3205C33v12Ev
  virtual void  v13(); // _ZN7S3205C33v13Ev
  virtual void  v14(); // _ZN7S3205C33v14Ev
  virtual void  v15(); // _ZN7S3205C33v15Ev
  virtual void  v16(); // _ZN7S3205C33v16Ev
  virtual void  v17(); // _ZN7S3205C33v17Ev
  virtual void  v18(); // _ZN7S3205C33v18Ev
  S3205C3(); // tgen
};
//SIG(-1 S3205C3) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 FC2{ m FC3{ m FL[2]}} FC2 Fp Fi FU4{ m FC5{ Fi:4 Fi:4 Fi:4 Fi:2 Fi:1 Fi:17} Fi} Fi:2 Fi:2 Fc:1 Fc:1 FC6{ m Fp Fp} FC7{ Fp Fp}[2]}


 S3205C3 ::~S3205C3(){ note_dtor("S3205C3", this);}
void  S3205C3 ::v4(){vfunc_called(this, "_ZN7S3205C32v4Ev");}
void  S3205C3 ::v5(){vfunc_called(this, "_ZN7S3205C32v5Ev");}
void  S3205C3 ::v6(){vfunc_called(this, "_ZN7S3205C32v6Ev");}
void  S3205C3 ::v7(){vfunc_called(this, "_ZN7S3205C32v7Ev");}
void  S3205C3 ::v8(){vfunc_called(this, "_ZN7S3205C32v8Ev");}
void  S3205C3 ::v9(){vfunc_called(this, "_ZN7S3205C32v9Ev");}
void  S3205C3 ::v10(){vfunc_called(this, "_ZN7S3205C33v10Ev");}
void  S3205C3 ::v11(){vfunc_called(this, "_ZN7S3205C33v11Ev");}
void  S3205C3 ::v12(){vfunc_called(this, "_ZN7S3205C33v12Ev");}
void  S3205C3 ::v13(){vfunc_called(this, "_ZN7S3205C33v13Ev");}
void  S3205C3 ::v14(){vfunc_called(this, "_ZN7S3205C33v14Ev");}
void  S3205C3 ::v15(){vfunc_called(this, "_ZN7S3205C33v15Ev");}
void  S3205C3 ::v16(){vfunc_called(this, "_ZN7S3205C33v16Ev");}
void  S3205C3 ::v17(){vfunc_called(this, "_ZN7S3205C33v17Ev");}
void  S3205C3 ::v18(){vfunc_called(this, "_ZN7S3205C33v18Ev");}
S3205C3 ::S3205C3(){ note_ctor("S3205C3", this);} // tgen

static void Test_S3205C3()
{
  extern Class_Descriptor cd_S3205C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,20)];
    init_test(&cd_S3205C3, buf);
    S3205C3 *dp, &lv = *(dp=new (buf) S3205C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,76), "sizeof(S3205C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3205C3)");
    check_field_offset(lv, s3205c3f0, ABISELECT(8,4), "S3205C3.s3205c3f0");
    check_field_offset(lv, s3205c3f1, ABISELECT(24,20), "S3205C3.s3205c3f1");
    check_field_offset(lv, s3205c3f2, ABISELECT(40,36), "S3205C3.s3205c3f2");
    check_field_offset(lv, s3205c3f3, ABISELECT(48,40), "S3205C3.s3205c3f3");
    check_field_offset(lv, s3205c3f4, ABISELECT(52,44), "S3205C3.s3205c3f4");
    set_bf_and_test(lv, s3205c3f5, ABISELECT(56,48), 0, 2, 1, "S3205C3");
    set_bf_and_test(lv, s3205c3f5, ABISELECT(56,48), 0, 2, hide_sll(1LL<<1), "S3205C3");
    set_bf_and_test(lv, s3205c3f6, ABISELECT(56,48), 2, 2, 1, "S3205C3");
    set_bf_and_test(lv, s3205c3f6, ABISELECT(56,48), 2, 2, hide_sll(1LL<<1), "S3205C3");
    set_bf_and_test(lv, s3205c3f7, ABISELECT(56,48), 4, 1, 1, "S3205C3");
    set_bf_and_test(lv, s3205c3f8, ABISELECT(56,48), 5, 1, 1, "S3205C3");
    check_field_offset(lv, s3205c3f9, ABISELECT(64,52), "S3205C3.s3205c3f9");
    check_field_offset(lv, s3205c3f10, ABISELECT(80,60), "S3205C3.s3205c3f10");
    test_class_info(&lv, &cd_S3205C3);
    dp->~S3205C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3205C3(Test_S3205C3, "S3205C3", ABISELECT(112,76));

#else // __cplusplus

extern void _ZN7S3205C3C1Ev();
extern void _ZN7S3205C3D1Ev();
Name_Map name_map_S3205C3[] = {
  NSPAIR(_ZN7S3205C3C1Ev),
  NSPAIR(_ZN7S3205C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3205C3[];
extern void _ZN7S3205C3D1Ev();
extern void _ZN7S3205C3D0Ev();
extern void _ZN7S3205C32v4Ev();
extern void _ZN7S3205C32v5Ev();
extern void _ZN7S3205C32v6Ev();
extern void _ZN7S3205C32v7Ev();
extern void _ZN7S3205C32v8Ev();
extern void _ZN7S3205C32v9Ev();
extern void _ZN7S3205C33v10Ev();
extern void _ZN7S3205C33v11Ev();
extern void _ZN7S3205C33v12Ev();
extern void _ZN7S3205C33v13Ev();
extern void _ZN7S3205C33v14Ev();
extern void _ZN7S3205C33v15Ev();
extern void _ZN7S3205C33v16Ev();
extern void _ZN7S3205C33v17Ev();
extern void _ZN7S3205C33v18Ev();
static  VTBL_ENTRY vtc_S3205C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3205C3[0]),
  (VTBL_ENTRY)&_ZN7S3205C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3205C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3205C32v4Ev,
  (VTBL_ENTRY)&_ZN7S3205C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3205C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3205C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3205C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3205C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3205C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3205C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3205C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3205C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3205C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3205C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3205C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3205C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3205C33v18Ev,
};
extern VTBL_ENTRY _ZTI7S3205C3[];
extern  VTBL_ENTRY _ZTV7S3205C3[];
Class_Descriptor cd_S3205C3 = {  "S3205C3", // class name
  0,0,//no base classes
  &(vtc_S3205C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,76), // object size
  NSPAIRA(_ZTI7S3205C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3205C3),19, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3205C2  : S3205C3 {
  unsigned char s3205c2f0:1;
  unsigned char s3205c2f1:1;
  unsigned char s3205c2f2:1;
  unsigned char s3205c2f3:1;
  unsigned char s3205c2f4:1;
  unsigned char s3205c2f5:1;
  unsigned char s3205c2f6:1;
  char s3205c2f7;
  int s3205c2f8[2];
  int s3205c2f9[2];
  void *s3205c2f10;
  ::S2120C13_nt s3205c2f11;
  ::S2120C13_nt s3205c2f12;
  ::S2120C13_nt s3205c2f13;
  ::S601C12 s3205c2f14;
  void *s3205c2f15;
  int s3205c2f16;
  int s3205c2f17;
  ::S601C13_nt s3205c2f18[4];
  void *s3205c2f19;
  virtual  ~S3205C2(); // _ZN7S3205C2D1Ev
  virtual void  v19(); // _ZN7S3205C23v19Ev
  virtual void  v20(); // _ZN7S3205C23v20Ev
  virtual void  v21(); // _ZN7S3205C23v21Ev
  virtual void  v22(); // _ZN7S3205C23v22Ev
  virtual void  v23(); // _ZN7S3205C23v23Ev
  virtual void  v24(); // _ZN7S3205C23v24Ev
  virtual void  v25(); // _ZN7S3205C23v25Ev
  virtual void  v26(); // _ZN7S3205C23v26Ev
  virtual void  v27(); // _ZN7S3205C23v27Ev
  virtual void  v28(); // _ZN7S3205C23v28Ev
  virtual void  v29(); // _ZN7S3205C23v29Ev
  virtual void  v30(); // _ZN7S3205C23v30Ev
  virtual void  v31(); // _ZN7S3205C23v31Ev
  virtual void  v32(); // _ZN7S3205C23v32Ev
  virtual void  v33(); // _ZN7S3205C23v33Ev
  S3205C2(); // tgen
};
//SIG(-1 S3205C2) C1{ BC2{ vd v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 FC3{ m FC4{ m FL[2]}} FC3 Fp Fi FU5{ m FC6{ Fi:4 Fi:4 Fi:4 Fi:2 Fi:1 Fi:17} Fi} Fi:2 Fi:2 Fc:1 Fc:1 FC7{ m Fp Fp} FC8{ Fp Fp}[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc Fi[2] Fi[2] Fp FC3 FC3 FC3 FC9{ m FC3 FC3} Fp Fi Fi FC10{ m Fp}[4] Fp}


 S3205C2 ::~S3205C2(){ note_dtor("S3205C2", this);}
void  S3205C2 ::v19(){vfunc_called(this, "_ZN7S3205C23v19Ev");}
void  S3205C2 ::v20(){vfunc_called(this, "_ZN7S3205C23v20Ev");}
void  S3205C2 ::v21(){vfunc_called(this, "_ZN7S3205C23v21Ev");}
void  S3205C2 ::v22(){vfunc_called(this, "_ZN7S3205C23v22Ev");}
void  S3205C2 ::v23(){vfunc_called(this, "_ZN7S3205C23v23Ev");}
void  S3205C2 ::v24(){vfunc_called(this, "_ZN7S3205C23v24Ev");}
void  S3205C2 ::v25(){vfunc_called(this, "_ZN7S3205C23v25Ev");}
void  S3205C2 ::v26(){vfunc_called(this, "_ZN7S3205C23v26Ev");}
void  S3205C2 ::v27(){vfunc_called(this, "_ZN7S3205C23v27Ev");}
void  S3205C2 ::v28(){vfunc_called(this, "_ZN7S3205C23v28Ev");}
void  S3205C2 ::v29(){vfunc_called(this, "_ZN7S3205C23v29Ev");}
void  S3205C2 ::v30(){vfunc_called(this, "_ZN7S3205C23v30Ev");}
void  S3205C2 ::v31(){vfunc_called(this, "_ZN7S3205C23v31Ev");}
void  S3205C2 ::v32(){vfunc_called(this, "_ZN7S3205C23v32Ev");}
void  S3205C2 ::v33(){vfunc_called(this, "_ZN7S3205C23v33Ev");}
S3205C2 ::S3205C2(){ note_ctor("S3205C2", this);} // tgen

static void Test_S3205C2()
{
  extern Class_Descriptor cd_S3205C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(36,54)];
    init_test(&cd_S3205C2, buf);
    S3205C2 *dp, &lv = *(dp=new (buf) S3205C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(280,212), "sizeof(S3205C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3205C2)");
    check_base_class_offset(lv, (S3205C3*), 0, "S3205C2");
    set_bf_and_test(lv, s3205c2f0, ABISELECT(112,76), 0, 1, 1, "S3205C2");
    set_bf_and_test(lv, s3205c2f1, ABISELECT(112,76), 1, 1, 1, "S3205C2");
    set_bf_and_test(lv, s3205c2f2, ABISELECT(112,76), 2, 1, 1, "S3205C2");
    set_bf_and_test(lv, s3205c2f3, ABISELECT(112,76), 3, 1, 1, "S3205C2");
    set_bf_and_test(lv, s3205c2f4, ABISELECT(112,76), 4, 1, 1, "S3205C2");
    set_bf_and_test(lv, s3205c2f5, ABISELECT(112,76), 5, 1, 1, "S3205C2");
    set_bf_and_test(lv, s3205c2f6, ABISELECT(112,76), 6, 1, 1, "S3205C2");
    check_field_offset(lv, s3205c2f7, ABISELECT(113,77), "S3205C2.s3205c2f7");
    check_field_offset(lv, s3205c2f8, ABISELECT(116,80), "S3205C2.s3205c2f8");
    check_field_offset(lv, s3205c2f9, ABISELECT(124,88), "S3205C2.s3205c2f9");
    check_field_offset(lv, s3205c2f10, ABISELECT(136,96), "S3205C2.s3205c2f10");
    check_field_offset(lv, s3205c2f11, ABISELECT(144,100), "S3205C2.s3205c2f11");
    check_field_offset(lv, s3205c2f12, ABISELECT(160,116), "S3205C2.s3205c2f12");
    check_field_offset(lv, s3205c2f13, ABISELECT(176,132), "S3205C2.s3205c2f13");
    check_field_offset(lv, s3205c2f14, ABISELECT(192,148), "S3205C2.s3205c2f14");
    check_field_offset(lv, s3205c2f15, ABISELECT(224,180), "S3205C2.s3205c2f15");
    check_field_offset(lv, s3205c2f16, ABISELECT(232,184), "S3205C2.s3205c2f16");
    check_field_offset(lv, s3205c2f17, ABISELECT(236,188), "S3205C2.s3205c2f17");
    check_field_offset(lv, s3205c2f18, ABISELECT(240,192), "S3205C2.s3205c2f18");
    check_field_offset(lv, s3205c2f19, ABISELECT(272,208), "S3205C2.s3205c2f19");
    test_class_info(&lv, &cd_S3205C2);
    dp->~S3205C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3205C2(Test_S3205C2, "S3205C2", ABISELECT(280,212));

#else // __cplusplus

extern void _ZN7S3205C2C1Ev();
extern void _ZN7S3205C2D1Ev();
Name_Map name_map_S3205C2[] = {
  NSPAIR(_ZN7S3205C2C1Ev),
  NSPAIR(_ZN7S3205C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3205C3;
extern VTBL_ENTRY _ZTI7S3205C3[];
extern  VTBL_ENTRY _ZTV7S3205C3[];
static Base_Class bases_S3205C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3205C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3205C2[];
extern void _ZN7S3205C2D1Ev();
extern void _ZN7S3205C2D0Ev();
extern void _ZN7S3205C32v4Ev();
extern void _ZN7S3205C32v5Ev();
extern void _ZN7S3205C32v6Ev();
extern void _ZN7S3205C32v7Ev();
extern void _ZN7S3205C32v8Ev();
extern void _ZN7S3205C32v9Ev();
extern void _ZN7S3205C33v10Ev();
extern void _ZN7S3205C33v11Ev();
extern void _ZN7S3205C33v12Ev();
extern void _ZN7S3205C33v13Ev();
extern void _ZN7S3205C33v14Ev();
extern void _ZN7S3205C33v15Ev();
extern void _ZN7S3205C33v16Ev();
extern void _ZN7S3205C33v17Ev();
extern void _ZN7S3205C33v18Ev();
extern void _ZN7S3205C23v19Ev();
extern void _ZN7S3205C23v20Ev();
extern void _ZN7S3205C23v21Ev();
extern void _ZN7S3205C23v22Ev();
extern void _ZN7S3205C23v23Ev();
extern void _ZN7S3205C23v24Ev();
extern void _ZN7S3205C23v25Ev();
extern void _ZN7S3205C23v26Ev();
extern void _ZN7S3205C23v27Ev();
extern void _ZN7S3205C23v28Ev();
extern void _ZN7S3205C23v29Ev();
extern void _ZN7S3205C23v30Ev();
extern void _ZN7S3205C23v31Ev();
extern void _ZN7S3205C23v32Ev();
extern void _ZN7S3205C23v33Ev();
static  VTBL_ENTRY vtc_S3205C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3205C2[0]),
  (VTBL_ENTRY)&_ZN7S3205C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3205C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3205C32v4Ev,
  (VTBL_ENTRY)&_ZN7S3205C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3205C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3205C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3205C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3205C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3205C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3205C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3205C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3205C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3205C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3205C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3205C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3205C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3205C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3205C23v19Ev,
  (VTBL_ENTRY)&_ZN7S3205C23v20Ev,
  (VTBL_ENTRY)&_ZN7S3205C23v21Ev,
  (VTBL_ENTRY)&_ZN7S3205C23v22Ev,
  (VTBL_ENTRY)&_ZN7S3205C23v23Ev,
  (VTBL_ENTRY)&_ZN7S3205C23v24Ev,
  (VTBL_ENTRY)&_ZN7S3205C23v25Ev,
  (VTBL_ENTRY)&_ZN7S3205C23v26Ev,
  (VTBL_ENTRY)&_ZN7S3205C23v27Ev,
  (VTBL_ENTRY)&_ZN7S3205C23v28Ev,
  (VTBL_ENTRY)&_ZN7S3205C23v29Ev,
  (VTBL_ENTRY)&_ZN7S3205C23v30Ev,
  (VTBL_ENTRY)&_ZN7S3205C23v31Ev,
  (VTBL_ENTRY)&_ZN7S3205C23v32Ev,
  (VTBL_ENTRY)&_ZN7S3205C23v33Ev,
};
extern VTBL_ENTRY _ZTI7S3205C2[];
extern  VTBL_ENTRY _ZTV7S3205C2[];
Class_Descriptor cd_S3205C2 = {  "S3205C2", // class name
  bases_S3205C2, 1,
  &(vtc_S3205C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(280,212), // object size
  NSPAIRA(_ZTI7S3205C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3205C2),34, //virtual function table var
  2, // 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  S3205C1  : S3205C2 {
  ::S601C36 s3205c1f0;
  virtual  ~S3205C1(); // _ZN7S3205C1D1Ev
  virtual void  v1(); // _ZN7S3205C12v1Ev
  virtual void  v2(); // _ZN7S3205C12v2Ev
  virtual void  v3(); // _ZN7S3205C12v3Ev
  S3205C1(); // tgen
};
//SIG(1 S3205C1) C1{ BC2{ BC3{ vd v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 FC4{ m FC5{ m FL[2]}} FC4 Fp Fi FU6{ m FC7{ Fi:4 Fi:4 Fi:4 Fi:2 Fi:1 Fi:17} Fi} Fi:2 Fi:2 Fc:1 Fc:1 FC8{ m Fp Fp} FC9{ Fp Fp}[2]} vd v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc Fi[2] Fi[2] Fp FC4 FC4 FC4 FC10{ m FC4 FC4} Fp Fi Fi FC11{ m Fp}[4] Fp} vd v1 v2 v3 FC12{ m Fp Fi Fi FC13{ m}}}


 S3205C1 ::~S3205C1(){ note_dtor("S3205C1", this);}
void  S3205C1 ::v1(){vfunc_called(this, "_ZN7S3205C12v1Ev");}
void  S3205C1 ::v2(){vfunc_called(this, "_ZN7S3205C12v2Ev");}
void  S3205C1 ::v3(){vfunc_called(this, "_ZN7S3205C12v3Ev");}
S3205C1 ::S3205C1(){ note_ctor("S3205C1", this);} // tgen

static void Test_S3205C1()
{
  extern Class_Descriptor cd_S3205C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(39,58)];
    init_test(&cd_S3205C1, buf);
    S3205C1 *dp, &lv = *(dp=new (buf) S3205C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(304,228), "sizeof(S3205C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3205C1)");
    check_base_class_offset(lv, (S3205C3*)(S3205C2*), 0, "S3205C1");
    check_base_class_offset(lv, (S3205C2*), 0, "S3205C1");
    check_field_offset(lv, s3205c1f0, ABISELECT(280,212), "S3205C1.s3205c1f0");
    test_class_info(&lv, &cd_S3205C1);
    dp->~S3205C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3205C1(Test_S3205C1, "S3205C1", ABISELECT(304,228));

#else // __cplusplus

extern void _ZN7S3205C1C1Ev();
extern void _ZN7S3205C1D1Ev();
Name_Map name_map_S3205C1[] = {
  NSPAIR(_ZN7S3205C1C1Ev),
  NSPAIR(_ZN7S3205C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3205C3;
extern VTBL_ENTRY _ZTI7S3205C3[];
extern  VTBL_ENTRY _ZTV7S3205C3[];
extern Class_Descriptor cd_S3205C2;
extern VTBL_ENTRY _ZTI7S3205C2[];
extern  VTBL_ENTRY _ZTV7S3205C2[];
static Base_Class bases_S3205C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3205C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3205C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S3205C1[];
extern void _ZN7S3205C1D1Ev();
extern void _ZN7S3205C1D0Ev();
extern void _ZN7S3205C32v4Ev();
extern void _ZN7S3205C32v5Ev();
extern void _ZN7S3205C32v6Ev();
extern void _ZN7S3205C32v7Ev();
extern void _ZN7S3205C32v8Ev();
extern void _ZN7S3205C32v9Ev();
extern void _ZN7S3205C33v10Ev();
extern void _ZN7S3205C33v11Ev();
extern void _ZN7S3205C33v12Ev();
extern void _ZN7S3205C33v13Ev();
extern void _ZN7S3205C33v14Ev();
extern void _ZN7S3205C33v15Ev();
extern void _ZN7S3205C33v16Ev();
extern void _ZN7S3205C33v17Ev();
extern void _ZN7S3205C33v18Ev();
extern void _ZN7S3205C23v19Ev();
extern void _ZN7S3205C23v20Ev();
extern void _ZN7S3205C23v21Ev();
extern void _ZN7S3205C23v22Ev();
extern void _ZN7S3205C23v23Ev();
extern void _ZN7S3205C23v24Ev();
extern void _ZN7S3205C23v25Ev();
extern void _ZN7S3205C23v26Ev();
extern void _ZN7S3205C23v27Ev();
extern void _ZN7S3205C23v28Ev();
extern void _ZN7S3205C23v29Ev();
extern void _ZN7S3205C23v30Ev();
extern void _ZN7S3205C23v31Ev();
extern void _ZN7S3205C23v32Ev();
extern void _ZN7S3205C23v33Ev();
extern void _ZN7S3205C12v1Ev();
extern void _ZN7S3205C12v2Ev();
extern void _ZN7S3205C12v3Ev();
static  VTBL_ENTRY vtc_S3205C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3205C1[0]),
  (VTBL_ENTRY)&_ZN7S3205C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3205C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3205C32v4Ev,
  (VTBL_ENTRY)&_ZN7S3205C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3205C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3205C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3205C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3205C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3205C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3205C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3205C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3205C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3205C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3205C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3205C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3205C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3205C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3205C23v19Ev,
  (VTBL_ENTRY)&_ZN7S3205C23v20Ev,
  (VTBL_ENTRY)&_ZN7S3205C23v21Ev,
  (VTBL_ENTRY)&_ZN7S3205C23v22Ev,
  (VTBL_ENTRY)&_ZN7S3205C23v23Ev,
  (VTBL_ENTRY)&_ZN7S3205C23v24Ev,
  (VTBL_ENTRY)&_ZN7S3205C23v25Ev,
  (VTBL_ENTRY)&_ZN7S3205C23v26Ev,
  (VTBL_ENTRY)&_ZN7S3205C23v27Ev,
  (VTBL_ENTRY)&_ZN7S3205C23v28Ev,
  (VTBL_ENTRY)&_ZN7S3205C23v29Ev,
  (VTBL_ENTRY)&_ZN7S3205C23v30Ev,
  (VTBL_ENTRY)&_ZN7S3205C23v31Ev,
  (VTBL_ENTRY)&_ZN7S3205C23v32Ev,
  (VTBL_ENTRY)&_ZN7S3205C23v33Ev,
  (VTBL_ENTRY)&_ZN7S3205C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3205C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3205C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S3205C1[];
extern  VTBL_ENTRY _ZTV7S3205C1[];
Class_Descriptor cd_S3205C1 = {  "S3205C1", // class name
  bases_S3205C1, 2,
  &(vtc_S3205C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(304,228), // object size
  NSPAIRA(_ZTI7S3205C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3205C1),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1367C4  {
  ::S2120C13_nt s1367c4f0;
  ::S2120C13_nt s1367c4f1;
  void *s1367c4f2;
  int s1367c4f3;
  ::S601C8 s1367c4f4;
  int s1367c4f5:2;
  int s1367c4f6:2;
  unsigned char s1367c4f7:1;
  unsigned char s1367c4f8:1;
  ::S601C53 s1367c4f9;
  ::S601C11 s1367c4f10[2];
  virtual  ~S1367C4(); // _ZN7S1367C4D1Ev
  virtual void  v3(); // _ZN7S1367C42v3Ev
  virtual void  v4(); // _ZN7S1367C42v4Ev
  virtual void  v5(); // _ZN7S1367C42v5Ev
  virtual void  v6(); // _ZN7S1367C42v6Ev
  virtual void  v7(); // _ZN7S1367C42v7Ev
  virtual void  v8(); // _ZN7S1367C42v8Ev
  virtual void  v9(); // _ZN7S1367C42v9Ev
  virtual void  v10(); // _ZN7S1367C43v10Ev
  virtual void  v11(); // _ZN7S1367C43v11Ev
  virtual void  v12(); // _ZN7S1367C43v12Ev
  virtual void  v13(); // _ZN7S1367C43v13Ev
  virtual void  v14(); // _ZN7S1367C43v14Ev
  virtual void  v15(); // _ZN7S1367C43v15Ev
  virtual void  v16(); // _ZN7S1367C43v16Ev
  virtual void  v17(); // _ZN7S1367C43v17Ev
  S1367C4(); // tgen
};
//SIG(-1 S1367C4) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 FC2{ m FC3{ m FL[2]}} FC2 Fp Fi FU4{ m FC5{ Fi:4 Fi:4 Fi:4 Fi:2 Fi:1 Fi:17} Fi} Fi:2 Fi:2 Fc:1 Fc:1 FC6{ m Fp Fp} FC7{ Fp Fp}[2]}


 S1367C4 ::~S1367C4(){ note_dtor("S1367C4", this);}
void  S1367C4 ::v3(){vfunc_called(this, "_ZN7S1367C42v3Ev");}
void  S1367C4 ::v4(){vfunc_called(this, "_ZN7S1367C42v4Ev");}
void  S1367C4 ::v5(){vfunc_called(this, "_ZN7S1367C42v5Ev");}
void  S1367C4 ::v6(){vfunc_called(this, "_ZN7S1367C42v6Ev");}
void  S1367C4 ::v7(){vfunc_called(this, "_ZN7S1367C42v7Ev");}
void  S1367C4 ::v8(){vfunc_called(this, "_ZN7S1367C42v8Ev");}
void  S1367C4 ::v9(){vfunc_called(this, "_ZN7S1367C42v9Ev");}
void  S1367C4 ::v10(){vfunc_called(this, "_ZN7S1367C43v10Ev");}
void  S1367C4 ::v11(){vfunc_called(this, "_ZN7S1367C43v11Ev");}
void  S1367C4 ::v12(){vfunc_called(this, "_ZN7S1367C43v12Ev");}
void  S1367C4 ::v13(){vfunc_called(this, "_ZN7S1367C43v13Ev");}
void  S1367C4 ::v14(){vfunc_called(this, "_ZN7S1367C43v14Ev");}
void  S1367C4 ::v15(){vfunc_called(this, "_ZN7S1367C43v15Ev");}
void  S1367C4 ::v16(){vfunc_called(this, "_ZN7S1367C43v16Ev");}
void  S1367C4 ::v17(){vfunc_called(this, "_ZN7S1367C43v17Ev");}
S1367C4 ::S1367C4(){ note_ctor("S1367C4", this);} // tgen

static void Test_S1367C4()
{
  extern Class_Descriptor cd_S1367C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,20)];
    init_test(&cd_S1367C4, buf);
    S1367C4 *dp, &lv = *(dp=new (buf) S1367C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,76), "sizeof(S1367C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1367C4)");
    check_field_offset(lv, s1367c4f0, ABISELECT(8,4), "S1367C4.s1367c4f0");
    check_field_offset(lv, s1367c4f1, ABISELECT(24,20), "S1367C4.s1367c4f1");
    check_field_offset(lv, s1367c4f2, ABISELECT(40,36), "S1367C4.s1367c4f2");
    check_field_offset(lv, s1367c4f3, ABISELECT(48,40), "S1367C4.s1367c4f3");
    check_field_offset(lv, s1367c4f4, ABISELECT(52,44), "S1367C4.s1367c4f4");
    set_bf_and_test(lv, s1367c4f5, ABISELECT(56,48), 0, 2, 1, "S1367C4");
    set_bf_and_test(lv, s1367c4f5, ABISELECT(56,48), 0, 2, hide_sll(1LL<<1), "S1367C4");
    set_bf_and_test(lv, s1367c4f6, ABISELECT(56,48), 2, 2, 1, "S1367C4");
    set_bf_and_test(lv, s1367c4f6, ABISELECT(56,48), 2, 2, hide_sll(1LL<<1), "S1367C4");
    set_bf_and_test(lv, s1367c4f7, ABISELECT(56,48), 4, 1, 1, "S1367C4");
    set_bf_and_test(lv, s1367c4f8, ABISELECT(56,48), 5, 1, 1, "S1367C4");
    check_field_offset(lv, s1367c4f9, ABISELECT(64,52), "S1367C4.s1367c4f9");
    check_field_offset(lv, s1367c4f10, ABISELECT(80,60), "S1367C4.s1367c4f10");
    test_class_info(&lv, &cd_S1367C4);
    dp->~S1367C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1367C4(Test_S1367C4, "S1367C4", ABISELECT(112,76));

#else // __cplusplus

extern void _ZN7S1367C4C1Ev();
extern void _ZN7S1367C4D1Ev();
Name_Map name_map_S1367C4[] = {
  NSPAIR(_ZN7S1367C4C1Ev),
  NSPAIR(_ZN7S1367C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1367C4[];
extern void _ZN7S1367C4D1Ev();
extern void _ZN7S1367C4D0Ev();
extern void _ZN7S1367C42v3Ev();
extern void _ZN7S1367C42v4Ev();
extern void _ZN7S1367C42v5Ev();
extern void _ZN7S1367C42v6Ev();
extern void _ZN7S1367C42v7Ev();
extern void _ZN7S1367C42v8Ev();
extern void _ZN7S1367C42v9Ev();
extern void _ZN7S1367C43v10Ev();
extern void _ZN7S1367C43v11Ev();
extern void _ZN7S1367C43v12Ev();
extern void _ZN7S1367C43v13Ev();
extern void _ZN7S1367C43v14Ev();
extern void _ZN7S1367C43v15Ev();
extern void _ZN7S1367C43v16Ev();
extern void _ZN7S1367C43v17Ev();
static  VTBL_ENTRY vtc_S1367C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1367C4[0]),
  (VTBL_ENTRY)&_ZN7S1367C4D1Ev,
  (VTBL_ENTRY)&_ZN7S1367C4D0Ev,
  (VTBL_ENTRY)&_ZN7S1367C42v3Ev,
  (VTBL_ENTRY)&_ZN7S1367C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1367C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1367C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1367C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1367C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1367C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1367C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1367C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1367C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1367C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1367C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1367C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1367C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1367C43v17Ev,
};
extern VTBL_ENTRY _ZTI7S1367C4[];
extern  VTBL_ENTRY _ZTV7S1367C4[];
Class_Descriptor cd_S1367C4 = {  "S1367C4", // class name
  0,0,//no base classes
  &(vtc_S1367C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,76), // object size
  NSPAIRA(_ZTI7S1367C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1367C4),19, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1367C3  : S1367C4 {
  unsigned char s1367c3f0:1;
  unsigned char s1367c3f1:1;
  unsigned char s1367c3f2:1;
  unsigned char s1367c3f3:1;
  unsigned char s1367c3f4:1;
  unsigned char s1367c3f5:1;
  unsigned char s1367c3f6:1;
  char s1367c3f7;
  int s1367c3f8[2];
  int s1367c3f9[2];
  void *s1367c3f10;
  ::S2120C13_nt s1367c3f11;
  ::S2120C13_nt s1367c3f12;
  ::S2120C13_nt s1367c3f13;
  ::S601C12 s1367c3f14;
  void *s1367c3f15;
  int s1367c3f16;
  int s1367c3f17;
  ::S601C13_nt s1367c3f18[4];
  void *s1367c3f19;
  virtual  ~S1367C3(); // _ZN7S1367C3D1Ev
  virtual void  v18(); // _ZN7S1367C33v18Ev
  virtual void  v19(); // _ZN7S1367C33v19Ev
  virtual void  v20(); // _ZN7S1367C33v20Ev
  virtual void  v21(); // _ZN7S1367C33v21Ev
  virtual void  v22(); // _ZN7S1367C33v22Ev
  virtual void  v23(); // _ZN7S1367C33v23Ev
  virtual void  v24(); // _ZN7S1367C33v24Ev
  virtual void  v25(); // _ZN7S1367C33v25Ev
  virtual void  v26(); // _ZN7S1367C33v26Ev
  virtual void  v27(); // _ZN7S1367C33v27Ev
  virtual void  v28(); // _ZN7S1367C33v28Ev
  virtual void  v29(); // _ZN7S1367C33v29Ev
  virtual void  v30(); // _ZN7S1367C33v30Ev
  virtual void  v31(); // _ZN7S1367C33v31Ev
  virtual void  v32(); // _ZN7S1367C33v32Ev
  S1367C3(); // tgen
};
//SIG(-1 S1367C3) C1{ BC2{ vd v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 FC3{ m FC4{ m FL[2]}} FC3 Fp Fi FU5{ m FC6{ Fi:4 Fi:4 Fi:4 Fi:2 Fi:1 Fi:17} Fi} Fi:2 Fi:2 Fc:1 Fc:1 FC7{ m Fp Fp} FC8{ Fp Fp}[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc Fi[2] Fi[2] Fp FC3 FC3 FC3 FC9{ m FC3 FC3} Fp Fi Fi FC10{ m Fp}[4] Fp}


 S1367C3 ::~S1367C3(){ note_dtor("S1367C3", this);}
void  S1367C3 ::v18(){vfunc_called(this, "_ZN7S1367C33v18Ev");}
void  S1367C3 ::v19(){vfunc_called(this, "_ZN7S1367C33v19Ev");}
void  S1367C3 ::v20(){vfunc_called(this, "_ZN7S1367C33v20Ev");}
void  S1367C3 ::v21(){vfunc_called(this, "_ZN7S1367C33v21Ev");}
void  S1367C3 ::v22(){vfunc_called(this, "_ZN7S1367C33v22Ev");}
void  S1367C3 ::v23(){vfunc_called(this, "_ZN7S1367C33v23Ev");}
void  S1367C3 ::v24(){vfunc_called(this, "_ZN7S1367C33v24Ev");}
void  S1367C3 ::v25(){vfunc_called(this, "_ZN7S1367C33v25Ev");}
void  S1367C3 ::v26(){vfunc_called(this, "_ZN7S1367C33v26Ev");}
void  S1367C3 ::v27(){vfunc_called(this, "_ZN7S1367C33v27Ev");}
void  S1367C3 ::v28(){vfunc_called(this, "_ZN7S1367C33v28Ev");}
void  S1367C3 ::v29(){vfunc_called(this, "_ZN7S1367C33v29Ev");}
void  S1367C3 ::v30(){vfunc_called(this, "_ZN7S1367C33v30Ev");}
void  S1367C3 ::v31(){vfunc_called(this, "_ZN7S1367C33v31Ev");}
void  S1367C3 ::v32(){vfunc_called(this, "_ZN7S1367C33v32Ev");}
S1367C3 ::S1367C3(){ note_ctor("S1367C3", this);} // tgen

static void Test_S1367C3()
{
  extern Class_Descriptor cd_S1367C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(36,54)];
    init_test(&cd_S1367C3, buf);
    S1367C3 *dp, &lv = *(dp=new (buf) S1367C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(280,212), "sizeof(S1367C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1367C3)");
    check_base_class_offset(lv, (S1367C4*), 0, "S1367C3");
    set_bf_and_test(lv, s1367c3f0, ABISELECT(112,76), 0, 1, 1, "S1367C3");
    set_bf_and_test(lv, s1367c3f1, ABISELECT(112,76), 1, 1, 1, "S1367C3");
    set_bf_and_test(lv, s1367c3f2, ABISELECT(112,76), 2, 1, 1, "S1367C3");
    set_bf_and_test(lv, s1367c3f3, ABISELECT(112,76), 3, 1, 1, "S1367C3");
    set_bf_and_test(lv, s1367c3f4, ABISELECT(112,76), 4, 1, 1, "S1367C3");
    set_bf_and_test(lv, s1367c3f5, ABISELECT(112,76), 5, 1, 1, "S1367C3");
    set_bf_and_test(lv, s1367c3f6, ABISELECT(112,76), 6, 1, 1, "S1367C3");
    check_field_offset(lv, s1367c3f7, ABISELECT(113,77), "S1367C3.s1367c3f7");
    check_field_offset(lv, s1367c3f8, ABISELECT(116,80), "S1367C3.s1367c3f8");
    check_field_offset(lv, s1367c3f9, ABISELECT(124,88), "S1367C3.s1367c3f9");
    check_field_offset(lv, s1367c3f10, ABISELECT(136,96), "S1367C3.s1367c3f10");
    check_field_offset(lv, s1367c3f11, ABISELECT(144,100), "S1367C3.s1367c3f11");
    check_field_offset(lv, s1367c3f12, ABISELECT(160,116), "S1367C3.s1367c3f12");
    check_field_offset(lv, s1367c3f13, ABISELECT(176,132), "S1367C3.s1367c3f13");
    check_field_offset(lv, s1367c3f14, ABISELECT(192,148), "S1367C3.s1367c3f14");
    check_field_offset(lv, s1367c3f15, ABISELECT(224,180), "S1367C3.s1367c3f15");
    check_field_offset(lv, s1367c3f16, ABISELECT(232,184), "S1367C3.s1367c3f16");
    check_field_offset(lv, s1367c3f17, ABISELECT(236,188), "S1367C3.s1367c3f17");
    check_field_offset(lv, s1367c3f18, ABISELECT(240,192), "S1367C3.s1367c3f18");
    check_field_offset(lv, s1367c3f19, ABISELECT(272,208), "S1367C3.s1367c3f19");
    test_class_info(&lv, &cd_S1367C3);
    dp->~S1367C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1367C3(Test_S1367C3, "S1367C3", ABISELECT(280,212));

#else // __cplusplus

extern void _ZN7S1367C3C1Ev();
extern void _ZN7S1367C3D1Ev();
Name_Map name_map_S1367C3[] = {
  NSPAIR(_ZN7S1367C3C1Ev),
  NSPAIR(_ZN7S1367C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1367C4;
extern VTBL_ENTRY _ZTI7S1367C4[];
extern  VTBL_ENTRY _ZTV7S1367C4[];
static Base_Class bases_S1367C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1367C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1367C3[];
extern void _ZN7S1367C3D1Ev();
extern void _ZN7S1367C3D0Ev();
extern void _ZN7S1367C42v3Ev();
extern void _ZN7S1367C42v4Ev();
extern void _ZN7S1367C42v5Ev();
extern void _ZN7S1367C42v6Ev();
extern void _ZN7S1367C42v7Ev();
extern void _ZN7S1367C42v8Ev();
extern void _ZN7S1367C42v9Ev();
extern void _ZN7S1367C43v10Ev();
extern void _ZN7S1367C43v11Ev();
extern void _ZN7S1367C43v12Ev();
extern void _ZN7S1367C43v13Ev();
extern void _ZN7S1367C43v14Ev();
extern void _ZN7S1367C43v15Ev();
extern void _ZN7S1367C43v16Ev();
extern void _ZN7S1367C43v17Ev();
extern void _ZN7S1367C33v18Ev();
extern void _ZN7S1367C33v19Ev();
extern void _ZN7S1367C33v20Ev();
extern void _ZN7S1367C33v21Ev();
extern void _ZN7S1367C33v22Ev();
extern void _ZN7S1367C33v23Ev();
extern void _ZN7S1367C33v24Ev();
extern void _ZN7S1367C33v25Ev();
extern void _ZN7S1367C33v26Ev();
extern void _ZN7S1367C33v27Ev();
extern void _ZN7S1367C33v28Ev();
extern void _ZN7S1367C33v29Ev();
extern void _ZN7S1367C33v30Ev();
extern void _ZN7S1367C33v31Ev();
extern void _ZN7S1367C33v32Ev();
static  VTBL_ENTRY vtc_S1367C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1367C3[0]),
  (VTBL_ENTRY)&_ZN7S1367C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1367C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1367C42v3Ev,
  (VTBL_ENTRY)&_ZN7S1367C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1367C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1367C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1367C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1367C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1367C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1367C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1367C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1367C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1367C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1367C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1367C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1367C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1367C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1367C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1367C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1367C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1367C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1367C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1367C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1367C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1367C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1367C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1367C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1367C33v28Ev,
  (VTBL_ENTRY)&_ZN7S1367C33v29Ev,
  (VTBL_ENTRY)&_ZN7S1367C33v30Ev,
  (VTBL_ENTRY)&_ZN7S1367C33v31Ev,
  (VTBL_ENTRY)&_ZN7S1367C33v32Ev,
};
extern VTBL_ENTRY _ZTI7S1367C3[];
extern  VTBL_ENTRY _ZTV7S1367C3[];
Class_Descriptor cd_S1367C3 = {  "S1367C3", // class name
  bases_S1367C3, 1,
  &(vtc_S1367C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(280,212), // object size
  NSPAIRA(_ZTI7S1367C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1367C3),34, //virtual function table var
  2, // 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  S1367C2  : S1367C3 {
  int s1367c2f0;
  virtual  ~S1367C2(); // _ZN7S1367C2D1Ev
  virtual void  v33(); // _ZN7S1367C23v33Ev
  virtual void  v34(); // _ZN7S1367C23v34Ev
  virtual void  v35(); // _ZN7S1367C23v35Ev
  S1367C2(); // tgen
};
//SIG(-1 S1367C2) C1{ BC2{ BC3{ vd v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 FC4{ m FC5{ m FL[2]}} FC4 Fp Fi FU6{ m FC7{ Fi:4 Fi:4 Fi:4 Fi:2 Fi:1 Fi:17} Fi} Fi:2 Fi:2 Fc:1 Fc:1 FC8{ m Fp Fp} FC9{ Fp Fp}[2]} vd v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc Fi[2] Fi[2] Fp FC4 FC4 FC4 FC10{ m FC4 FC4} Fp Fi Fi FC11{ m Fp}[4] Fp} vd v1 v2 v3 Fi}


 S1367C2 ::~S1367C2(){ note_dtor("S1367C2", this);}
void  S1367C2 ::v33(){vfunc_called(this, "_ZN7S1367C23v33Ev");}
void  S1367C2 ::v34(){vfunc_called(this, "_ZN7S1367C23v34Ev");}
void  S1367C2 ::v35(){vfunc_called(this, "_ZN7S1367C23v35Ev");}
S1367C2 ::S1367C2(){ note_ctor("S1367C2", this);} // tgen

static void Test_S1367C2()
{
  extern Class_Descriptor cd_S1367C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(37,55)];
    init_test(&cd_S1367C2, buf);
    S1367C2 *dp, &lv = *(dp=new (buf) S1367C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(288,216), "sizeof(S1367C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1367C2)");
    check_base_class_offset(lv, (S1367C4*)(S1367C3*), 0, "S1367C2");
    check_base_class_offset(lv, (S1367C3*), 0, "S1367C2");
    check_field_offset(lv, s1367c2f0, ABISELECT(280,212), "S1367C2.s1367c2f0");
    test_class_info(&lv, &cd_S1367C2);
    dp->~S1367C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1367C2(Test_S1367C2, "S1367C2", ABISELECT(288,216));

#else // __cplusplus

extern void _ZN7S1367C2C1Ev();
extern void _ZN7S1367C2D1Ev();
Name_Map name_map_S1367C2[] = {
  NSPAIR(_ZN7S1367C2C1Ev),
  NSPAIR(_ZN7S1367C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1367C4;
extern VTBL_ENTRY _ZTI7S1367C4[];
extern  VTBL_ENTRY _ZTV7S1367C4[];
extern Class_Descriptor cd_S1367C3;
extern VTBL_ENTRY _ZTI7S1367C3[];
extern  VTBL_ENTRY _ZTV7S1367C3[];
static Base_Class bases_S1367C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1367C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1367C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S1367C2[];
extern void _ZN7S1367C2D1Ev();
extern void _ZN7S1367C2D0Ev();
extern void _ZN7S1367C42v3Ev();
extern void _ZN7S1367C42v4Ev();
extern void _ZN7S1367C42v5Ev();
extern void _ZN7S1367C42v6Ev();
extern void _ZN7S1367C42v7Ev();
extern void _ZN7S1367C42v8Ev();
extern void _ZN7S1367C42v9Ev();
extern void _ZN7S1367C43v10Ev();
extern void _ZN7S1367C43v11Ev();
extern void _ZN7S1367C43v12Ev();
extern void _ZN7S1367C43v13Ev();
extern void _ZN7S1367C43v14Ev();
extern void _ZN7S1367C43v15Ev();
extern void _ZN7S1367C43v16Ev();
extern void _ZN7S1367C43v17Ev();
extern void _ZN7S1367C33v18Ev();
extern void _ZN7S1367C33v19Ev();
extern void _ZN7S1367C33v20Ev();
extern void _ZN7S1367C33v21Ev();
extern void _ZN7S1367C33v22Ev();
extern void _ZN7S1367C33v23Ev();
extern void _ZN7S1367C33v24Ev();
extern void _ZN7S1367C33v25Ev();
extern void _ZN7S1367C33v26Ev();
extern void _ZN7S1367C33v27Ev();
extern void _ZN7S1367C33v28Ev();
extern void _ZN7S1367C33v29Ev();
extern void _ZN7S1367C33v30Ev();
extern void _ZN7S1367C33v31Ev();
extern void _ZN7S1367C33v32Ev();
extern void _ZN7S1367C23v33Ev();
extern void _ZN7S1367C23v34Ev();
extern void _ZN7S1367C23v35Ev();
static  VTBL_ENTRY vtc_S1367C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1367C2[0]),
  (VTBL_ENTRY)&_ZN7S1367C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1367C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1367C42v3Ev,
  (VTBL_ENTRY)&_ZN7S1367C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1367C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1367C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1367C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1367C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1367C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1367C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1367C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1367C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1367C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1367C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1367C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1367C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1367C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1367C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1367C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1367C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1367C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1367C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1367C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1367C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1367C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1367C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1367C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1367C33v28Ev,
  (VTBL_ENTRY)&_ZN7S1367C33v29Ev,
  (VTBL_ENTRY)&_ZN7S1367C33v30Ev,
  (VTBL_ENTRY)&_ZN7S1367C33v31Ev,
  (VTBL_ENTRY)&_ZN7S1367C33v32Ev,
  (VTBL_ENTRY)&_ZN7S1367C23v33Ev,
  (VTBL_ENTRY)&_ZN7S1367C23v34Ev,
  (VTBL_ENTRY)&_ZN7S1367C23v35Ev,
};
extern VTBL_ENTRY _ZTI7S1367C2[];
extern  VTBL_ENTRY _ZTV7S1367C2[];
Class_Descriptor cd_S1367C2 = {  "S1367C2", // class name
  bases_S1367C2, 2,
  &(vtc_S1367C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(288,216), // object size
  NSPAIRA(_ZTI7S1367C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1367C2),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1367C1  : S1367C2 {
  virtual  ~S1367C1(); // _ZN7S1367C1D1Ev
  virtual void  v1(); // _ZN7S1367C12v1Ev
  virtual void  v2(); // _ZN7S1367C12v2Ev
  S1367C1(); // tgen
};
//SIG(1 S1367C1) C1{ BC2{ BC3{ BC4{ vd v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 FC5{ m FC6{ m FL[2]}} FC5 Fp Fi FU7{ m FC8{ Fi:4 Fi:4 Fi:4 Fi:2 Fi:1 Fi:17} Fi} Fi:2 Fi:2 Fc:1 Fc:1 FC9{ m Fp Fp} FC10{ Fp Fp}[2]} vd v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc Fi[2] Fi[2] Fp FC5 FC5 FC5 FC11{ m FC5 FC5} Fp Fi Fi FC12{ m Fp}[4] Fp} vd v33 v34 v35 Fi} vd v1 v2}


 S1367C1 ::~S1367C1(){ note_dtor("S1367C1", this);}
void  S1367C1 ::v1(){vfunc_called(this, "_ZN7S1367C12v1Ev");}
void  S1367C1 ::v2(){vfunc_called(this, "_ZN7S1367C12v2Ev");}
S1367C1 ::S1367C1(){ note_ctor("S1367C1", this);} // tgen

static void Test_S1367C1()
{
  extern Class_Descriptor cd_S1367C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(37,55)];
    init_test(&cd_S1367C1, buf);
    S1367C1 *dp, &lv = *(dp=new (buf) S1367C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(288,216), "sizeof(S1367C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1367C1)");
    check_base_class_offset(lv, (S1367C4*)(S1367C3*)(S1367C2*), 0, "S1367C1");
    check_base_class_offset(lv, (S1367C3*)(S1367C2*), 0, "S1367C1");
    check_base_class_offset(lv, (S1367C2*), 0, "S1367C1");
    test_class_info(&lv, &cd_S1367C1);
    dp->~S1367C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1367C1(Test_S1367C1, "S1367C1", ABISELECT(288,216));

#else // __cplusplus

extern void _ZN7S1367C1C1Ev();
extern void _ZN7S1367C1D1Ev();
Name_Map name_map_S1367C1[] = {
  NSPAIR(_ZN7S1367C1C1Ev),
  NSPAIR(_ZN7S1367C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1367C4;
extern VTBL_ENTRY _ZTI7S1367C4[];
extern  VTBL_ENTRY _ZTV7S1367C4[];
extern Class_Descriptor cd_S1367C3;
extern VTBL_ENTRY _ZTI7S1367C3[];
extern  VTBL_ENTRY _ZTV7S1367C3[];
extern Class_Descriptor cd_S1367C2;
extern VTBL_ENTRY _ZTI7S1367C2[];
extern  VTBL_ENTRY _ZTV7S1367C2[];
static Base_Class bases_S1367C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1367C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1367C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S1367C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S1367C1[];
extern void _ZN7S1367C1D1Ev();
extern void _ZN7S1367C1D0Ev();
extern void _ZN7S1367C42v3Ev();
extern void _ZN7S1367C42v4Ev();
extern void _ZN7S1367C42v5Ev();
extern void _ZN7S1367C42v6Ev();
extern void _ZN7S1367C42v7Ev();
extern void _ZN7S1367C42v8Ev();
extern void _ZN7S1367C42v9Ev();
extern void _ZN7S1367C43v10Ev();
extern void _ZN7S1367C43v11Ev();
extern void _ZN7S1367C43v12Ev();
extern void _ZN7S1367C43v13Ev();
extern void _ZN7S1367C43v14Ev();
extern void _ZN7S1367C43v15Ev();
extern void _ZN7S1367C43v16Ev();
extern void _ZN7S1367C43v17Ev();
extern void _ZN7S1367C33v18Ev();
extern void _ZN7S1367C33v19Ev();
extern void _ZN7S1367C33v20Ev();
extern void _ZN7S1367C33v21Ev();
extern void _ZN7S1367C33v22Ev();
extern void _ZN7S1367C33v23Ev();
extern void _ZN7S1367C33v24Ev();
extern void _ZN7S1367C33v25Ev();
extern void _ZN7S1367C33v26Ev();
extern void _ZN7S1367C33v27Ev();
extern void _ZN7S1367C33v28Ev();
extern void _ZN7S1367C33v29Ev();
extern void _ZN7S1367C33v30Ev();
extern void _ZN7S1367C33v31Ev();
extern void _ZN7S1367C33v32Ev();
extern void _ZN7S1367C23v33Ev();
extern void _ZN7S1367C23v34Ev();
extern void _ZN7S1367C23v35Ev();
extern void _ZN7S1367C12v1Ev();
extern void _ZN7S1367C12v2Ev();
static  VTBL_ENTRY vtc_S1367C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1367C1[0]),
  (VTBL_ENTRY)&_ZN7S1367C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1367C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1367C42v3Ev,
  (VTBL_ENTRY)&_ZN7S1367C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1367C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1367C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1367C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1367C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1367C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1367C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1367C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1367C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1367C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1367C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1367C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1367C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1367C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1367C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1367C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1367C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1367C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1367C33v22Ev,
  (VTBL_ENTRY)&_ZN7S1367C33v23Ev,
  (VTBL_ENTRY)&_ZN7S1367C33v24Ev,
  (VTBL_ENTRY)&_ZN7S1367C33v25Ev,
  (VTBL_ENTRY)&_ZN7S1367C33v26Ev,
  (VTBL_ENTRY)&_ZN7S1367C33v27Ev,
  (VTBL_ENTRY)&_ZN7S1367C33v28Ev,
  (VTBL_ENTRY)&_ZN7S1367C33v29Ev,
  (VTBL_ENTRY)&_ZN7S1367C33v30Ev,
  (VTBL_ENTRY)&_ZN7S1367C33v31Ev,
  (VTBL_ENTRY)&_ZN7S1367C33v32Ev,
  (VTBL_ENTRY)&_ZN7S1367C23v33Ev,
  (VTBL_ENTRY)&_ZN7S1367C23v34Ev,
  (VTBL_ENTRY)&_ZN7S1367C23v35Ev,
  (VTBL_ENTRY)&_ZN7S1367C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1367C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S1367C1[];
extern  VTBL_ENTRY _ZTV7S1367C1[];
Class_Descriptor cd_S1367C1 = {  "S1367C1", // class name
  bases_S1367C1, 3,
  &(vtc_S1367C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(288,216), // object size
  NSPAIRA(_ZTI7S1367C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1367C1),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3279C3  {
  ::S2120C13_nt s3279c3f0;
  ::S2120C13_nt s3279c3f1;
  void *s3279c3f2;
  int s3279c3f3;
  ::S601C8 s3279c3f4;
  int s3279c3f5:2;
  int s3279c3f6:2;
  unsigned char s3279c3f7:1;
  unsigned char s3279c3f8:1;
  ::S601C53 s3279c3f9;
  ::S601C11 s3279c3f10[2];
  virtual  ~S3279C3(); // _ZN7S3279C3D1Ev
  virtual void  v5(); // _ZN7S3279C32v5Ev
  virtual void  v6(); // _ZN7S3279C32v6Ev
  virtual void  v7(); // _ZN7S3279C32v7Ev
  virtual void  v8(); // _ZN7S3279C32v8Ev
  virtual void  v9(); // _ZN7S3279C32v9Ev
  virtual void  v10(); // _ZN7S3279C33v10Ev
  virtual void  v11(); // _ZN7S3279C33v11Ev
  virtual void  v12(); // _ZN7S3279C33v12Ev
  virtual void  v13(); // _ZN7S3279C33v13Ev
  virtual void  v14(); // _ZN7S3279C33v14Ev
  virtual void  v15(); // _ZN7S3279C33v15Ev
  virtual void  v16(); // _ZN7S3279C33v16Ev
  virtual void  v17(); // _ZN7S3279C33v17Ev
  virtual void  v18(); // _ZN7S3279C33v18Ev
  virtual void  v19(); // _ZN7S3279C33v19Ev
  S3279C3(); // tgen
};
//SIG(-1 S3279C3) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 FC2{ m FC3{ m FL[2]}} FC2 Fp Fi FU4{ m FC5{ Fi:4 Fi:4 Fi:4 Fi:2 Fi:1 Fi:17} Fi} Fi:2 Fi:2 Fc:1 Fc:1 FC6{ m Fp Fp} FC7{ Fp Fp}[2]}


 S3279C3 ::~S3279C3(){ note_dtor("S3279C3", this);}
void  S3279C3 ::v5(){vfunc_called(this, "_ZN7S3279C32v5Ev");}
void  S3279C3 ::v6(){vfunc_called(this, "_ZN7S3279C32v6Ev");}
void  S3279C3 ::v7(){vfunc_called(this, "_ZN7S3279C32v7Ev");}
void  S3279C3 ::v8(){vfunc_called(this, "_ZN7S3279C32v8Ev");}
void  S3279C3 ::v9(){vfunc_called(this, "_ZN7S3279C32v9Ev");}
void  S3279C3 ::v10(){vfunc_called(this, "_ZN7S3279C33v10Ev");}
void  S3279C3 ::v11(){vfunc_called(this, "_ZN7S3279C33v11Ev");}
void  S3279C3 ::v12(){vfunc_called(this, "_ZN7S3279C33v12Ev");}
void  S3279C3 ::v13(){vfunc_called(this, "_ZN7S3279C33v13Ev");}
void  S3279C3 ::v14(){vfunc_called(this, "_ZN7S3279C33v14Ev");}
void  S3279C3 ::v15(){vfunc_called(this, "_ZN7S3279C33v15Ev");}
void  S3279C3 ::v16(){vfunc_called(this, "_ZN7S3279C33v16Ev");}
void  S3279C3 ::v17(){vfunc_called(this, "_ZN7S3279C33v17Ev");}
void  S3279C3 ::v18(){vfunc_called(this, "_ZN7S3279C33v18Ev");}
void  S3279C3 ::v19(){vfunc_called(this, "_ZN7S3279C33v19Ev");}
S3279C3 ::S3279C3(){ note_ctor("S3279C3", this);} // tgen

static void Test_S3279C3()
{
  extern Class_Descriptor cd_S3279C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,20)];
    init_test(&cd_S3279C3, buf);
    S3279C3 *dp, &lv = *(dp=new (buf) S3279C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,76), "sizeof(S3279C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3279C3)");
    check_field_offset(lv, s3279c3f0, ABISELECT(8,4), "S3279C3.s3279c3f0");
    check_field_offset(lv, s3279c3f1, ABISELECT(24,20), "S3279C3.s3279c3f1");
    check_field_offset(lv, s3279c3f2, ABISELECT(40,36), "S3279C3.s3279c3f2");
    check_field_offset(lv, s3279c3f3, ABISELECT(48,40), "S3279C3.s3279c3f3");
    check_field_offset(lv, s3279c3f4, ABISELECT(52,44), "S3279C3.s3279c3f4");
    set_bf_and_test(lv, s3279c3f5, ABISELECT(56,48), 0, 2, 1, "S3279C3");
    set_bf_and_test(lv, s3279c3f5, ABISELECT(56,48), 0, 2, hide_sll(1LL<<1), "S3279C3");
    set_bf_and_test(lv, s3279c3f6, ABISELECT(56,48), 2, 2, 1, "S3279C3");
    set_bf_and_test(lv, s3279c3f6, ABISELECT(56,48), 2, 2, hide_sll(1LL<<1), "S3279C3");
    set_bf_and_test(lv, s3279c3f7, ABISELECT(56,48), 4, 1, 1, "S3279C3");
    set_bf_and_test(lv, s3279c3f8, ABISELECT(56,48), 5, 1, 1, "S3279C3");
    check_field_offset(lv, s3279c3f9, ABISELECT(64,52), "S3279C3.s3279c3f9");
    check_field_offset(lv, s3279c3f10, ABISELECT(80,60), "S3279C3.s3279c3f10");
    test_class_info(&lv, &cd_S3279C3);
    dp->~S3279C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3279C3(Test_S3279C3, "S3279C3", ABISELECT(112,76));

#else // __cplusplus

extern void _ZN7S3279C3C1Ev();
extern void _ZN7S3279C3D1Ev();
Name_Map name_map_S3279C3[] = {
  NSPAIR(_ZN7S3279C3C1Ev),
  NSPAIR(_ZN7S3279C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3279C3[];
extern void _ZN7S3279C3D1Ev();
extern void _ZN7S3279C3D0Ev();
extern void _ZN7S3279C32v5Ev();
extern void _ZN7S3279C32v6Ev();
extern void _ZN7S3279C32v7Ev();
extern void _ZN7S3279C32v8Ev();
extern void _ZN7S3279C32v9Ev();
extern void _ZN7S3279C33v10Ev();
extern void _ZN7S3279C33v11Ev();
extern void _ZN7S3279C33v12Ev();
extern void _ZN7S3279C33v13Ev();
extern void _ZN7S3279C33v14Ev();
extern void _ZN7S3279C33v15Ev();
extern void _ZN7S3279C33v16Ev();
extern void _ZN7S3279C33v17Ev();
extern void _ZN7S3279C33v18Ev();
extern void _ZN7S3279C33v19Ev();
static  VTBL_ENTRY vtc_S3279C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3279C3[0]),
  (VTBL_ENTRY)&_ZN7S3279C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3279C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3279C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3279C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3279C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3279C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3279C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3279C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3279C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3279C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3279C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3279C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3279C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3279C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3279C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3279C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3279C33v19Ev,
};
extern VTBL_ENTRY _ZTI7S3279C3[];
extern  VTBL_ENTRY _ZTV7S3279C3[];
Class_Descriptor cd_S3279C3 = {  "S3279C3", // class name
  0,0,//no base classes
  &(vtc_S3279C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,76), // object size
  NSPAIRA(_ZTI7S3279C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3279C3),19, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3279C2  : S3279C3 {
  unsigned char s3279c2f0:1;
  unsigned char s3279c2f1:1;
  unsigned char s3279c2f2:1;
  unsigned char s3279c2f3:1;
  unsigned char s3279c2f4:1;
  unsigned char s3279c2f5:1;
  unsigned char s3279c2f6:1;
  char s3279c2f7;
  int s3279c2f8[2];
  int s3279c2f9[2];
  void *s3279c2f10;
  ::S2120C13_nt s3279c2f11;
  ::S2120C13_nt s3279c2f12;
  ::S2120C13_nt s3279c2f13;
  ::S601C12 s3279c2f14;
  void *s3279c2f15;
  int s3279c2f16;
  int s3279c2f17;
  ::S601C13_nt s3279c2f18[4];
  void *s3279c2f19;
  virtual  ~S3279C2(); // _ZN7S3279C2D1Ev
  virtual void  v20(); // _ZN7S3279C23v20Ev
  virtual void  v21(); // _ZN7S3279C23v21Ev
  virtual void  v22(); // _ZN7S3279C23v22Ev
  virtual void  v23(); // _ZN7S3279C23v23Ev
  virtual void  v24(); // _ZN7S3279C23v24Ev
  virtual void  v25(); // _ZN7S3279C23v25Ev
  virtual void  v26(); // _ZN7S3279C23v26Ev
  virtual void  v27(); // _ZN7S3279C23v27Ev
  virtual void  v28(); // _ZN7S3279C23v28Ev
  virtual void  v29(); // _ZN7S3279C23v29Ev
  virtual void  v30(); // _ZN7S3279C23v30Ev
  virtual void  v31(); // _ZN7S3279C23v31Ev
  virtual void  v32(); // _ZN7S3279C23v32Ev
  virtual void  v33(); // _ZN7S3279C23v33Ev
  virtual void  v34(); // _ZN7S3279C23v34Ev
  S3279C2(); // tgen
};
//SIG(-1 S3279C2) C1{ BC2{ vd v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 FC3{ m FC4{ m FL[2]}} FC3 Fp Fi FU5{ m FC6{ Fi:4 Fi:4 Fi:4 Fi:2 Fi:1 Fi:17} Fi} Fi:2 Fi:2 Fc:1 Fc:1 FC7{ m Fp Fp} FC8{ Fp Fp}[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc Fi[2] Fi[2] Fp FC3 FC3 FC3 FC9{ m FC3 FC3} Fp Fi Fi FC10{ m Fp}[4] Fp}


 S3279C2 ::~S3279C2(){ note_dtor("S3279C2", this);}
void  S3279C2 ::v20(){vfunc_called(this, "_ZN7S3279C23v20Ev");}
void  S3279C2 ::v21(){vfunc_called(this, "_ZN7S3279C23v21Ev");}
void  S3279C2 ::v22(){vfunc_called(this, "_ZN7S3279C23v22Ev");}
void  S3279C2 ::v23(){vfunc_called(this, "_ZN7S3279C23v23Ev");}
void  S3279C2 ::v24(){vfunc_called(this, "_ZN7S3279C23v24Ev");}
void  S3279C2 ::v25(){vfunc_called(this, "_ZN7S3279C23v25Ev");}
void  S3279C2 ::v26(){vfunc_called(this, "_ZN7S3279C23v26Ev");}
void  S3279C2 ::v27(){vfunc_called(this, "_ZN7S3279C23v27Ev");}
void  S3279C2 ::v28(){vfunc_called(this, "_ZN7S3279C23v28Ev");}
void  S3279C2 ::v29(){vfunc_called(this, "_ZN7S3279C23v29Ev");}
void  S3279C2 ::v30(){vfunc_called(this, "_ZN7S3279C23v30Ev");}
void  S3279C2 ::v31(){vfunc_called(this, "_ZN7S3279C23v31Ev");}
void  S3279C2 ::v32(){vfunc_called(this, "_ZN7S3279C23v32Ev");}
void  S3279C2 ::v33(){vfunc_called(this, "_ZN7S3279C23v33Ev");}
void  S3279C2 ::v34(){vfunc_called(this, "_ZN7S3279C23v34Ev");}
S3279C2 ::S3279C2(){ note_ctor("S3279C2", this);} // tgen

static void Test_S3279C2()
{
  extern Class_Descriptor cd_S3279C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(36,54)];
    init_test(&cd_S3279C2, buf);
    S3279C2 *dp, &lv = *(dp=new (buf) S3279C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(280,212), "sizeof(S3279C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3279C2)");
    check_base_class_offset(lv, (S3279C3*), 0, "S3279C2");
    set_bf_and_test(lv, s3279c2f0, ABISELECT(112,76), 0, 1, 1, "S3279C2");
    set_bf_and_test(lv, s3279c2f1, ABISELECT(112,76), 1, 1, 1, "S3279C2");
    set_bf_and_test(lv, s3279c2f2, ABISELECT(112,76), 2, 1, 1, "S3279C2");
    set_bf_and_test(lv, s3279c2f3, ABISELECT(112,76), 3, 1, 1, "S3279C2");
    set_bf_and_test(lv, s3279c2f4, ABISELECT(112,76), 4, 1, 1, "S3279C2");
    set_bf_and_test(lv, s3279c2f5, ABISELECT(112,76), 5, 1, 1, "S3279C2");
    set_bf_and_test(lv, s3279c2f6, ABISELECT(112,76), 6, 1, 1, "S3279C2");
    check_field_offset(lv, s3279c2f7, ABISELECT(113,77), "S3279C2.s3279c2f7");
    check_field_offset(lv, s3279c2f8, ABISELECT(116,80), "S3279C2.s3279c2f8");
    check_field_offset(lv, s3279c2f9, ABISELECT(124,88), "S3279C2.s3279c2f9");
    check_field_offset(lv, s3279c2f10, ABISELECT(136,96), "S3279C2.s3279c2f10");
    check_field_offset(lv, s3279c2f11, ABISELECT(144,100), "S3279C2.s3279c2f11");
    check_field_offset(lv, s3279c2f12, ABISELECT(160,116), "S3279C2.s3279c2f12");
    check_field_offset(lv, s3279c2f13, ABISELECT(176,132), "S3279C2.s3279c2f13");
    check_field_offset(lv, s3279c2f14, ABISELECT(192,148), "S3279C2.s3279c2f14");
    check_field_offset(lv, s3279c2f15, ABISELECT(224,180), "S3279C2.s3279c2f15");
    check_field_offset(lv, s3279c2f16, ABISELECT(232,184), "S3279C2.s3279c2f16");
    check_field_offset(lv, s3279c2f17, ABISELECT(236,188), "S3279C2.s3279c2f17");
    check_field_offset(lv, s3279c2f18, ABISELECT(240,192), "S3279C2.s3279c2f18");
    check_field_offset(lv, s3279c2f19, ABISELECT(272,208), "S3279C2.s3279c2f19");
    test_class_info(&lv, &cd_S3279C2);
    dp->~S3279C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3279C2(Test_S3279C2, "S3279C2", ABISELECT(280,212));

#else // __cplusplus

extern void _ZN7S3279C2C1Ev();
extern void _ZN7S3279C2D1Ev();
Name_Map name_map_S3279C2[] = {
  NSPAIR(_ZN7S3279C2C1Ev),
  NSPAIR(_ZN7S3279C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3279C3;
extern VTBL_ENTRY _ZTI7S3279C3[];
extern  VTBL_ENTRY _ZTV7S3279C3[];
static Base_Class bases_S3279C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3279C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3279C2[];
extern void _ZN7S3279C2D1Ev();
extern void _ZN7S3279C2D0Ev();
extern void _ZN7S3279C32v5Ev();
extern void _ZN7S3279C32v6Ev();
extern void _ZN7S3279C32v7Ev();
extern void _ZN7S3279C32v8Ev();
extern void _ZN7S3279C32v9Ev();
extern void _ZN7S3279C33v10Ev();
extern void _ZN7S3279C33v11Ev();
extern void _ZN7S3279C33v12Ev();
extern void _ZN7S3279C33v13Ev();
extern void _ZN7S3279C33v14Ev();
extern void _ZN7S3279C33v15Ev();
extern void _ZN7S3279C33v16Ev();
extern void _ZN7S3279C33v17Ev();
extern void _ZN7S3279C33v18Ev();
extern void _ZN7S3279C33v19Ev();
extern void _ZN7S3279C23v20Ev();
extern void _ZN7S3279C23v21Ev();
extern void _ZN7S3279C23v22Ev();
extern void _ZN7S3279C23v23Ev();
extern void _ZN7S3279C23v24Ev();
extern void _ZN7S3279C23v25Ev();
extern void _ZN7S3279C23v26Ev();
extern void _ZN7S3279C23v27Ev();
extern void _ZN7S3279C23v28Ev();
extern void _ZN7S3279C23v29Ev();
extern void _ZN7S3279C23v30Ev();
extern void _ZN7S3279C23v31Ev();
extern void _ZN7S3279C23v32Ev();
extern void _ZN7S3279C23v33Ev();
extern void _ZN7S3279C23v34Ev();
static  VTBL_ENTRY vtc_S3279C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3279C2[0]),
  (VTBL_ENTRY)&_ZN7S3279C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3279C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3279C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3279C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3279C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3279C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3279C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3279C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3279C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3279C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3279C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3279C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3279C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3279C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3279C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3279C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3279C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3279C23v20Ev,
  (VTBL_ENTRY)&_ZN7S3279C23v21Ev,
  (VTBL_ENTRY)&_ZN7S3279C23v22Ev,
  (VTBL_ENTRY)&_ZN7S3279C23v23Ev,
  (VTBL_ENTRY)&_ZN7S3279C23v24Ev,
  (VTBL_ENTRY)&_ZN7S3279C23v25Ev,
  (VTBL_ENTRY)&_ZN7S3279C23v26Ev,
  (VTBL_ENTRY)&_ZN7S3279C23v27Ev,
  (VTBL_ENTRY)&_ZN7S3279C23v28Ev,
  (VTBL_ENTRY)&_ZN7S3279C23v29Ev,
  (VTBL_ENTRY)&_ZN7S3279C23v30Ev,
  (VTBL_ENTRY)&_ZN7S3279C23v31Ev,
  (VTBL_ENTRY)&_ZN7S3279C23v32Ev,
  (VTBL_ENTRY)&_ZN7S3279C23v33Ev,
  (VTBL_ENTRY)&_ZN7S3279C23v34Ev,
};
extern VTBL_ENTRY _ZTI7S3279C2[];
extern  VTBL_ENTRY _ZTV7S3279C2[];
Class_Descriptor cd_S3279C2 = {  "S3279C2", // class name
  bases_S3279C2, 1,
  &(vtc_S3279C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(280,212), // object size
  NSPAIRA(_ZTI7S3279C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3279C2),34, //virtual function table var
  2, // 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  S3279C1  : S3279C2 {
  void *s3279c1f0;
  virtual  ~S3279C1(); // _ZN7S3279C1D1Ev
  virtual void  v1(); // _ZN7S3279C12v1Ev
  virtual void  v2(); // _ZN7S3279C12v2Ev
  virtual void  v3(); // _ZN7S3279C12v3Ev
  virtual void  v4(); // _ZN7S3279C12v4Ev
  S3279C1(); // tgen
};
//SIG(1 S3279C1) C1{ BC2{ BC3{ vd v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 FC4{ m FC5{ m FL[2]}} FC4 Fp Fi FU6{ m FC7{ Fi:4 Fi:4 Fi:4 Fi:2 Fi:1 Fi:17} Fi} Fi:2 Fi:2 Fc:1 Fc:1 FC8{ m Fp Fp} FC9{ Fp Fp}[2]} vd v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc Fi[2] Fi[2] Fp FC4 FC4 FC4 FC10{ m FC4 FC4} Fp Fi Fi FC11{ m Fp}[4] Fp} vd v1 v2 v3 v4 Fp}


 S3279C1 ::~S3279C1(){ note_dtor("S3279C1", this);}
void  S3279C1 ::v1(){vfunc_called(this, "_ZN7S3279C12v1Ev");}
void  S3279C1 ::v2(){vfunc_called(this, "_ZN7S3279C12v2Ev");}
void  S3279C1 ::v3(){vfunc_called(this, "_ZN7S3279C12v3Ev");}
void  S3279C1 ::v4(){vfunc_called(this, "_ZN7S3279C12v4Ev");}
S3279C1 ::S3279C1(){ note_ctor("S3279C1", this);} // tgen

static void Test_S3279C1()
{
  extern Class_Descriptor cd_S3279C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(37,55)];
    init_test(&cd_S3279C1, buf);
    S3279C1 *dp, &lv = *(dp=new (buf) S3279C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(288,216), "sizeof(S3279C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3279C1)");
    check_base_class_offset(lv, (S3279C3*)(S3279C2*), 0, "S3279C1");
    check_base_class_offset(lv, (S3279C2*), 0, "S3279C1");
    check_field_offset(lv, s3279c1f0, ABISELECT(280,212), "S3279C1.s3279c1f0");
    test_class_info(&lv, &cd_S3279C1);
    dp->~S3279C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3279C1(Test_S3279C1, "S3279C1", ABISELECT(288,216));

#else // __cplusplus

extern void _ZN7S3279C1C1Ev();
extern void _ZN7S3279C1D1Ev();
Name_Map name_map_S3279C1[] = {
  NSPAIR(_ZN7S3279C1C1Ev),
  NSPAIR(_ZN7S3279C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3279C3;
extern VTBL_ENTRY _ZTI7S3279C3[];
extern  VTBL_ENTRY _ZTV7S3279C3[];
extern Class_Descriptor cd_S3279C2;
extern VTBL_ENTRY _ZTI7S3279C2[];
extern  VTBL_ENTRY _ZTV7S3279C2[];
static Base_Class bases_S3279C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3279C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3279C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S3279C1[];
extern void _ZN7S3279C1D1Ev();
extern void _ZN7S3279C1D0Ev();
extern void _ZN7S3279C32v5Ev();
extern void _ZN7S3279C32v6Ev();
extern void _ZN7S3279C32v7Ev();
extern void _ZN7S3279C32v8Ev();
extern void _ZN7S3279C32v9Ev();
extern void _ZN7S3279C33v10Ev();
extern void _ZN7S3279C33v11Ev();
extern void _ZN7S3279C33v12Ev();
extern void _ZN7S3279C33v13Ev();
extern void _ZN7S3279C33v14Ev();
extern void _ZN7S3279C33v15Ev();
extern void _ZN7S3279C33v16Ev();
extern void _ZN7S3279C33v17Ev();
extern void _ZN7S3279C33v18Ev();
extern void _ZN7S3279C33v19Ev();
extern void _ZN7S3279C23v20Ev();
extern void _ZN7S3279C23v21Ev();
extern void _ZN7S3279C23v22Ev();
extern void _ZN7S3279C23v23Ev();
extern void _ZN7S3279C23v24Ev();
extern void _ZN7S3279C23v25Ev();
extern void _ZN7S3279C23v26Ev();
extern void _ZN7S3279C23v27Ev();
extern void _ZN7S3279C23v28Ev();
extern void _ZN7S3279C23v29Ev();
extern void _ZN7S3279C23v30Ev();
extern void _ZN7S3279C23v31Ev();
extern void _ZN7S3279C23v32Ev();
extern void _ZN7S3279C23v33Ev();
extern void _ZN7S3279C23v34Ev();
extern void _ZN7S3279C12v1Ev();
extern void _ZN7S3279C12v2Ev();
extern void _ZN7S3279C12v3Ev();
extern void _ZN7S3279C12v4Ev();
static  VTBL_ENTRY vtc_S3279C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3279C1[0]),
  (VTBL_ENTRY)&_ZN7S3279C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3279C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3279C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3279C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3279C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3279C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3279C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3279C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3279C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3279C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3279C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3279C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3279C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3279C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3279C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3279C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3279C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3279C23v20Ev,
  (VTBL_ENTRY)&_ZN7S3279C23v21Ev,
  (VTBL_ENTRY)&_ZN7S3279C23v22Ev,
  (VTBL_ENTRY)&_ZN7S3279C23v23Ev,
  (VTBL_ENTRY)&_ZN7S3279C23v24Ev,
  (VTBL_ENTRY)&_ZN7S3279C23v25Ev,
  (VTBL_ENTRY)&_ZN7S3279C23v26Ev,
  (VTBL_ENTRY)&_ZN7S3279C23v27Ev,
  (VTBL_ENTRY)&_ZN7S3279C23v28Ev,
  (VTBL_ENTRY)&_ZN7S3279C23v29Ev,
  (VTBL_ENTRY)&_ZN7S3279C23v30Ev,
  (VTBL_ENTRY)&_ZN7S3279C23v31Ev,
  (VTBL_ENTRY)&_ZN7S3279C23v32Ev,
  (VTBL_ENTRY)&_ZN7S3279C23v33Ev,
  (VTBL_ENTRY)&_ZN7S3279C23v34Ev,
  (VTBL_ENTRY)&_ZN7S3279C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3279C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3279C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3279C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S3279C1[];
extern  VTBL_ENTRY _ZTV7S3279C1[];
Class_Descriptor cd_S3279C1 = {  "S3279C1", // class name
  bases_S3279C1, 2,
  &(vtc_S3279C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(288,216), // object size
  NSPAIRA(_ZTI7S3279C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3279C1),38, //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  S3208C3  {
  ::S2120C13_nt s3208c3f0;
  ::S2120C13_nt s3208c3f1;
  void *s3208c3f2;
  int s3208c3f3;
  ::S601C8 s3208c3f4;
  int s3208c3f5:2;
  int s3208c3f6:2;
  unsigned char s3208c3f7:1;
  unsigned char s3208c3f8:1;
  ::S601C53 s3208c3f9;
  ::S601C11 s3208c3f10[2];
  virtual  ~S3208C3(); // _ZN7S3208C3D1Ev
  virtual void  v4(); // _ZN7S3208C32v4Ev
  virtual void  v5(); // _ZN7S3208C32v5Ev
  virtual void  v6(); // _ZN7S3208C32v6Ev
  virtual void  v7(); // _ZN7S3208C32v7Ev
  virtual void  v8(); // _ZN7S3208C32v8Ev
  virtual void  v9(); // _ZN7S3208C32v9Ev
  virtual void  v10(); // _ZN7S3208C33v10Ev
  virtual void  v11(); // _ZN7S3208C33v11Ev
  virtual void  v12(); // _ZN7S3208C33v12Ev
  virtual void  v13(); // _ZN7S3208C33v13Ev
  virtual void  v14(); // _ZN7S3208C33v14Ev
  virtual void  v15(); // _ZN7S3208C33v15Ev
  virtual void  v16(); // _ZN7S3208C33v16Ev
  virtual void  v17(); // _ZN7S3208C33v17Ev
  virtual void  v18(); // _ZN7S3208C33v18Ev
  S3208C3(); // tgen
};
//SIG(-1 S3208C3) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 FC2{ m FC3{ m FL[2]}} FC2 Fp Fi FU4{ m FC5{ Fi:4 Fi:4 Fi:4 Fi:2 Fi:1 Fi:17} Fi} Fi:2 Fi:2 Fc:1 Fc:1 FC6{ m Fp Fp} FC7{ Fp Fp}[2]}


 S3208C3 ::~S3208C3(){ note_dtor("S3208C3", this);}
void  S3208C3 ::v4(){vfunc_called(this, "_ZN7S3208C32v4Ev");}
void  S3208C3 ::v5(){vfunc_called(this, "_ZN7S3208C32v5Ev");}
void  S3208C3 ::v6(){vfunc_called(this, "_ZN7S3208C32v6Ev");}
void  S3208C3 ::v7(){vfunc_called(this, "_ZN7S3208C32v7Ev");}
void  S3208C3 ::v8(){vfunc_called(this, "_ZN7S3208C32v8Ev");}
void  S3208C3 ::v9(){vfunc_called(this, "_ZN7S3208C32v9Ev");}
void  S3208C3 ::v10(){vfunc_called(this, "_ZN7S3208C33v10Ev");}
void  S3208C3 ::v11(){vfunc_called(this, "_ZN7S3208C33v11Ev");}
void  S3208C3 ::v12(){vfunc_called(this, "_ZN7S3208C33v12Ev");}
void  S3208C3 ::v13(){vfunc_called(this, "_ZN7S3208C33v13Ev");}
void  S3208C3 ::v14(){vfunc_called(this, "_ZN7S3208C33v14Ev");}
void  S3208C3 ::v15(){vfunc_called(this, "_ZN7S3208C33v15Ev");}
void  S3208C3 ::v16(){vfunc_called(this, "_ZN7S3208C33v16Ev");}
void  S3208C3 ::v17(){vfunc_called(this, "_ZN7S3208C33v17Ev");}
void  S3208C3 ::v18(){vfunc_called(this, "_ZN7S3208C33v18Ev");}
S3208C3 ::S3208C3(){ note_ctor("S3208C3", this);} // tgen

static void Test_S3208C3()
{
  extern Class_Descriptor cd_S3208C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,20)];
    init_test(&cd_S3208C3, buf);
    S3208C3 *dp, &lv = *(dp=new (buf) S3208C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,76), "sizeof(S3208C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3208C3)");
    check_field_offset(lv, s3208c3f0, ABISELECT(8,4), "S3208C3.s3208c3f0");
    check_field_offset(lv, s3208c3f1, ABISELECT(24,20), "S3208C3.s3208c3f1");
    check_field_offset(lv, s3208c3f2, ABISELECT(40,36), "S3208C3.s3208c3f2");
    check_field_offset(lv, s3208c3f3, ABISELECT(48,40), "S3208C3.s3208c3f3");
    check_field_offset(lv, s3208c3f4, ABISELECT(52,44), "S3208C3.s3208c3f4");
    set_bf_and_test(lv, s3208c3f5, ABISELECT(56,48), 0, 2, 1, "S3208C3");
    set_bf_and_test(lv, s3208c3f5, ABISELECT(56,48), 0, 2, hide_sll(1LL<<1), "S3208C3");
    set_bf_and_test(lv, s3208c3f6, ABISELECT(56,48), 2, 2, 1, "S3208C3");
    set_bf_and_test(lv, s3208c3f6, ABISELECT(56,48), 2, 2, hide_sll(1LL<<1), "S3208C3");
    set_bf_and_test(lv, s3208c3f7, ABISELECT(56,48), 4, 1, 1, "S3208C3");
    set_bf_and_test(lv, s3208c3f8, ABISELECT(56,48), 5, 1, 1, "S3208C3");
    check_field_offset(lv, s3208c3f9, ABISELECT(64,52), "S3208C3.s3208c3f9");
    check_field_offset(lv, s3208c3f10, ABISELECT(80,60), "S3208C3.s3208c3f10");
    test_class_info(&lv, &cd_S3208C3);
    dp->~S3208C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3208C3(Test_S3208C3, "S3208C3", ABISELECT(112,76));

#else // __cplusplus

extern void _ZN7S3208C3C1Ev();
extern void _ZN7S3208C3D1Ev();
Name_Map name_map_S3208C3[] = {
  NSPAIR(_ZN7S3208C3C1Ev),
  NSPAIR(_ZN7S3208C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3208C3[];
extern void _ZN7S3208C3D1Ev();
extern void _ZN7S3208C3D0Ev();
extern void _ZN7S3208C32v4Ev();
extern void _ZN7S3208C32v5Ev();
extern void _ZN7S3208C32v6Ev();
extern void _ZN7S3208C32v7Ev();
extern void _ZN7S3208C32v8Ev();
extern void _ZN7S3208C32v9Ev();
extern void _ZN7S3208C33v10Ev();
extern void _ZN7S3208C33v11Ev();
extern void _ZN7S3208C33v12Ev();
extern void _ZN7S3208C33v13Ev();
extern void _ZN7S3208C33v14Ev();
extern void _ZN7S3208C33v15Ev();
extern void _ZN7S3208C33v16Ev();
extern void _ZN7S3208C33v17Ev();
extern void _ZN7S3208C33v18Ev();
static  VTBL_ENTRY vtc_S3208C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3208C3[0]),
  (VTBL_ENTRY)&_ZN7S3208C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3208C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3208C32v4Ev,
  (VTBL_ENTRY)&_ZN7S3208C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3208C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3208C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3208C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3208C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3208C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3208C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3208C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3208C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3208C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3208C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3208C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3208C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3208C33v18Ev,
};
extern VTBL_ENTRY _ZTI7S3208C3[];
extern  VTBL_ENTRY _ZTV7S3208C3[];
Class_Descriptor cd_S3208C3 = {  "S3208C3", // class name
  0,0,//no base classes
  &(vtc_S3208C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,76), // object size
  NSPAIRA(_ZTI7S3208C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3208C3),19, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3208C2  : S3208C3 {
  unsigned char s3208c2f0:1;
  unsigned char s3208c2f1:1;
  unsigned char s3208c2f2:1;
  unsigned char s3208c2f3:1;
  unsigned char s3208c2f4:1;
  unsigned char s3208c2f5:1;
  unsigned char s3208c2f6:1;
  char s3208c2f7;
  int s3208c2f8[2];
  int s3208c2f9[2];
  void *s3208c2f10;
  ::S2120C13_nt s3208c2f11;
  ::S2120C13_nt s3208c2f12;
  ::S2120C13_nt s3208c2f13;
  ::S601C12 s3208c2f14;
  void *s3208c2f15;
  int s3208c2f16;
  int s3208c2f17;
  ::S601C13_nt s3208c2f18[4];
  void *s3208c2f19;
  virtual  ~S3208C2(); // _ZN7S3208C2D1Ev
  virtual void  v19(); // _ZN7S3208C23v19Ev
  virtual void  v20(); // _ZN7S3208C23v20Ev
  virtual void  v21(); // _ZN7S3208C23v21Ev
  virtual void  v22(); // _ZN7S3208C23v22Ev
  virtual void  v23(); // _ZN7S3208C23v23Ev
  virtual void  v24(); // _ZN7S3208C23v24Ev
  virtual void  v25(); // _ZN7S3208C23v25Ev
  virtual void  v26(); // _ZN7S3208C23v26Ev
  virtual void  v27(); // _ZN7S3208C23v27Ev
  virtual void  v28(); // _ZN7S3208C23v28Ev
  virtual void  v29(); // _ZN7S3208C23v29Ev
  virtual void  v30(); // _ZN7S3208C23v30Ev
  virtual void  v31(); // _ZN7S3208C23v31Ev
  virtual void  v32(); // _ZN7S3208C23v32Ev
  virtual void  v33(); // _ZN7S3208C23v33Ev
  S3208C2(); // tgen
};
//SIG(-1 S3208C2) C1{ BC2{ vd v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 FC3{ m FC4{ m FL[2]}} FC3 Fp Fi FU5{ m FC6{ Fi:4 Fi:4 Fi:4 Fi:2 Fi:1 Fi:17} Fi} Fi:2 Fi:2 Fc:1 Fc:1 FC7{ m Fp Fp} FC8{ Fp Fp}[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc Fi[2] Fi[2] Fp FC3 FC3 FC3 FC9{ m FC3 FC3} Fp Fi Fi FC10{ m Fp}[4] Fp}


 S3208C2 ::~S3208C2(){ note_dtor("S3208C2", this);}
void  S3208C2 ::v19(){vfunc_called(this, "_ZN7S3208C23v19Ev");}
void  S3208C2 ::v20(){vfunc_called(this, "_ZN7S3208C23v20Ev");}
void  S3208C2 ::v21(){vfunc_called(this, "_ZN7S3208C23v21Ev");}
void  S3208C2 ::v22(){vfunc_called(this, "_ZN7S3208C23v22Ev");}
void  S3208C2 ::v23(){vfunc_called(this, "_ZN7S3208C23v23Ev");}
void  S3208C2 ::v24(){vfunc_called(this, "_ZN7S3208C23v24Ev");}
void  S3208C2 ::v25(){vfunc_called(this, "_ZN7S3208C23v25Ev");}
void  S3208C2 ::v26(){vfunc_called(this, "_ZN7S3208C23v26Ev");}
void  S3208C2 ::v27(){vfunc_called(this, "_ZN7S3208C23v27Ev");}
void  S3208C2 ::v28(){vfunc_called(this, "_ZN7S3208C23v28Ev");}
void  S3208C2 ::v29(){vfunc_called(this, "_ZN7S3208C23v29Ev");}
void  S3208C2 ::v30(){vfunc_called(this, "_ZN7S3208C23v30Ev");}
void  S3208C2 ::v31(){vfunc_called(this, "_ZN7S3208C23v31Ev");}
void  S3208C2 ::v32(){vfunc_called(this, "_ZN7S3208C23v32Ev");}
void  S3208C2 ::v33(){vfunc_called(this, "_ZN7S3208C23v33Ev");}
S3208C2 ::S3208C2(){ note_ctor("S3208C2", this);} // tgen

static void Test_S3208C2()
{
  extern Class_Descriptor cd_S3208C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(36,54)];
    init_test(&cd_S3208C2, buf);
    S3208C2 *dp, &lv = *(dp=new (buf) S3208C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(280,212), "sizeof(S3208C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3208C2)");
    check_base_class_offset(lv, (S3208C3*), 0, "S3208C2");
    set_bf_and_test(lv, s3208c2f0, ABISELECT(112,76), 0, 1, 1, "S3208C2");
    set_bf_and_test(lv, s3208c2f1, ABISELECT(112,76), 1, 1, 1, "S3208C2");
    set_bf_and_test(lv, s3208c2f2, ABISELECT(112,76), 2, 1, 1, "S3208C2");
    set_bf_and_test(lv, s3208c2f3, ABISELECT(112,76), 3, 1, 1, "S3208C2");
    set_bf_and_test(lv, s3208c2f4, ABISELECT(112,76), 4, 1, 1, "S3208C2");
    set_bf_and_test(lv, s3208c2f5, ABISELECT(112,76), 5, 1, 1, "S3208C2");
    set_bf_and_test(lv, s3208c2f6, ABISELECT(112,76), 6, 1, 1, "S3208C2");
    check_field_offset(lv, s3208c2f7, ABISELECT(113,77), "S3208C2.s3208c2f7");
    check_field_offset(lv, s3208c2f8, ABISELECT(116,80), "S3208C2.s3208c2f8");
    check_field_offset(lv, s3208c2f9, ABISELECT(124,88), "S3208C2.s3208c2f9");
    check_field_offset(lv, s3208c2f10, ABISELECT(136,96), "S3208C2.s3208c2f10");
    check_field_offset(lv, s3208c2f11, ABISELECT(144,100), "S3208C2.s3208c2f11");
    check_field_offset(lv, s3208c2f12, ABISELECT(160,116), "S3208C2.s3208c2f12");
    check_field_offset(lv, s3208c2f13, ABISELECT(176,132), "S3208C2.s3208c2f13");
    check_field_offset(lv, s3208c2f14, ABISELECT(192,148), "S3208C2.s3208c2f14");
    check_field_offset(lv, s3208c2f15, ABISELECT(224,180), "S3208C2.s3208c2f15");
    check_field_offset(lv, s3208c2f16, ABISELECT(232,184), "S3208C2.s3208c2f16");
    check_field_offset(lv, s3208c2f17, ABISELECT(236,188), "S3208C2.s3208c2f17");
    check_field_offset(lv, s3208c2f18, ABISELECT(240,192), "S3208C2.s3208c2f18");
    check_field_offset(lv, s3208c2f19, ABISELECT(272,208), "S3208C2.s3208c2f19");
    test_class_info(&lv, &cd_S3208C2);
    dp->~S3208C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3208C2(Test_S3208C2, "S3208C2", ABISELECT(280,212));

#else // __cplusplus

extern void _ZN7S3208C2C1Ev();
extern void _ZN7S3208C2D1Ev();
Name_Map name_map_S3208C2[] = {
  NSPAIR(_ZN7S3208C2C1Ev),
  NSPAIR(_ZN7S3208C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3208C3;
extern VTBL_ENTRY _ZTI7S3208C3[];
extern  VTBL_ENTRY _ZTV7S3208C3[];
static Base_Class bases_S3208C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3208C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3208C2[];
extern void _ZN7S3208C2D1Ev();
extern void _ZN7S3208C2D0Ev();
extern void _ZN7S3208C32v4Ev();
extern void _ZN7S3208C32v5Ev();
extern void _ZN7S3208C32v6Ev();
extern void _ZN7S3208C32v7Ev();
extern void _ZN7S3208C32v8Ev();
extern void _ZN7S3208C32v9Ev();
extern void _ZN7S3208C33v10Ev();
extern void _ZN7S3208C33v11Ev();
extern void _ZN7S3208C33v12Ev();
extern void _ZN7S3208C33v13Ev();
extern void _ZN7S3208C33v14Ev();
extern void _ZN7S3208C33v15Ev();
extern void _ZN7S3208C33v16Ev();
extern void _ZN7S3208C33v17Ev();
extern void _ZN7S3208C33v18Ev();
extern void _ZN7S3208C23v19Ev();
extern void _ZN7S3208C23v20Ev();
extern void _ZN7S3208C23v21Ev();
extern void _ZN7S3208C23v22Ev();
extern void _ZN7S3208C23v23Ev();
extern void _ZN7S3208C23v24Ev();
extern void _ZN7S3208C23v25Ev();
extern void _ZN7S3208C23v26Ev();
extern void _ZN7S3208C23v27Ev();
extern void _ZN7S3208C23v28Ev();
extern void _ZN7S3208C23v29Ev();
extern void _ZN7S3208C23v30Ev();
extern void _ZN7S3208C23v31Ev();
extern void _ZN7S3208C23v32Ev();
extern void _ZN7S3208C23v33Ev();
static  VTBL_ENTRY vtc_S3208C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3208C2[0]),
  (VTBL_ENTRY)&_ZN7S3208C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3208C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3208C32v4Ev,
  (VTBL_ENTRY)&_ZN7S3208C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3208C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3208C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3208C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3208C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3208C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3208C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3208C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3208C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3208C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3208C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3208C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3208C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3208C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3208C23v19Ev,
  (VTBL_ENTRY)&_ZN7S3208C23v20Ev,
  (VTBL_ENTRY)&_ZN7S3208C23v21Ev,
  (VTBL_ENTRY)&_ZN7S3208C23v22Ev,
  (VTBL_ENTRY)&_ZN7S3208C23v23Ev,
  (VTBL_ENTRY)&_ZN7S3208C23v24Ev,
  (VTBL_ENTRY)&_ZN7S3208C23v25Ev,
  (VTBL_ENTRY)&_ZN7S3208C23v26Ev,
  (VTBL_ENTRY)&_ZN7S3208C23v27Ev,
  (VTBL_ENTRY)&_ZN7S3208C23v28Ev,
  (VTBL_ENTRY)&_ZN7S3208C23v29Ev,
  (VTBL_ENTRY)&_ZN7S3208C23v30Ev,
  (VTBL_ENTRY)&_ZN7S3208C23v31Ev,
  (VTBL_ENTRY)&_ZN7S3208C23v32Ev,
  (VTBL_ENTRY)&_ZN7S3208C23v33Ev,
};
extern VTBL_ENTRY _ZTI7S3208C2[];
extern  VTBL_ENTRY _ZTV7S3208C2[];
Class_Descriptor cd_S3208C2 = {  "S3208C2", // class name
  bases_S3208C2, 1,
  &(vtc_S3208C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(280,212), // object size
  NSPAIRA(_ZTI7S3208C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3208C2),34, //virtual function table var
  2, // 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  S3208C1  : S3208C2 {
  void *s3208c1f0;
  virtual  ~S3208C1(); // _ZN7S3208C1D1Ev
  virtual void  v1(); // _ZN7S3208C12v1Ev
  virtual void  v2(); // _ZN7S3208C12v2Ev
  virtual void  v3(); // _ZN7S3208C12v3Ev
  S3208C1(); // tgen
};
//SIG(1 S3208C1) C1{ BC2{ BC3{ vd v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 FC4{ m FC5{ m FL[2]}} FC4 Fp Fi FU6{ m FC7{ Fi:4 Fi:4 Fi:4 Fi:2 Fi:1 Fi:17} Fi} Fi:2 Fi:2 Fc:1 Fc:1 FC8{ m Fp Fp} FC9{ Fp Fp}[2]} vd v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc Fi[2] Fi[2] Fp FC4 FC4 FC4 FC10{ m FC4 FC4} Fp Fi Fi FC11{ m Fp}[4] Fp} vd v1 v2 v3 Fp}


 S3208C1 ::~S3208C1(){ note_dtor("S3208C1", this);}
void  S3208C1 ::v1(){vfunc_called(this, "_ZN7S3208C12v1Ev");}
void  S3208C1 ::v2(){vfunc_called(this, "_ZN7S3208C12v2Ev");}
void  S3208C1 ::v3(){vfunc_called(this, "_ZN7S3208C12v3Ev");}
S3208C1 ::S3208C1(){ note_ctor("S3208C1", this);} // tgen

static void Test_S3208C1()
{
  extern Class_Descriptor cd_S3208C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(37,55)];
    init_test(&cd_S3208C1, buf);
    S3208C1 *dp, &lv = *(dp=new (buf) S3208C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(288,216), "sizeof(S3208C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3208C1)");
    check_base_class_offset(lv, (S3208C3*)(S3208C2*), 0, "S3208C1");
    check_base_class_offset(lv, (S3208C2*), 0, "S3208C1");
    check_field_offset(lv, s3208c1f0, ABISELECT(280,212), "S3208C1.s3208c1f0");
    test_class_info(&lv, &cd_S3208C1);
    dp->~S3208C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3208C1(Test_S3208C1, "S3208C1", ABISELECT(288,216));

#else // __cplusplus

extern void _ZN7S3208C1C1Ev();
extern void _ZN7S3208C1D1Ev();
Name_Map name_map_S3208C1[] = {
  NSPAIR(_ZN7S3208C1C1Ev),
  NSPAIR(_ZN7S3208C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3208C3;
extern VTBL_ENTRY _ZTI7S3208C3[];
extern  VTBL_ENTRY _ZTV7S3208C3[];
extern Class_Descriptor cd_S3208C2;
extern VTBL_ENTRY _ZTI7S3208C2[];
extern  VTBL_ENTRY _ZTV7S3208C2[];
static Base_Class bases_S3208C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3208C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3208C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S3208C1[];
extern void _ZN7S3208C1D1Ev();
extern void _ZN7S3208C1D0Ev();
extern void _ZN7S3208C32v4Ev();
extern void _ZN7S3208C32v5Ev();
extern void _ZN7S3208C32v6Ev();
extern void _ZN7S3208C32v7Ev();
extern void _ZN7S3208C32v8Ev();
extern void _ZN7S3208C32v9Ev();
extern void _ZN7S3208C33v10Ev();
extern void _ZN7S3208C33v11Ev();
extern void _ZN7S3208C33v12Ev();
extern void _ZN7S3208C33v13Ev();
extern void _ZN7S3208C33v14Ev();
extern void _ZN7S3208C33v15Ev();
extern void _ZN7S3208C33v16Ev();
extern void _ZN7S3208C33v17Ev();
extern void _ZN7S3208C33v18Ev();
extern void _ZN7S3208C23v19Ev();
extern void _ZN7S3208C23v20Ev();
extern void _ZN7S3208C23v21Ev();
extern void _ZN7S3208C23v22Ev();
extern void _ZN7S3208C23v23Ev();
extern void _ZN7S3208C23v24Ev();
extern void _ZN7S3208C23v25Ev();
extern void _ZN7S3208C23v26Ev();
extern void _ZN7S3208C23v27Ev();
extern void _ZN7S3208C23v28Ev();
extern void _ZN7S3208C23v29Ev();
extern void _ZN7S3208C23v30Ev();
extern void _ZN7S3208C23v31Ev();
extern void _ZN7S3208C23v32Ev();
extern void _ZN7S3208C23v33Ev();
extern void _ZN7S3208C12v1Ev();
extern void _ZN7S3208C12v2Ev();
extern void _ZN7S3208C12v3Ev();
static  VTBL_ENTRY vtc_S3208C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3208C1[0]),
  (VTBL_ENTRY)&_ZN7S3208C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3208C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3208C32v4Ev,
  (VTBL_ENTRY)&_ZN7S3208C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3208C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3208C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3208C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3208C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3208C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3208C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3208C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3208C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3208C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3208C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3208C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3208C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3208C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3208C23v19Ev,
  (VTBL_ENTRY)&_ZN7S3208C23v20Ev,
  (VTBL_ENTRY)&_ZN7S3208C23v21Ev,
  (VTBL_ENTRY)&_ZN7S3208C23v22Ev,
  (VTBL_ENTRY)&_ZN7S3208C23v23Ev,
  (VTBL_ENTRY)&_ZN7S3208C23v24Ev,
  (VTBL_ENTRY)&_ZN7S3208C23v25Ev,
  (VTBL_ENTRY)&_ZN7S3208C23v26Ev,
  (VTBL_ENTRY)&_ZN7S3208C23v27Ev,
  (VTBL_ENTRY)&_ZN7S3208C23v28Ev,
  (VTBL_ENTRY)&_ZN7S3208C23v29Ev,
  (VTBL_ENTRY)&_ZN7S3208C23v30Ev,
  (VTBL_ENTRY)&_ZN7S3208C23v31Ev,
  (VTBL_ENTRY)&_ZN7S3208C23v32Ev,
  (VTBL_ENTRY)&_ZN7S3208C23v33Ev,
  (VTBL_ENTRY)&_ZN7S3208C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3208C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3208C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S3208C1[];
extern  VTBL_ENTRY _ZTV7S3208C1[];
Class_Descriptor cd_S3208C1 = {  "S3208C1", // class name
  bases_S3208C1, 2,
  &(vtc_S3208C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(288,216), // object size
  NSPAIRA(_ZTI7S3208C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3208C1),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3204C3  {
  ::S2120C13_nt s3204c3f0;
  ::S2120C13_nt s3204c3f1;
  void *s3204c3f2;
  int s3204c3f3;
  ::S601C8 s3204c3f4;
  int s3204c3f5:2;
  int s3204c3f6:2;
  unsigned char s3204c3f7:1;
  unsigned char s3204c3f8:1;
  ::S601C53 s3204c3f9;
  ::S601C11 s3204c3f10[2];
  virtual  ~S3204C3(); // _ZN7S3204C3D1Ev
  virtual void  v4(); // _ZN7S3204C32v4Ev
  virtual void  v5(); // _ZN7S3204C32v5Ev
  virtual void  v6(); // _ZN7S3204C32v6Ev
  virtual void  v7(); // _ZN7S3204C32v7Ev
  virtual void  v8(); // _ZN7S3204C32v8Ev
  virtual void  v9(); // _ZN7S3204C32v9Ev
  virtual void  v10(); // _ZN7S3204C33v10Ev
  virtual void  v11(); // _ZN7S3204C33v11Ev
  virtual void  v12(); // _ZN7S3204C33v12Ev
  virtual void  v13(); // _ZN7S3204C33v13Ev
  virtual void  v14(); // _ZN7S3204C33v14Ev
  virtual void  v15(); // _ZN7S3204C33v15Ev
  virtual void  v16(); // _ZN7S3204C33v16Ev
  virtual void  v17(); // _ZN7S3204C33v17Ev
  virtual void  v18(); // _ZN7S3204C33v18Ev
  S3204C3(); // tgen
};
//SIG(-1 S3204C3) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 FC2{ m FC3{ m FL[2]}} FC2 Fp Fi FU4{ m FC5{ Fi:4 Fi:4 Fi:4 Fi:2 Fi:1 Fi:17} Fi} Fi:2 Fi:2 Fc:1 Fc:1 FC6{ m Fp Fp} FC7{ Fp Fp}[2]}


 S3204C3 ::~S3204C3(){ note_dtor("S3204C3", this);}
void  S3204C3 ::v4(){vfunc_called(this, "_ZN7S3204C32v4Ev");}
void  S3204C3 ::v5(){vfunc_called(this, "_ZN7S3204C32v5Ev");}
void  S3204C3 ::v6(){vfunc_called(this, "_ZN7S3204C32v6Ev");}
void  S3204C3 ::v7(){vfunc_called(this, "_ZN7S3204C32v7Ev");}
void  S3204C3 ::v8(){vfunc_called(this, "_ZN7S3204C32v8Ev");}
void  S3204C3 ::v9(){vfunc_called(this, "_ZN7S3204C32v9Ev");}
void  S3204C3 ::v10(){vfunc_called(this, "_ZN7S3204C33v10Ev");}
void  S3204C3 ::v11(){vfunc_called(this, "_ZN7S3204C33v11Ev");}
void  S3204C3 ::v12(){vfunc_called(this, "_ZN7S3204C33v12Ev");}
void  S3204C3 ::v13(){vfunc_called(this, "_ZN7S3204C33v13Ev");}
void  S3204C3 ::v14(){vfunc_called(this, "_ZN7S3204C33v14Ev");}
void  S3204C3 ::v15(){vfunc_called(this, "_ZN7S3204C33v15Ev");}
void  S3204C3 ::v16(){vfunc_called(this, "_ZN7S3204C33v16Ev");}
void  S3204C3 ::v17(){vfunc_called(this, "_ZN7S3204C33v17Ev");}
void  S3204C3 ::v18(){vfunc_called(this, "_ZN7S3204C33v18Ev");}
S3204C3 ::S3204C3(){ note_ctor("S3204C3", this);} // tgen

static void Test_S3204C3()
{
  extern Class_Descriptor cd_S3204C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,20)];
    init_test(&cd_S3204C3, buf);
    S3204C3 *dp, &lv = *(dp=new (buf) S3204C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,76), "sizeof(S3204C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3204C3)");
    check_field_offset(lv, s3204c3f0, ABISELECT(8,4), "S3204C3.s3204c3f0");
    check_field_offset(lv, s3204c3f1, ABISELECT(24,20), "S3204C3.s3204c3f1");
    check_field_offset(lv, s3204c3f2, ABISELECT(40,36), "S3204C3.s3204c3f2");
    check_field_offset(lv, s3204c3f3, ABISELECT(48,40), "S3204C3.s3204c3f3");
    check_field_offset(lv, s3204c3f4, ABISELECT(52,44), "S3204C3.s3204c3f4");
    set_bf_and_test(lv, s3204c3f5, ABISELECT(56,48), 0, 2, 1, "S3204C3");
    set_bf_and_test(lv, s3204c3f5, ABISELECT(56,48), 0, 2, hide_sll(1LL<<1), "S3204C3");
    set_bf_and_test(lv, s3204c3f6, ABISELECT(56,48), 2, 2, 1, "S3204C3");
    set_bf_and_test(lv, s3204c3f6, ABISELECT(56,48), 2, 2, hide_sll(1LL<<1), "S3204C3");
    set_bf_and_test(lv, s3204c3f7, ABISELECT(56,48), 4, 1, 1, "S3204C3");
    set_bf_and_test(lv, s3204c3f8, ABISELECT(56,48), 5, 1, 1, "S3204C3");
    check_field_offset(lv, s3204c3f9, ABISELECT(64,52), "S3204C3.s3204c3f9");
    check_field_offset(lv, s3204c3f10, ABISELECT(80,60), "S3204C3.s3204c3f10");
    test_class_info(&lv, &cd_S3204C3);
    dp->~S3204C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3204C3(Test_S3204C3, "S3204C3", ABISELECT(112,76));

#else // __cplusplus

extern void _ZN7S3204C3C1Ev();
extern void _ZN7S3204C3D1Ev();
Name_Map name_map_S3204C3[] = {
  NSPAIR(_ZN7S3204C3C1Ev),
  NSPAIR(_ZN7S3204C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3204C3[];
extern void _ZN7S3204C3D1Ev();
extern void _ZN7S3204C3D0Ev();
extern void _ZN7S3204C32v4Ev();
extern void _ZN7S3204C32v5Ev();
extern void _ZN7S3204C32v6Ev();
extern void _ZN7S3204C32v7Ev();
extern void _ZN7S3204C32v8Ev();
extern void _ZN7S3204C32v9Ev();
extern void _ZN7S3204C33v10Ev();
extern void _ZN7S3204C33v11Ev();
extern void _ZN7S3204C33v12Ev();
extern void _ZN7S3204C33v13Ev();
extern void _ZN7S3204C33v14Ev();
extern void _ZN7S3204C33v15Ev();
extern void _ZN7S3204C33v16Ev();
extern void _ZN7S3204C33v17Ev();
extern void _ZN7S3204C33v18Ev();
static  VTBL_ENTRY vtc_S3204C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3204C3[0]),
  (VTBL_ENTRY)&_ZN7S3204C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3204C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3204C32v4Ev,
  (VTBL_ENTRY)&_ZN7S3204C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3204C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3204C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3204C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3204C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3204C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3204C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3204C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3204C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3204C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3204C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3204C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3204C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3204C33v18Ev,
};
extern VTBL_ENTRY _ZTI7S3204C3[];
extern  VTBL_ENTRY _ZTV7S3204C3[];
Class_Descriptor cd_S3204C3 = {  "S3204C3", // class name
  0,0,//no base classes
  &(vtc_S3204C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,76), // object size
  NSPAIRA(_ZTI7S3204C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3204C3),19, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3204C2  : S3204C3 {
  unsigned char s3204c2f0:1;
  unsigned char s3204c2f1:1;
  unsigned char s3204c2f2:1;
  unsigned char s3204c2f3:1;
  unsigned char s3204c2f4:1;
  unsigned char s3204c2f5:1;
  unsigned char s3204c2f6:1;
  char s3204c2f7;
  int s3204c2f8[2];
  int s3204c2f9[2];
  void *s3204c2f10;
  ::S2120C13_nt s3204c2f11;
  ::S2120C13_nt s3204c2f12;
  ::S2120C13_nt s3204c2f13;
  ::S601C12 s3204c2f14;
  void *s3204c2f15;
  int s3204c2f16;
  int s3204c2f17;
  ::S601C13_nt s3204c2f18[4];
  void *s3204c2f19;
  virtual  ~S3204C2(); // _ZN7S3204C2D1Ev
  virtual void  v19(); // _ZN7S3204C23v19Ev
  virtual void  v20(); // _ZN7S3204C23v20Ev
  virtual void  v21(); // _ZN7S3204C23v21Ev
  virtual void  v22(); // _ZN7S3204C23v22Ev
  virtual void  v23(); // _ZN7S3204C23v23Ev
  virtual void  v24(); // _ZN7S3204C23v24Ev
  virtual void  v25(); // _ZN7S3204C23v25Ev
  virtual void  v26(); // _ZN7S3204C23v26Ev
  virtual void  v27(); // _ZN7S3204C23v27Ev
  virtual void  v28(); // _ZN7S3204C23v28Ev
  virtual void  v29(); // _ZN7S3204C23v29Ev
  virtual void  v30(); // _ZN7S3204C23v30Ev
  virtual void  v31(); // _ZN7S3204C23v31Ev
  virtual void  v32(); // _ZN7S3204C23v32Ev
  virtual void  v33(); // _ZN7S3204C23v33Ev
  S3204C2(); // tgen
};
//SIG(-1 S3204C2) C1{ BC2{ vd v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 FC3{ m FC4{ m FL[2]}} FC3 Fp Fi FU5{ m FC6{ Fi:4 Fi:4 Fi:4 Fi:2 Fi:1 Fi:17} Fi} Fi:2 Fi:2 Fc:1 Fc:1 FC7{ m Fp Fp} FC8{ Fp Fp}[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc Fi[2] Fi[2] Fp FC3 FC3 FC3 FC9{ m FC3 FC3} Fp Fi Fi FC10{ m Fp}[4] Fp}


 S3204C2 ::~S3204C2(){ note_dtor("S3204C2", this);}
void  S3204C2 ::v19(){vfunc_called(this, "_ZN7S3204C23v19Ev");}
void  S3204C2 ::v20(){vfunc_called(this, "_ZN7S3204C23v20Ev");}
void  S3204C2 ::v21(){vfunc_called(this, "_ZN7S3204C23v21Ev");}
void  S3204C2 ::v22(){vfunc_called(this, "_ZN7S3204C23v22Ev");}
void  S3204C2 ::v23(){vfunc_called(this, "_ZN7S3204C23v23Ev");}
void  S3204C2 ::v24(){vfunc_called(this, "_ZN7S3204C23v24Ev");}
void  S3204C2 ::v25(){vfunc_called(this, "_ZN7S3204C23v25Ev");}
void  S3204C2 ::v26(){vfunc_called(this, "_ZN7S3204C23v26Ev");}
void  S3204C2 ::v27(){vfunc_called(this, "_ZN7S3204C23v27Ev");}
void  S3204C2 ::v28(){vfunc_called(this, "_ZN7S3204C23v28Ev");}
void  S3204C2 ::v29(){vfunc_called(this, "_ZN7S3204C23v29Ev");}
void  S3204C2 ::v30(){vfunc_called(this, "_ZN7S3204C23v30Ev");}
void  S3204C2 ::v31(){vfunc_called(this, "_ZN7S3204C23v31Ev");}
void  S3204C2 ::v32(){vfunc_called(this, "_ZN7S3204C23v32Ev");}
void  S3204C2 ::v33(){vfunc_called(this, "_ZN7S3204C23v33Ev");}
S3204C2 ::S3204C2(){ note_ctor("S3204C2", this);} // tgen

static void Test_S3204C2()
{
  extern Class_Descriptor cd_S3204C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(36,54)];
    init_test(&cd_S3204C2, buf);
    S3204C2 *dp, &lv = *(dp=new (buf) S3204C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(280,212), "sizeof(S3204C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3204C2)");
    check_base_class_offset(lv, (S3204C3*), 0, "S3204C2");
    set_bf_and_test(lv, s3204c2f0, ABISELECT(112,76), 0, 1, 1, "S3204C2");
    set_bf_and_test(lv, s3204c2f1, ABISELECT(112,76), 1, 1, 1, "S3204C2");
    set_bf_and_test(lv, s3204c2f2, ABISELECT(112,76), 2, 1, 1, "S3204C2");
    set_bf_and_test(lv, s3204c2f3, ABISELECT(112,76), 3, 1, 1, "S3204C2");
    set_bf_and_test(lv, s3204c2f4, ABISELECT(112,76), 4, 1, 1, "S3204C2");
    set_bf_and_test(lv, s3204c2f5, ABISELECT(112,76), 5, 1, 1, "S3204C2");
    set_bf_and_test(lv, s3204c2f6, ABISELECT(112,76), 6, 1, 1, "S3204C2");
    check_field_offset(lv, s3204c2f7, ABISELECT(113,77), "S3204C2.s3204c2f7");
    check_field_offset(lv, s3204c2f8, ABISELECT(116,80), "S3204C2.s3204c2f8");
    check_field_offset(lv, s3204c2f9, ABISELECT(124,88), "S3204C2.s3204c2f9");
    check_field_offset(lv, s3204c2f10, ABISELECT(136,96), "S3204C2.s3204c2f10");
    check_field_offset(lv, s3204c2f11, ABISELECT(144,100), "S3204C2.s3204c2f11");
    check_field_offset(lv, s3204c2f12, ABISELECT(160,116), "S3204C2.s3204c2f12");
    check_field_offset(lv, s3204c2f13, ABISELECT(176,132), "S3204C2.s3204c2f13");
    check_field_offset(lv, s3204c2f14, ABISELECT(192,148), "S3204C2.s3204c2f14");
    check_field_offset(lv, s3204c2f15, ABISELECT(224,180), "S3204C2.s3204c2f15");
    check_field_offset(lv, s3204c2f16, ABISELECT(232,184), "S3204C2.s3204c2f16");
    check_field_offset(lv, s3204c2f17, ABISELECT(236,188), "S3204C2.s3204c2f17");
    check_field_offset(lv, s3204c2f18, ABISELECT(240,192), "S3204C2.s3204c2f18");
    check_field_offset(lv, s3204c2f19, ABISELECT(272,208), "S3204C2.s3204c2f19");
    test_class_info(&lv, &cd_S3204C2);
    dp->~S3204C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3204C2(Test_S3204C2, "S3204C2", ABISELECT(280,212));

#else // __cplusplus

extern void _ZN7S3204C2C1Ev();
extern void _ZN7S3204C2D1Ev();
Name_Map name_map_S3204C2[] = {
  NSPAIR(_ZN7S3204C2C1Ev),
  NSPAIR(_ZN7S3204C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3204C3;
extern VTBL_ENTRY _ZTI7S3204C3[];
extern  VTBL_ENTRY _ZTV7S3204C3[];
static Base_Class bases_S3204C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3204C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3204C2[];
extern void _ZN7S3204C2D1Ev();
extern void _ZN7S3204C2D0Ev();
extern void _ZN7S3204C32v4Ev();
extern void _ZN7S3204C32v5Ev();
extern void _ZN7S3204C32v6Ev();
extern void _ZN7S3204C32v7Ev();
extern void _ZN7S3204C32v8Ev();
extern void _ZN7S3204C32v9Ev();
extern void _ZN7S3204C33v10Ev();
extern void _ZN7S3204C33v11Ev();
extern void _ZN7S3204C33v12Ev();
extern void _ZN7S3204C33v13Ev();
extern void _ZN7S3204C33v14Ev();
extern void _ZN7S3204C33v15Ev();
extern void _ZN7S3204C33v16Ev();
extern void _ZN7S3204C33v17Ev();
extern void _ZN7S3204C33v18Ev();
extern void _ZN7S3204C23v19Ev();
extern void _ZN7S3204C23v20Ev();
extern void _ZN7S3204C23v21Ev();
extern void _ZN7S3204C23v22Ev();
extern void _ZN7S3204C23v23Ev();
extern void _ZN7S3204C23v24Ev();
extern void _ZN7S3204C23v25Ev();
extern void _ZN7S3204C23v26Ev();
extern void _ZN7S3204C23v27Ev();
extern void _ZN7S3204C23v28Ev();
extern void _ZN7S3204C23v29Ev();
extern void _ZN7S3204C23v30Ev();
extern void _ZN7S3204C23v31Ev();
extern void _ZN7S3204C23v32Ev();
extern void _ZN7S3204C23v33Ev();
static  VTBL_ENTRY vtc_S3204C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3204C2[0]),
  (VTBL_ENTRY)&_ZN7S3204C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3204C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3204C32v4Ev,
  (VTBL_ENTRY)&_ZN7S3204C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3204C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3204C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3204C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3204C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3204C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3204C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3204C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3204C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3204C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3204C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3204C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3204C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3204C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3204C23v19Ev,
  (VTBL_ENTRY)&_ZN7S3204C23v20Ev,
  (VTBL_ENTRY)&_ZN7S3204C23v21Ev,
  (VTBL_ENTRY)&_ZN7S3204C23v22Ev,
  (VTBL_ENTRY)&_ZN7S3204C23v23Ev,
  (VTBL_ENTRY)&_ZN7S3204C23v24Ev,
  (VTBL_ENTRY)&_ZN7S3204C23v25Ev,
  (VTBL_ENTRY)&_ZN7S3204C23v26Ev,
  (VTBL_ENTRY)&_ZN7S3204C23v27Ev,
  (VTBL_ENTRY)&_ZN7S3204C23v28Ev,
  (VTBL_ENTRY)&_ZN7S3204C23v29Ev,
  (VTBL_ENTRY)&_ZN7S3204C23v30Ev,
  (VTBL_ENTRY)&_ZN7S3204C23v31Ev,
  (VTBL_ENTRY)&_ZN7S3204C23v32Ev,
  (VTBL_ENTRY)&_ZN7S3204C23v33Ev,
};
extern VTBL_ENTRY _ZTI7S3204C2[];
extern  VTBL_ENTRY _ZTV7S3204C2[];
Class_Descriptor cd_S3204C2 = {  "S3204C2", // class name
  bases_S3204C2, 1,
  &(vtc_S3204C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(280,212), // object size
  NSPAIRA(_ZTI7S3204C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3204C2),34, //virtual function table var
  2, // 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  S3204C1  : S3204C2 {
  char s3204c1f0;
  virtual  ~S3204C1(); // _ZN7S3204C1D1Ev
  virtual void  v1(); // _ZN7S3204C12v1Ev
  virtual void  v2(); // _ZN7S3204C12v2Ev
  virtual void  v3(); // _ZN7S3204C12v3Ev
  S3204C1(); // tgen
};
//SIG(1 S3204C1) C1{ BC2{ BC3{ vd v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 FC4{ m FC5{ m FL[2]}} FC4 Fp Fi FU6{ m FC7{ Fi:4 Fi:4 Fi:4 Fi:2 Fi:1 Fi:17} Fi} Fi:2 Fi:2 Fc:1 Fc:1 FC8{ m Fp Fp} FC9{ Fp Fp}[2]} vd v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc Fi[2] Fi[2] Fp FC4 FC4 FC4 FC10{ m FC4 FC4} Fp Fi Fi FC11{ m Fp}[4] Fp} vd v1 v2 v3 Fc}


 S3204C1 ::~S3204C1(){ note_dtor("S3204C1", this);}
void  S3204C1 ::v1(){vfunc_called(this, "_ZN7S3204C12v1Ev");}
void  S3204C1 ::v2(){vfunc_called(this, "_ZN7S3204C12v2Ev");}
void  S3204C1 ::v3(){vfunc_called(this, "_ZN7S3204C12v3Ev");}
S3204C1 ::S3204C1(){ note_ctor("S3204C1", this);} // tgen

static void Test_S3204C1()
{
  extern Class_Descriptor cd_S3204C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(37,55)];
    init_test(&cd_S3204C1, buf);
    S3204C1 *dp, &lv = *(dp=new (buf) S3204C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(288,216), "sizeof(S3204C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3204C1)");
    check_base_class_offset(lv, (S3204C3*)(S3204C2*), 0, "S3204C1");
    check_base_class_offset(lv, (S3204C2*), 0, "S3204C1");
    check_field_offset(lv, s3204c1f0, ABISELECT(280,212), "S3204C1.s3204c1f0");
    test_class_info(&lv, &cd_S3204C1);
    dp->~S3204C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3204C1(Test_S3204C1, "S3204C1", ABISELECT(288,216));

#else // __cplusplus

extern void _ZN7S3204C1C1Ev();
extern void _ZN7S3204C1D1Ev();
Name_Map name_map_S3204C1[] = {
  NSPAIR(_ZN7S3204C1C1Ev),
  NSPAIR(_ZN7S3204C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3204C3;
extern VTBL_ENTRY _ZTI7S3204C3[];
extern  VTBL_ENTRY _ZTV7S3204C3[];
extern Class_Descriptor cd_S3204C2;
extern VTBL_ENTRY _ZTI7S3204C2[];
extern  VTBL_ENTRY _ZTV7S3204C2[];
static Base_Class bases_S3204C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3204C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3204C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S3204C1[];
extern void _ZN7S3204C1D1Ev();
extern void _ZN7S3204C1D0Ev();
extern void _ZN7S3204C32v4Ev();
extern void _ZN7S3204C32v5Ev();
extern void _ZN7S3204C32v6Ev();
extern void _ZN7S3204C32v7Ev();
extern void _ZN7S3204C32v8Ev();
extern void _ZN7S3204C32v9Ev();
extern void _ZN7S3204C33v10Ev();
extern void _ZN7S3204C33v11Ev();
extern void _ZN7S3204C33v12Ev();
extern void _ZN7S3204C33v13Ev();
extern void _ZN7S3204C33v14Ev();
extern void _ZN7S3204C33v15Ev();
extern void _ZN7S3204C33v16Ev();
extern void _ZN7S3204C33v17Ev();
extern void _ZN7S3204C33v18Ev();
extern void _ZN7S3204C23v19Ev();
extern void _ZN7S3204C23v20Ev();
extern void _ZN7S3204C23v21Ev();
extern void _ZN7S3204C23v22Ev();
extern void _ZN7S3204C23v23Ev();
extern void _ZN7S3204C23v24Ev();
extern void _ZN7S3204C23v25Ev();
extern void _ZN7S3204C23v26Ev();
extern void _ZN7S3204C23v27Ev();
extern void _ZN7S3204C23v28Ev();
extern void _ZN7S3204C23v29Ev();
extern void _ZN7S3204C23v30Ev();
extern void _ZN7S3204C23v31Ev();
extern void _ZN7S3204C23v32Ev();
extern void _ZN7S3204C23v33Ev();
extern void _ZN7S3204C12v1Ev();
extern void _ZN7S3204C12v2Ev();
extern void _ZN7S3204C12v3Ev();
static  VTBL_ENTRY vtc_S3204C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3204C1[0]),
  (VTBL_ENTRY)&_ZN7S3204C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3204C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3204C32v4Ev,
  (VTBL_ENTRY)&_ZN7S3204C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3204C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3204C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3204C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3204C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3204C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3204C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3204C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3204C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3204C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3204C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3204C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3204C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3204C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3204C23v19Ev,
  (VTBL_ENTRY)&_ZN7S3204C23v20Ev,
  (VTBL_ENTRY)&_ZN7S3204C23v21Ev,
  (VTBL_ENTRY)&_ZN7S3204C23v22Ev,
  (VTBL_ENTRY)&_ZN7S3204C23v23Ev,
  (VTBL_ENTRY)&_ZN7S3204C23v24Ev,
  (VTBL_ENTRY)&_ZN7S3204C23v25Ev,
  (VTBL_ENTRY)&_ZN7S3204C23v26Ev,
  (VTBL_ENTRY)&_ZN7S3204C23v27Ev,
  (VTBL_ENTRY)&_ZN7S3204C23v28Ev,
  (VTBL_ENTRY)&_ZN7S3204C23v29Ev,
  (VTBL_ENTRY)&_ZN7S3204C23v30Ev,
  (VTBL_ENTRY)&_ZN7S3204C23v31Ev,
  (VTBL_ENTRY)&_ZN7S3204C23v32Ev,
  (VTBL_ENTRY)&_ZN7S3204C23v33Ev,
  (VTBL_ENTRY)&_ZN7S3204C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3204C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3204C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S3204C1[];
extern  VTBL_ENTRY _ZTV7S3204C1[];
Class_Descriptor cd_S3204C1 = {  "S3204C1", // class name
  bases_S3204C1, 2,
  &(vtc_S3204C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(288,216), // object size
  NSPAIRA(_ZTI7S3204C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3204C1),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3209C3  {
  ::S2120C13_nt s3209c3f0;
  ::S2120C13_nt s3209c3f1;
  void *s3209c3f2;
  int s3209c3f3;
  ::S601C8 s3209c3f4;
  int s3209c3f5:2;
  int s3209c3f6:2;
  unsigned char s3209c3f7:1;
  unsigned char s3209c3f8:1;
  ::S601C53 s3209c3f9;
  ::S601C11 s3209c3f10[2];
  virtual  ~S3209C3(); // _ZN7S3209C3D1Ev
  virtual void  v4(); // _ZN7S3209C32v4Ev
  virtual void  v5(); // _ZN7S3209C32v5Ev
  virtual void  v6(); // _ZN7S3209C32v6Ev
  virtual void  v7(); // _ZN7S3209C32v7Ev
  virtual void  v8(); // _ZN7S3209C32v8Ev
  virtual void  v9(); // _ZN7S3209C32v9Ev
  virtual void  v10(); // _ZN7S3209C33v10Ev
  virtual void  v11(); // _ZN7S3209C33v11Ev
  virtual void  v12(); // _ZN7S3209C33v12Ev
  virtual void  v13(); // _ZN7S3209C33v13Ev
  virtual void  v14(); // _ZN7S3209C33v14Ev
  virtual void  v15(); // _ZN7S3209C33v15Ev
  virtual void  v16(); // _ZN7S3209C33v16Ev
  virtual void  v17(); // _ZN7S3209C33v17Ev
  virtual void  v18(); // _ZN7S3209C33v18Ev
  S3209C3(); // tgen
};
//SIG(-1 S3209C3) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 FC2{ m FC3{ m FL[2]}} FC2 Fp Fi FU4{ m FC5{ Fi:4 Fi:4 Fi:4 Fi:2 Fi:1 Fi:17} Fi} Fi:2 Fi:2 Fc:1 Fc:1 FC6{ m Fp Fp} FC7{ Fp Fp}[2]}


 S3209C3 ::~S3209C3(){ note_dtor("S3209C3", this);}
void  S3209C3 ::v4(){vfunc_called(this, "_ZN7S3209C32v4Ev");}
void  S3209C3 ::v5(){vfunc_called(this, "_ZN7S3209C32v5Ev");}
void  S3209C3 ::v6(){vfunc_called(this, "_ZN7S3209C32v6Ev");}
void  S3209C3 ::v7(){vfunc_called(this, "_ZN7S3209C32v7Ev");}
void  S3209C3 ::v8(){vfunc_called(this, "_ZN7S3209C32v8Ev");}
void  S3209C3 ::v9(){vfunc_called(this, "_ZN7S3209C32v9Ev");}
void  S3209C3 ::v10(){vfunc_called(this, "_ZN7S3209C33v10Ev");}
void  S3209C3 ::v11(){vfunc_called(this, "_ZN7S3209C33v11Ev");}
void  S3209C3 ::v12(){vfunc_called(this, "_ZN7S3209C33v12Ev");}
void  S3209C3 ::v13(){vfunc_called(this, "_ZN7S3209C33v13Ev");}
void  S3209C3 ::v14(){vfunc_called(this, "_ZN7S3209C33v14Ev");}
void  S3209C3 ::v15(){vfunc_called(this, "_ZN7S3209C33v15Ev");}
void  S3209C3 ::v16(){vfunc_called(this, "_ZN7S3209C33v16Ev");}
void  S3209C3 ::v17(){vfunc_called(this, "_ZN7S3209C33v17Ev");}
void  S3209C3 ::v18(){vfunc_called(this, "_ZN7S3209C33v18Ev");}
S3209C3 ::S3209C3(){ note_ctor("S3209C3", this);} // tgen

static void Test_S3209C3()
{
  extern Class_Descriptor cd_S3209C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,20)];
    init_test(&cd_S3209C3, buf);
    S3209C3 *dp, &lv = *(dp=new (buf) S3209C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,76), "sizeof(S3209C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3209C3)");
    check_field_offset(lv, s3209c3f0, ABISELECT(8,4), "S3209C3.s3209c3f0");
    check_field_offset(lv, s3209c3f1, ABISELECT(24,20), "S3209C3.s3209c3f1");
    check_field_offset(lv, s3209c3f2, ABISELECT(40,36), "S3209C3.s3209c3f2");
    check_field_offset(lv, s3209c3f3, ABISELECT(48,40), "S3209C3.s3209c3f3");
    check_field_offset(lv, s3209c3f4, ABISELECT(52,44), "S3209C3.s3209c3f4");
    set_bf_and_test(lv, s3209c3f5, ABISELECT(56,48), 0, 2, 1, "S3209C3");
    set_bf_and_test(lv, s3209c3f5, ABISELECT(56,48), 0, 2, hide_sll(1LL<<1), "S3209C3");
    set_bf_and_test(lv, s3209c3f6, ABISELECT(56,48), 2, 2, 1, "S3209C3");
    set_bf_and_test(lv, s3209c3f6, ABISELECT(56,48), 2, 2, hide_sll(1LL<<1), "S3209C3");
    set_bf_and_test(lv, s3209c3f7, ABISELECT(56,48), 4, 1, 1, "S3209C3");
    set_bf_and_test(lv, s3209c3f8, ABISELECT(56,48), 5, 1, 1, "S3209C3");
    check_field_offset(lv, s3209c3f9, ABISELECT(64,52), "S3209C3.s3209c3f9");
    check_field_offset(lv, s3209c3f10, ABISELECT(80,60), "S3209C3.s3209c3f10");
    test_class_info(&lv, &cd_S3209C3);
    dp->~S3209C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3209C3(Test_S3209C3, "S3209C3", ABISELECT(112,76));

#else // __cplusplus

extern void _ZN7S3209C3C1Ev();
extern void _ZN7S3209C3D1Ev();
Name_Map name_map_S3209C3[] = {
  NSPAIR(_ZN7S3209C3C1Ev),
  NSPAIR(_ZN7S3209C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3209C3[];
extern void _ZN7S3209C3D1Ev();
extern void _ZN7S3209C3D0Ev();
extern void _ZN7S3209C32v4Ev();
extern void _ZN7S3209C32v5Ev();
extern void _ZN7S3209C32v6Ev();
extern void _ZN7S3209C32v7Ev();
extern void _ZN7S3209C32v8Ev();
extern void _ZN7S3209C32v9Ev();
extern void _ZN7S3209C33v10Ev();
extern void _ZN7S3209C33v11Ev();
extern void _ZN7S3209C33v12Ev();
extern void _ZN7S3209C33v13Ev();
extern void _ZN7S3209C33v14Ev();
extern void _ZN7S3209C33v15Ev();
extern void _ZN7S3209C33v16Ev();
extern void _ZN7S3209C33v17Ev();
extern void _ZN7S3209C33v18Ev();
static  VTBL_ENTRY vtc_S3209C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3209C3[0]),
  (VTBL_ENTRY)&_ZN7S3209C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3209C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3209C32v4Ev,
  (VTBL_ENTRY)&_ZN7S3209C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3209C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3209C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3209C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3209C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3209C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3209C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3209C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3209C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3209C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3209C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3209C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3209C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3209C33v18Ev,
};
extern VTBL_ENTRY _ZTI7S3209C3[];
extern  VTBL_ENTRY _ZTV7S3209C3[];
Class_Descriptor cd_S3209C3 = {  "S3209C3", // class name
  0,0,//no base classes
  &(vtc_S3209C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,76), // object size
  NSPAIRA(_ZTI7S3209C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3209C3),19, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3209C2  : S3209C3 {
  unsigned char s3209c2f0:1;
  unsigned char s3209c2f1:1;
  unsigned char s3209c2f2:1;
  unsigned char s3209c2f3:1;
  unsigned char s3209c2f4:1;
  unsigned char s3209c2f5:1;
  unsigned char s3209c2f6:1;
  char s3209c2f7;
  int s3209c2f8[2];
  int s3209c2f9[2];
  void *s3209c2f10;
  ::S2120C13_nt s3209c2f11;
  ::S2120C13_nt s3209c2f12;
  ::S2120C13_nt s3209c2f13;
  ::S601C12 s3209c2f14;
  void *s3209c2f15;
  int s3209c2f16;
  int s3209c2f17;
  ::S601C13_nt s3209c2f18[4];
  void *s3209c2f19;
  virtual  ~S3209C2(); // _ZN7S3209C2D1Ev
  virtual void  v19(); // _ZN7S3209C23v19Ev
  virtual void  v20(); // _ZN7S3209C23v20Ev
  virtual void  v21(); // _ZN7S3209C23v21Ev
  virtual void  v22(); // _ZN7S3209C23v22Ev
  virtual void  v23(); // _ZN7S3209C23v23Ev
  virtual void  v24(); // _ZN7S3209C23v24Ev
  virtual void  v25(); // _ZN7S3209C23v25Ev
  virtual void  v26(); // _ZN7S3209C23v26Ev
  virtual void  v27(); // _ZN7S3209C23v27Ev
  virtual void  v28(); // _ZN7S3209C23v28Ev
  virtual void  v29(); // _ZN7S3209C23v29Ev
  virtual void  v30(); // _ZN7S3209C23v30Ev
  virtual void  v31(); // _ZN7S3209C23v31Ev
  virtual void  v32(); // _ZN7S3209C23v32Ev
  virtual void  v33(); // _ZN7S3209C23v33Ev
  S3209C2(); // tgen
};
//SIG(-1 S3209C2) C1{ BC2{ vd v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 FC3{ m FC4{ m FL[2]}} FC3 Fp Fi FU5{ m FC6{ Fi:4 Fi:4 Fi:4 Fi:2 Fi:1 Fi:17} Fi} Fi:2 Fi:2 Fc:1 Fc:1 FC7{ m Fp Fp} FC8{ Fp Fp}[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc Fi[2] Fi[2] Fp FC3 FC3 FC3 FC9{ m FC3 FC3} Fp Fi Fi FC10{ m Fp}[4] Fp}


 S3209C2 ::~S3209C2(){ note_dtor("S3209C2", this);}
void  S3209C2 ::v19(){vfunc_called(this, "_ZN7S3209C23v19Ev");}
void  S3209C2 ::v20(){vfunc_called(this, "_ZN7S3209C23v20Ev");}
void  S3209C2 ::v21(){vfunc_called(this, "_ZN7S3209C23v21Ev");}
void  S3209C2 ::v22(){vfunc_called(this, "_ZN7S3209C23v22Ev");}
void  S3209C2 ::v23(){vfunc_called(this, "_ZN7S3209C23v23Ev");}
void  S3209C2 ::v24(){vfunc_called(this, "_ZN7S3209C23v24Ev");}
void  S3209C2 ::v25(){vfunc_called(this, "_ZN7S3209C23v25Ev");}
void  S3209C2 ::v26(){vfunc_called(this, "_ZN7S3209C23v26Ev");}
void  S3209C2 ::v27(){vfunc_called(this, "_ZN7S3209C23v27Ev");}
void  S3209C2 ::v28(){vfunc_called(this, "_ZN7S3209C23v28Ev");}
void  S3209C2 ::v29(){vfunc_called(this, "_ZN7S3209C23v29Ev");}
void  S3209C2 ::v30(){vfunc_called(this, "_ZN7S3209C23v30Ev");}
void  S3209C2 ::v31(){vfunc_called(this, "_ZN7S3209C23v31Ev");}
void  S3209C2 ::v32(){vfunc_called(this, "_ZN7S3209C23v32Ev");}
void  S3209C2 ::v33(){vfunc_called(this, "_ZN7S3209C23v33Ev");}
S3209C2 ::S3209C2(){ note_ctor("S3209C2", this);} // tgen

static void Test_S3209C2()
{
  extern Class_Descriptor cd_S3209C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(36,54)];
    init_test(&cd_S3209C2, buf);
    S3209C2 *dp, &lv = *(dp=new (buf) S3209C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(280,212), "sizeof(S3209C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3209C2)");
    check_base_class_offset(lv, (S3209C3*), 0, "S3209C2");
    set_bf_and_test(lv, s3209c2f0, ABISELECT(112,76), 0, 1, 1, "S3209C2");
    set_bf_and_test(lv, s3209c2f1, ABISELECT(112,76), 1, 1, 1, "S3209C2");
    set_bf_and_test(lv, s3209c2f2, ABISELECT(112,76), 2, 1, 1, "S3209C2");
    set_bf_and_test(lv, s3209c2f3, ABISELECT(112,76), 3, 1, 1, "S3209C2");
    set_bf_and_test(lv, s3209c2f4, ABISELECT(112,76), 4, 1, 1, "S3209C2");
    set_bf_and_test(lv, s3209c2f5, ABISELECT(112,76), 5, 1, 1, "S3209C2");
    set_bf_and_test(lv, s3209c2f6, ABISELECT(112,76), 6, 1, 1, "S3209C2");
    check_field_offset(lv, s3209c2f7, ABISELECT(113,77), "S3209C2.s3209c2f7");
    check_field_offset(lv, s3209c2f8, ABISELECT(116,80), "S3209C2.s3209c2f8");
    check_field_offset(lv, s3209c2f9, ABISELECT(124,88), "S3209C2.s3209c2f9");
    check_field_offset(lv, s3209c2f10, ABISELECT(136,96), "S3209C2.s3209c2f10");
    check_field_offset(lv, s3209c2f11, ABISELECT(144,100), "S3209C2.s3209c2f11");
    check_field_offset(lv, s3209c2f12, ABISELECT(160,116), "S3209C2.s3209c2f12");
    check_field_offset(lv, s3209c2f13, ABISELECT(176,132), "S3209C2.s3209c2f13");
    check_field_offset(lv, s3209c2f14, ABISELECT(192,148), "S3209C2.s3209c2f14");
    check_field_offset(lv, s3209c2f15, ABISELECT(224,180), "S3209C2.s3209c2f15");
    check_field_offset(lv, s3209c2f16, ABISELECT(232,184), "S3209C2.s3209c2f16");
    check_field_offset(lv, s3209c2f17, ABISELECT(236,188), "S3209C2.s3209c2f17");
    check_field_offset(lv, s3209c2f18, ABISELECT(240,192), "S3209C2.s3209c2f18");
    check_field_offset(lv, s3209c2f19, ABISELECT(272,208), "S3209C2.s3209c2f19");
    test_class_info(&lv, &cd_S3209C2);
    dp->~S3209C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3209C2(Test_S3209C2, "S3209C2", ABISELECT(280,212));

#else // __cplusplus

extern void _ZN7S3209C2C1Ev();
extern void _ZN7S3209C2D1Ev();
Name_Map name_map_S3209C2[] = {
  NSPAIR(_ZN7S3209C2C1Ev),
  NSPAIR(_ZN7S3209C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3209C3;
extern VTBL_ENTRY _ZTI7S3209C3[];
extern  VTBL_ENTRY _ZTV7S3209C3[];
static Base_Class bases_S3209C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3209C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3209C2[];
extern void _ZN7S3209C2D1Ev();
extern void _ZN7S3209C2D0Ev();
extern void _ZN7S3209C32v4Ev();
extern void _ZN7S3209C32v5Ev();
extern void _ZN7S3209C32v6Ev();
extern void _ZN7S3209C32v7Ev();
extern void _ZN7S3209C32v8Ev();
extern void _ZN7S3209C32v9Ev();
extern void _ZN7S3209C33v10Ev();
extern void _ZN7S3209C33v11Ev();
extern void _ZN7S3209C33v12Ev();
extern void _ZN7S3209C33v13Ev();
extern void _ZN7S3209C33v14Ev();
extern void _ZN7S3209C33v15Ev();
extern void _ZN7S3209C33v16Ev();
extern void _ZN7S3209C33v17Ev();
extern void _ZN7S3209C33v18Ev();
extern void _ZN7S3209C23v19Ev();
extern void _ZN7S3209C23v20Ev();
extern void _ZN7S3209C23v21Ev();
extern void _ZN7S3209C23v22Ev();
extern void _ZN7S3209C23v23Ev();
extern void _ZN7S3209C23v24Ev();
extern void _ZN7S3209C23v25Ev();
extern void _ZN7S3209C23v26Ev();
extern void _ZN7S3209C23v27Ev();
extern void _ZN7S3209C23v28Ev();
extern void _ZN7S3209C23v29Ev();
extern void _ZN7S3209C23v30Ev();
extern void _ZN7S3209C23v31Ev();
extern void _ZN7S3209C23v32Ev();
extern void _ZN7S3209C23v33Ev();
static  VTBL_ENTRY vtc_S3209C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3209C2[0]),
  (VTBL_ENTRY)&_ZN7S3209C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3209C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3209C32v4Ev,
  (VTBL_ENTRY)&_ZN7S3209C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3209C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3209C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3209C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3209C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3209C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3209C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3209C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3209C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3209C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3209C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3209C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3209C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3209C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3209C23v19Ev,
  (VTBL_ENTRY)&_ZN7S3209C23v20Ev,
  (VTBL_ENTRY)&_ZN7S3209C23v21Ev,
  (VTBL_ENTRY)&_ZN7S3209C23v22Ev,
  (VTBL_ENTRY)&_ZN7S3209C23v23Ev,
  (VTBL_ENTRY)&_ZN7S3209C23v24Ev,
  (VTBL_ENTRY)&_ZN7S3209C23v25Ev,
  (VTBL_ENTRY)&_ZN7S3209C23v26Ev,
  (VTBL_ENTRY)&_ZN7S3209C23v27Ev,
  (VTBL_ENTRY)&_ZN7S3209C23v28Ev,
  (VTBL_ENTRY)&_ZN7S3209C23v29Ev,
  (VTBL_ENTRY)&_ZN7S3209C23v30Ev,
  (VTBL_ENTRY)&_ZN7S3209C23v31Ev,
  (VTBL_ENTRY)&_ZN7S3209C23v32Ev,
  (VTBL_ENTRY)&_ZN7S3209C23v33Ev,
};
extern VTBL_ENTRY _ZTI7S3209C2[];
extern  VTBL_ENTRY _ZTV7S3209C2[];
Class_Descriptor cd_S3209C2 = {  "S3209C2", // class name
  bases_S3209C2, 1,
  &(vtc_S3209C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(280,212), // object size
  NSPAIRA(_ZTI7S3209C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3209C2),34, //virtual function table var
  2, // 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  S3209C1  : S3209C2 {
  virtual  ~S3209C1(); // _ZN7S3209C1D1Ev
  virtual void  v1(); // _ZN7S3209C12v1Ev
  virtual void  v2(); // _ZN7S3209C12v2Ev
  virtual void  v3(); // _ZN7S3209C12v3Ev
  S3209C1(); // tgen
};
//SIG(1 S3209C1) C1{ BC2{ BC3{ vd v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 FC4{ m FC5{ m FL[2]}} FC4 Fp Fi FU6{ m FC7{ Fi:4 Fi:4 Fi:4 Fi:2 Fi:1 Fi:17} Fi} Fi:2 Fi:2 Fc:1 Fc:1 FC8{ m Fp Fp} FC9{ Fp Fp}[2]} vd v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc Fi[2] Fi[2] Fp FC4 FC4 FC4 FC10{ m FC4 FC4} Fp Fi Fi FC11{ m Fp}[4] Fp} vd v1 v2 v3}


 S3209C1 ::~S3209C1(){ note_dtor("S3209C1", this);}
void  S3209C1 ::v1(){vfunc_called(this, "_ZN7S3209C12v1Ev");}
void  S3209C1 ::v2(){vfunc_called(this, "_ZN7S3209C12v2Ev");}
void  S3209C1 ::v3(){vfunc_called(this, "_ZN7S3209C12v3Ev");}
S3209C1 ::S3209C1(){ note_ctor("S3209C1", this);} // tgen

static void Test_S3209C1()
{
  extern Class_Descriptor cd_S3209C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(36,54)];
    init_test(&cd_S3209C1, buf);
    S3209C1 *dp, &lv = *(dp=new (buf) S3209C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(280,212), "sizeof(S3209C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3209C1)");
    check_base_class_offset(lv, (S3209C3*)(S3209C2*), 0, "S3209C1");
    check_base_class_offset(lv, (S3209C2*), 0, "S3209C1");
    test_class_info(&lv, &cd_S3209C1);
    dp->~S3209C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3209C1(Test_S3209C1, "S3209C1", ABISELECT(280,212));

#else // __cplusplus

extern void _ZN7S3209C1C1Ev();
extern void _ZN7S3209C1D1Ev();
Name_Map name_map_S3209C1[] = {
  NSPAIR(_ZN7S3209C1C1Ev),
  NSPAIR(_ZN7S3209C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3209C3;
extern VTBL_ENTRY _ZTI7S3209C3[];
extern  VTBL_ENTRY _ZTV7S3209C3[];
extern Class_Descriptor cd_S3209C2;
extern VTBL_ENTRY _ZTI7S3209C2[];
extern  VTBL_ENTRY _ZTV7S3209C2[];
static Base_Class bases_S3209C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3209C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3209C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S3209C1[];
extern void _ZN7S3209C1D1Ev();
extern void _ZN7S3209C1D0Ev();
extern void _ZN7S3209C32v4Ev();
extern void _ZN7S3209C32v5Ev();
extern void _ZN7S3209C32v6Ev();
extern void _ZN7S3209C32v7Ev();
extern void _ZN7S3209C32v8Ev();
extern void _ZN7S3209C32v9Ev();
extern void _ZN7S3209C33v10Ev();
extern void _ZN7S3209C33v11Ev();
extern void _ZN7S3209C33v12Ev();
extern void _ZN7S3209C33v13Ev();
extern void _ZN7S3209C33v14Ev();
extern void _ZN7S3209C33v15Ev();
extern void _ZN7S3209C33v16Ev();
extern void _ZN7S3209C33v17Ev();
extern void _ZN7S3209C33v18Ev();
extern void _ZN7S3209C23v19Ev();
extern void _ZN7S3209C23v20Ev();
extern void _ZN7S3209C23v21Ev();
extern void _ZN7S3209C23v22Ev();
extern void _ZN7S3209C23v23Ev();
extern void _ZN7S3209C23v24Ev();
extern void _ZN7S3209C23v25Ev();
extern void _ZN7S3209C23v26Ev();
extern void _ZN7S3209C23v27Ev();
extern void _ZN7S3209C23v28Ev();
extern void _ZN7S3209C23v29Ev();
extern void _ZN7S3209C23v30Ev();
extern void _ZN7S3209C23v31Ev();
extern void _ZN7S3209C23v32Ev();
extern void _ZN7S3209C23v33Ev();
extern void _ZN7S3209C12v1Ev();
extern void _ZN7S3209C12v2Ev();
extern void _ZN7S3209C12v3Ev();
static  VTBL_ENTRY vtc_S3209C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3209C1[0]),
  (VTBL_ENTRY)&_ZN7S3209C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3209C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3209C32v4Ev,
  (VTBL_ENTRY)&_ZN7S3209C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3209C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3209C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3209C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3209C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3209C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3209C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3209C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3209C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3209C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3209C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3209C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3209C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3209C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3209C23v19Ev,
  (VTBL_ENTRY)&_ZN7S3209C23v20Ev,
  (VTBL_ENTRY)&_ZN7S3209C23v21Ev,
  (VTBL_ENTRY)&_ZN7S3209C23v22Ev,
  (VTBL_ENTRY)&_ZN7S3209C23v23Ev,
  (VTBL_ENTRY)&_ZN7S3209C23v24Ev,
  (VTBL_ENTRY)&_ZN7S3209C23v25Ev,
  (VTBL_ENTRY)&_ZN7S3209C23v26Ev,
  (VTBL_ENTRY)&_ZN7S3209C23v27Ev,
  (VTBL_ENTRY)&_ZN7S3209C23v28Ev,
  (VTBL_ENTRY)&_ZN7S3209C23v29Ev,
  (VTBL_ENTRY)&_ZN7S3209C23v30Ev,
  (VTBL_ENTRY)&_ZN7S3209C23v31Ev,
  (VTBL_ENTRY)&_ZN7S3209C23v32Ev,
  (VTBL_ENTRY)&_ZN7S3209C23v33Ev,
  (VTBL_ENTRY)&_ZN7S3209C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3209C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3209C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S3209C1[];
extern  VTBL_ENTRY _ZTV7S3209C1[];
Class_Descriptor cd_S3209C1 = {  "S3209C1", // class name
  bases_S3209C1, 2,
  &(vtc_S3209C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(280,212), // object size
  NSPAIRA(_ZTI7S3209C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3209C1),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7802C4  {
  ::S601C21_nt s7802c4f0;
  void *s7802c4f1;
  virtual void  v5(); // _ZN7S7802C42v5Ev
  virtual void  v6(); // _ZN7S7802C42v6Ev
  virtual void  v7(); // _ZN7S7802C42v7Ev
  virtual void  v8(); // _ZN7S7802C42v8Ev
  virtual void  v9(); // _ZN7S7802C42v9Ev
  ~S7802C4(); // tgen
  S7802C4(); // tgen
};
//SIG(-1 S7802C4) C1{ v1 v2 v3 v4 v5 FC2{} Fp}


void  S7802C4 ::v5(){vfunc_called(this, "_ZN7S7802C42v5Ev");}
void  S7802C4 ::v6(){vfunc_called(this, "_ZN7S7802C42v6Ev");}
void  S7802C4 ::v7(){vfunc_called(this, "_ZN7S7802C42v7Ev");}
void  S7802C4 ::v8(){vfunc_called(this, "_ZN7S7802C42v8Ev");}
void  S7802C4 ::v9(){vfunc_called(this, "_ZN7S7802C42v9Ev");}
S7802C4 ::~S7802C4(){ note_dtor("S7802C4", this);} // tgen
S7802C4 ::S7802C4(){ note_ctor("S7802C4", this);} // tgen

static void Test_S7802C4()
{
  extern Class_Descriptor cd_S7802C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S7802C4, buf);
    S7802C4 *dp, &lv = *(dp=new (buf) S7802C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S7802C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7802C4)");
    check_field_offset(lv, s7802c4f0, ABISELECT(8,4), "S7802C4.s7802c4f0");
    check_field_offset(lv, s7802c4f1, ABISELECT(16,8), "S7802C4.s7802c4f1");
    test_class_info(&lv, &cd_S7802C4);
    dp->~S7802C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7802C4(Test_S7802C4, "S7802C4", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S7802C4C1Ev();
extern void _ZN7S7802C4D1Ev();
Name_Map name_map_S7802C4[] = {
  NSPAIR(_ZN7S7802C4C1Ev),
  NSPAIR(_ZN7S7802C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7802C4[];
extern void _ZN7S7802C42v5Ev();
extern void _ZN7S7802C42v6Ev();
extern void _ZN7S7802C42v7Ev();
extern void _ZN7S7802C42v8Ev();
extern void _ZN7S7802C42v9Ev();
static  VTBL_ENTRY vtc_S7802C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7802C4[0]),
  (VTBL_ENTRY)&_ZN7S7802C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7802C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7802C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7802C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7802C42v9Ev,
};
extern VTBL_ENTRY _ZTI7S7802C4[];
extern  VTBL_ENTRY _ZTV7S7802C4[];
Class_Descriptor cd_S7802C4 = {  "S7802C4", // class name
  0,0,//no base classes
  &(vtc_S7802C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S7802C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7802C4),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  S7802C9  {
  virtual  ~S7802C9(); // _ZN7S7802C9D1Ev
  virtual void  v16(); // _ZN7S7802C93v16Ev
  virtual void  v17(); // _ZN7S7802C93v17Ev
  virtual void  v18(); // _ZN7S7802C93v18Ev
  virtual void  v19(); // _ZN7S7802C93v19Ev
  virtual void  v20(); // _ZN7S7802C93v20Ev
  virtual void  v21(); // _ZN7S7802C93v21Ev
  S7802C9(); // tgen
};
//SIG(-1 S7802C9) C1{ vd v1 v2 v3 v4 v5 v6}


 S7802C9 ::~S7802C9(){ note_dtor("S7802C9", this);}
void  S7802C9 ::v16(){vfunc_called(this, "_ZN7S7802C93v16Ev");}
void  S7802C9 ::v17(){vfunc_called(this, "_ZN7S7802C93v17Ev");}
void  S7802C9 ::v18(){vfunc_called(this, "_ZN7S7802C93v18Ev");}
void  S7802C9 ::v19(){vfunc_called(this, "_ZN7S7802C93v19Ev");}
void  S7802C9 ::v20(){vfunc_called(this, "_ZN7S7802C93v20Ev");}
void  S7802C9 ::v21(){vfunc_called(this, "_ZN7S7802C93v21Ev");}
S7802C9 ::S7802C9(){ note_ctor("S7802C9", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S7802C9C1Ev();
extern void _ZN7S7802C9D1Ev();
Name_Map name_map_S7802C9[] = {
  NSPAIR(_ZN7S7802C9C1Ev),
  NSPAIR(_ZN7S7802C9D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7802C9[];
extern void _ZN7S7802C9D1Ev();
extern void _ZN7S7802C9D0Ev();
extern void _ZN7S7802C93v16Ev();
extern void _ZN7S7802C93v17Ev();
extern void _ZN7S7802C93v18Ev();
extern void _ZN7S7802C93v19Ev();
extern void _ZN7S7802C93v20Ev();
extern void _ZN7S7802C93v21Ev();
static  VTBL_ENTRY vtc_S7802C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7802C9[0]),
  (VTBL_ENTRY)&_ZN7S7802C9D1Ev,
  (VTBL_ENTRY)&_ZN7S7802C9D0Ev,
  (VTBL_ENTRY)&_ZN7S7802C93v16Ev,
  (VTBL_ENTRY)&_ZN7S7802C93v17Ev,
  (VTBL_ENTRY)&_ZN7S7802C93v18Ev,
  (VTBL_ENTRY)&_ZN7S7802C93v19Ev,
  (VTBL_ENTRY)&_ZN7S7802C93v20Ev,
  (VTBL_ENTRY)&_ZN7S7802C93v21Ev,
};
extern VTBL_ENTRY _ZTI7S7802C9[];
extern  VTBL_ENTRY _ZTV7S7802C9[];
Class_Descriptor cd_S7802C9 = {  "S7802C9", // class name
  0,0,//no base classes
  &(vtc_S7802C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7802C9),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7802C9),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7802C8  {
  ::S7802C9 s7802c8f0;
  int s7802c8f1;
  virtual void  v10(); // _ZN7S7802C83v10Ev
  virtual void  v11(); // _ZN7S7802C83v11Ev
  virtual void  v12(); // _ZN7S7802C83v12Ev
  virtual void  v13(); // _ZN7S7802C83v13Ev
  virtual void  v14(); // _ZN7S7802C83v14Ev
  virtual void  v15(); // _ZN7S7802C83v15Ev
  ~S7802C8(); // tgen
  S7802C8(); // tgen
};
//SIG(-1 S7802C8) C1{ v1 v2 v3 v4 v5 v6 FC2{ vd v7 v8 v9 v10 v11 v12} Fi}


void  S7802C8 ::v10(){vfunc_called(this, "_ZN7S7802C83v10Ev");}
void  S7802C8 ::v11(){vfunc_called(this, "_ZN7S7802C83v11Ev");}
void  S7802C8 ::v12(){vfunc_called(this, "_ZN7S7802C83v12Ev");}
void  S7802C8 ::v13(){vfunc_called(this, "_ZN7S7802C83v13Ev");}
void  S7802C8 ::v14(){vfunc_called(this, "_ZN7S7802C83v14Ev");}
void  S7802C8 ::v15(){vfunc_called(this, "_ZN7S7802C83v15Ev");}
S7802C8 ::~S7802C8(){ note_dtor("S7802C8", this);} // tgen
S7802C8 ::S7802C8(){ note_ctor("S7802C8", this);} // tgen

static void Test_S7802C8()
{
  extern Class_Descriptor cd_S7802C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S7802C8, buf);
    S7802C8 *dp, &lv = *(dp=new (buf) S7802C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S7802C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7802C8)");
    check_field_offset(lv, s7802c8f0, ABISELECT(8,4), "S7802C8.s7802c8f0");
    check_field_offset(lv, s7802c8f1, ABISELECT(16,8), "S7802C8.s7802c8f1");
    test_class_info(&lv, &cd_S7802C8);
    dp->~S7802C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7802C8(Test_S7802C8, "S7802C8", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S7802C8C1Ev();
extern void _ZN7S7802C8D1Ev();
Name_Map name_map_S7802C8[] = {
  NSPAIR(_ZN7S7802C8C1Ev),
  NSPAIR(_ZN7S7802C8D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7802C8[];
extern void _ZN7S7802C83v10Ev();
extern void _ZN7S7802C83v11Ev();
extern void _ZN7S7802C83v12Ev();
extern void _ZN7S7802C83v13Ev();
extern void _ZN7S7802C83v14Ev();
extern void _ZN7S7802C83v15Ev();
static  VTBL_ENTRY vtc_S7802C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7802C8[0]),
  (VTBL_ENTRY)&_ZN7S7802C83v10Ev,
  (VTBL_ENTRY)&_ZN7S7802C83v11Ev,
  (VTBL_ENTRY)&_ZN7S7802C83v12Ev,
  (VTBL_ENTRY)&_ZN7S7802C83v13Ev,
  (VTBL_ENTRY)&_ZN7S7802C83v14Ev,
  (VTBL_ENTRY)&_ZN7S7802C83v15Ev,
};
extern VTBL_ENTRY _ZTI7S7802C8[];
extern  VTBL_ENTRY _ZTV7S7802C8[];
Class_Descriptor cd_S7802C8 = {  "S7802C8", // class name
  0,0,//no base classes
  &(vtc_S7802C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S7802C8),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7802C8),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  S7802C7  : S7802C8 , S7802C9 {
  virtual  ~S7802C7(); // _ZN7S7802C7D1Ev
  virtual void  v22(); // _ZN7S7802C73v22Ev
  virtual void  v23(); // _ZN7S7802C73v23Ev
  virtual void  v24(); // _ZN7S7802C73v24Ev
  virtual void  v25(); // _ZN7S7802C73v25Ev
  virtual void  v26(); // _ZN7S7802C73v26Ev
  S7802C7(); // tgen
};
//SIG(-1 S7802C7) C1{ BC2{ v6 v7 v8 v9 v10 v11 FC3{ vd v12 v13 v14 v15 v16 v17} Fi} BC3 vd v1 v2 v3 v4 v5}


 S7802C7 ::~S7802C7(){ note_dtor("S7802C7", this);}
void  S7802C7 ::v22(){vfunc_called(this, "_ZN7S7802C73v22Ev");}
void  S7802C7 ::v23(){vfunc_called(this, "_ZN7S7802C73v23Ev");}
void  S7802C7 ::v24(){vfunc_called(this, "_ZN7S7802C73v24Ev");}
void  S7802C7 ::v25(){vfunc_called(this, "_ZN7S7802C73v25Ev");}
void  S7802C7 ::v26(){vfunc_called(this, "_ZN7S7802C73v26Ev");}
S7802C7 ::S7802C7(){ note_ctor("S7802C7", this);} // tgen

static void Test_S7802C7()
{
  extern Class_Descriptor cd_S7802C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S7802C7, buf);
    S7802C7 *dp, &lv = *(dp=new (buf) S7802C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S7802C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7802C7)");
    check_base_class_offset(lv, (S7802C8*), 0, "S7802C7");
    check_base_class_offset(lv, (S7802C9*), ABISELECT(24,12), "S7802C7");
    test_class_info(&lv, &cd_S7802C7);
    dp->~S7802C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7802C7(Test_S7802C7, "S7802C7", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S7802C7C1Ev();
extern void _ZN7S7802C7D1Ev();
Name_Map name_map_S7802C7[] = {
  NSPAIR(_ZN7S7802C7C1Ev),
  NSPAIR(_ZN7S7802C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7802C8;
extern VTBL_ENTRY _ZTI7S7802C8[];
extern  VTBL_ENTRY _ZTV7S7802C8[];
extern Class_Descriptor cd_S7802C9;
extern VTBL_ENTRY _ZTI7S7802C9[];
extern  VTBL_ENTRY _ZTV7S7802C9[];
static Base_Class bases_S7802C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7802C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S7802C9,    ABISELECT(24,12), //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
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7802C7[];
extern void _ZN7S7802C83v10Ev();
extern void _ZN7S7802C83v11Ev();
extern void _ZN7S7802C83v12Ev();
extern void _ZN7S7802C83v13Ev();
extern void _ZN7S7802C83v14Ev();
extern void _ZN7S7802C83v15Ev();
extern void _ZN7S7802C7D1Ev();
extern void _ZN7S7802C7D0Ev();
extern void _ZN7S7802C73v22Ev();
extern void _ZN7S7802C73v23Ev();
extern void _ZN7S7802C73v24Ev();
extern void _ZN7S7802C73v25Ev();
extern void _ZN7S7802C73v26Ev();
extern void ABISELECT(_ZThn24_N7S7802C7D1Ev,_ZThn12_N7S7802C7D1Ev)();
extern void ABISELECT(_ZThn24_N7S7802C7D0Ev,_ZThn12_N7S7802C7D0Ev)();
extern void _ZN7S7802C93v16Ev();
extern void _ZN7S7802C93v17Ev();
extern void _ZN7S7802C93v18Ev();
extern void _ZN7S7802C93v19Ev();
extern void _ZN7S7802C93v20Ev();
extern void _ZN7S7802C93v21Ev();
static  VTBL_ENTRY vtc_S7802C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7802C7[0]),
  (VTBL_ENTRY)&_ZN7S7802C83v10Ev,
  (VTBL_ENTRY)&_ZN7S7802C83v11Ev,
  (VTBL_ENTRY)&_ZN7S7802C83v12Ev,
  (VTBL_ENTRY)&_ZN7S7802C83v13Ev,
  (VTBL_ENTRY)&_ZN7S7802C83v14Ev,
  (VTBL_ENTRY)&_ZN7S7802C83v15Ev,
  (VTBL_ENTRY)&_ZN7S7802C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7802C7D0Ev,
  (VTBL_ENTRY)&_ZN7S7802C73v22Ev,
  (VTBL_ENTRY)&_ZN7S7802C73v23Ev,
  (VTBL_ENTRY)&_ZN7S7802C73v24Ev,
  (VTBL_ENTRY)&_ZN7S7802C73v25Ev,
  (VTBL_ENTRY)&_ZN7S7802C73v26Ev,
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S7802C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N7S7802C7D1Ev,_ZThn12_N7S7802C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N7S7802C7D0Ev,_ZThn12_N7S7802C7D0Ev),
  (VTBL_ENTRY)&_ZN7S7802C93v16Ev,
  (VTBL_ENTRY)&_ZN7S7802C93v17Ev,
  (VTBL_ENTRY)&_ZN7S7802C93v18Ev,
  (VTBL_ENTRY)&_ZN7S7802C93v19Ev,
  (VTBL_ENTRY)&_ZN7S7802C93v20Ev,
  (VTBL_ENTRY)&_ZN7S7802C93v21Ev,
};
extern VTBL_ENTRY _ZTI7S7802C7[];
extern  VTBL_ENTRY _ZTV7S7802C7[];
Class_Descriptor cd_S7802C7 = {  "S7802C7", // class name
  bases_S7802C7, 2,
  &(vtc_S7802C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S7802C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7802C7),25, //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  S7802C6  : virtual S7802C7 , virtual S7802C4 {
  virtual  ~S7802C6(); // _ZN7S7802C6D2Ev
  virtual void  v27(); // _ZN7S7802C63v27Ev
  virtual void  v28(); // _ZN7S7802C63v28Ev
  S7802C6(); // tgen
};
//SIG(-1 S7802C6) C1{ VBC2{ BC3{ v3 v4 v5 v6 v7 v8 FC4{ vd v9 v10 v11 v12 v13 v14} Fi} BC4 vd v15 v16 v17 v18 v19} VBC5{ v20 v21 v22 v23 v24 FC6{} Fp} vd v1 v2}


 S7802C6 ::~S7802C6(){ note_dtor("S7802C6", this);}
void  S7802C6 ::v27(){vfunc_called(this, "_ZN7S7802C63v27Ev");}
void  S7802C6 ::v28(){vfunc_called(this, "_ZN7S7802C63v28Ev");}
S7802C6 ::S7802C6(){ note_ctor("S7802C6", this);} // tgen

static void Test_S7802C6()
{
  extern Class_Descriptor cd_S7802C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[9];
    init_test(&cd_S7802C6, buf);
    S7802C6 *dp, &lv = *(dp=new (buf) S7802C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S7802C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7802C6)");
    check_base_class_offset(lv, (S7802C8*)(S7802C7*), ABISELECT(8,4), "S7802C6");
    check_base_class_offset(lv, (S7802C9*)(S7802C7*), ABISELECT(32,16), "S7802C6");
    check_base_class_offset(lv, (S7802C7*), ABISELECT(8,4), "S7802C6");
    check_base_class_offset(lv, (S7802C4*), ABISELECT(40,20), "S7802C6");
    test_class_info(&lv, &cd_S7802C6);
    dp->~S7802C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7802C6(Test_S7802C6, "S7802C6", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN7S7802C6C1Ev();
extern void _ZN7S7802C6D2Ev();
Name_Map name_map_S7802C6[] = {
  NSPAIR(_ZN7S7802C6C1Ev),
  NSPAIR(_ZN7S7802C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7802C8;
extern VTBL_ENTRY _ZTI7S7802C8[];
extern  VTBL_ENTRY _ZTV7S7802C8[];
extern Class_Descriptor cd_S7802C9;
extern VTBL_ENTRY _ZTI7S7802C9[];
extern  VTBL_ENTRY _ZTV7S7802C9[];
extern Class_Descriptor cd_S7802C7;
extern VTBL_ENTRY _ZTI7S7802C7[];
extern  VTBL_ENTRY _ZTV7S7802C7[];
extern Class_Descriptor cd_S7802C4;
extern VTBL_ENTRY _ZTI7S7802C4[];
extern  VTBL_ENTRY _ZTV7S7802C4[];
static Base_Class bases_S7802C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7802C8,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7802C9,    ABISELECT(32,16), //bcp->offset
    41, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7802C7,    ABISELECT(8,4), //bcp->offset
    8, //bcp->virtual_function_table_offset
    20, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7802C4,    ABISELECT(40,20), //bcp->offset
    51, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7802C6[];
extern void _ZN7S7802C6D1Ev();
extern void _ZN7S7802C6D0Ev();
extern void _ZN7S7802C63v27Ev();
extern void _ZN7S7802C63v28Ev();
extern void _ZN7S7802C83v10Ev();
extern void _ZN7S7802C83v11Ev();
extern void _ZN7S7802C83v12Ev();
extern void _ZN7S7802C83v13Ev();
extern void _ZN7S7802C83v14Ev();
extern void _ZN7S7802C83v15Ev();
extern void ABISELECT(_ZTv0_n72_N7S7802C6D1Ev,_ZTv0_n36_N7S7802C6D1Ev)();
extern void ABISELECT(_ZThn8_N7S7802C6D1Ev,_ZThn4_N7S7802C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S7802C6D0Ev,_ZTv0_n36_N7S7802C6D0Ev)();
extern void ABISELECT(_ZThn8_N7S7802C6D0Ev,_ZThn4_N7S7802C6D0Ev)() __attribute__((weak));
extern void _ZN7S7802C73v22Ev();
extern void _ZN7S7802C73v23Ev();
extern void _ZN7S7802C73v24Ev();
extern void _ZN7S7802C73v25Ev();
extern void _ZN7S7802C73v26Ev();
extern void ABISELECT(_ZTvn24_n72_N7S7802C6D1Ev,_ZTvn12_n36_N7S7802C6D1Ev)();
extern void ABISELECT(_ZTvn24_n72_N7S7802C6D0Ev,_ZTvn12_n36_N7S7802C6D0Ev)();
extern void _ZN7S7802C93v16Ev();
extern void _ZN7S7802C93v17Ev();
extern void _ZN7S7802C93v18Ev();
extern void _ZN7S7802C93v19Ev();
extern void _ZN7S7802C93v20Ev();
extern void _ZN7S7802C93v21Ev();
extern void _ZN7S7802C42v5Ev();
extern void _ZN7S7802C42v6Ev();
extern void _ZN7S7802C42v7Ev();
extern void _ZN7S7802C42v8Ev();
extern void _ZN7S7802C42v9Ev();
static  VTBL_ENTRY vtc_S7802C6[] = {
  ABISELECT(40,20),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7802C6[0]),
  (VTBL_ENTRY)&_ZN7S7802C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7802C6D0Ev,
  (VTBL_ENTRY)&_ZN7S7802C63v27Ev,
  (VTBL_ENTRY)&_ZN7S7802C63v28Ev,
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7802C6[0]),
  (VTBL_ENTRY)&_ZN7S7802C83v10Ev,
  (VTBL_ENTRY)&_ZN7S7802C83v11Ev,
  (VTBL_ENTRY)&_ZN7S7802C83v12Ev,
  (VTBL_ENTRY)&_ZN7S7802C83v13Ev,
  (VTBL_ENTRY)&_ZN7S7802C83v14Ev,
  (VTBL_ENTRY)&_ZN7S7802C83v15Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S7802C6D1Ev,_ZTv0_n36_N7S7802C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S7802C6D0Ev,_ZTv0_n36_N7S7802C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7802C73v22Ev,
  (VTBL_ENTRY)&_ZN7S7802C73v23Ev,
  (VTBL_ENTRY)&_ZN7S7802C73v24Ev,
  (VTBL_ENTRY)&_ZN7S7802C73v25Ev,
  (VTBL_ENTRY)&_ZN7S7802C73v26Ev,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S7802C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N7S7802C6D1Ev,_ZTvn12_n36_N7S7802C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N7S7802C6D0Ev,_ZTvn12_n36_N7S7802C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7802C93v16Ev,
  (VTBL_ENTRY)&_ZN7S7802C93v17Ev,
  (VTBL_ENTRY)&_ZN7S7802C93v18Ev,
  (VTBL_ENTRY)&_ZN7S7802C93v19Ev,
  (VTBL_ENTRY)&_ZN7S7802C93v20Ev,
  (VTBL_ENTRY)&_ZN7S7802C93v21Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S7802C6[0]),
  (VTBL_ENTRY)&_ZN7S7802C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7802C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7802C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7802C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7802C42v9Ev,
};
extern VTBL_ENTRY _ZTV7S7802C6[];
static  VTT_ENTRY vtt_S7802C6[] = {
  {&(_ZTV7S7802C6[4]),  4,63},
  {&(_ZTV7S7802C6[28]),  28,63},
  {&(_ZTV7S7802C6[43]),  43,63},
  {&(_ZTV7S7802C6[58]),  58,63},
};
extern VTBL_ENTRY _ZTI7S7802C6[];
extern  VTBL_ENTRY _ZTV7S7802C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7802C6[];
static VTBL_ENTRY alt_thunk_names5[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S7802C6D0Ev,_ZTv0_n36_N7S7802C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7802C6D0Ev,_ZThn4_N7S7802C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S7802C6D1Ev,_ZTv0_n36_N7S7802C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7802C6D1Ev,_ZThn4_N7S7802C6D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7802C6 = {  "S7802C6", // class name
  bases_S7802C6, 4,
  &(vtc_S7802C6[0]), // expected_vtbl_contents
  &(vtt_S7802C6[0]), // expected_vtt_contents
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI7S7802C6),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7802C6),63, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7802C6),4, //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  S7802C3  : virtual S7802C4 , virtual S7802C6 {
  virtual  ~S7802C3(); // _ZN7S7802C3D2Ev
  virtual void  v29(); // _ZN7S7802C33v29Ev
  S7802C3(); // tgen
};
//SIG(-1 S7802C3) C1{ VBC2{ v2 v3 v4 v5 v6 FC3{} Fp} VBC4{ VBC5{ BC6{ v7 v8 v9 v10 v11 v12 FC7{ vd v13 v14 v15 v16 v17 v18} Fi} BC7 vd v19 v20 v21 v22 v23} VBC2 vd v24 v25} vd v1}


 S7802C3 ::~S7802C3(){ note_dtor("S7802C3", this);}
void  S7802C3 ::v29(){vfunc_called(this, "_ZN7S7802C33v29Ev");}
S7802C3 ::S7802C3(){ note_ctor("S7802C3", this);} // tgen

static void Test_S7802C3()
{
  extern Class_Descriptor cd_S7802C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[9];
    init_test(&cd_S7802C3, buf);
    S7802C3 *dp, &lv = *(dp=new (buf) S7802C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S7802C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7802C3)");
    check_base_class_offset(lv, (S7802C4*), ABISELECT(8,4), "S7802C3");
    check_base_class_offset(lv, (S7802C4*)(S7802C6*), ABISELECT(8,4), "S7802C3");
    check_base_class_offset(lv, (S7802C8*)(S7802C7*), ABISELECT(32,16), "S7802C3");
    check_base_class_offset(lv, (S7802C9*)(S7802C7*), ABISELECT(56,28), "S7802C3");
    check_base_class_offset(lv, (S7802C7*)(S7802C6*), ABISELECT(32,16), "S7802C3");
    check_base_class_offset(lv, (S7802C6*), 0, "S7802C3");
    test_class_info(&lv, &cd_S7802C3);
    dp->~S7802C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7802C3(Test_S7802C3, "S7802C3", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN7S7802C3C1Ev();
extern void _ZN7S7802C3D2Ev();
Name_Map name_map_S7802C3[] = {
  NSPAIR(_ZN7S7802C3C1Ev),
  NSPAIR(_ZN7S7802C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7802C4;
extern VTBL_ENTRY _ZTI7S7802C4[];
extern  VTBL_ENTRY _ZTV7S7802C4[];
extern Class_Descriptor cd_S7802C8;
extern VTBL_ENTRY _ZTI7S7802C8[];
extern  VTBL_ENTRY _ZTV7S7802C8[];
extern Class_Descriptor cd_S7802C9;
extern VTBL_ENTRY _ZTI7S7802C9[];
extern  VTBL_ENTRY _ZTV7S7802C9[];
extern Class_Descriptor cd_S7802C7;
extern VTBL_ENTRY _ZTI7S7802C7[];
extern  VTBL_ENTRY _ZTV7S7802C7[];
extern Class_Descriptor cd_S7802C6;
extern VTBL_ENTRY _ZTI7S7802C6[];
extern  VTBL_ENTRY _ZTV7S7802C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7802C6[];
static Base_Class bases_S7802C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7802C4,    ABISELECT(8,4), //bcp->offset
    13, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7802C8,    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
    3, //immediately_derived
  0, 0},
  {&cd_S7802C9,    ABISELECT(56,28), //bcp->offset
    58, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7802C7,    ABISELECT(32,16), //bcp->offset
    25, //bcp->virtual_function_table_offset
    20, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7802C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7802C3[];
extern void _ZN7S7802C3D1Ev();
extern void _ZN7S7802C3D0Ev();
extern void _ZN7S7802C63v27Ev();
extern void _ZN7S7802C63v28Ev();
extern void _ZN7S7802C33v29Ev();
extern void _ZN7S7802C42v5Ev();
extern void _ZN7S7802C42v6Ev();
extern void _ZN7S7802C42v7Ev();
extern void _ZN7S7802C42v8Ev();
extern void _ZN7S7802C42v9Ev();
extern void _ZN7S7802C83v10Ev();
extern void _ZN7S7802C83v11Ev();
extern void _ZN7S7802C83v12Ev();
extern void _ZN7S7802C83v13Ev();
extern void _ZN7S7802C83v14Ev();
extern void _ZN7S7802C83v15Ev();
extern void ABISELECT(_ZTv0_n72_N7S7802C3D1Ev,_ZTv0_n36_N7S7802C3D1Ev)();
extern void ABISELECT(_ZThn32_N7S7802C3D1Ev,_ZThn16_N7S7802C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S7802C3D0Ev,_ZTv0_n36_N7S7802C3D0Ev)();
extern void ABISELECT(_ZThn32_N7S7802C3D0Ev,_ZThn16_N7S7802C3D0Ev)() __attribute__((weak));
extern void _ZN7S7802C73v22Ev();
extern void _ZN7S7802C73v23Ev();
extern void _ZN7S7802C73v24Ev();
extern void _ZN7S7802C73v25Ev();
extern void _ZN7S7802C73v26Ev();
extern void ABISELECT(_ZTvn24_n72_N7S7802C3D1Ev,_ZTvn12_n36_N7S7802C3D1Ev)();
extern void ABISELECT(_ZTvn24_n72_N7S7802C3D0Ev,_ZTvn12_n36_N7S7802C3D0Ev)();
extern void _ZN7S7802C93v16Ev();
extern void _ZN7S7802C93v17Ev();
extern void _ZN7S7802C93v18Ev();
extern void _ZN7S7802C93v19Ev();
extern void _ZN7S7802C93v20Ev();
extern void _ZN7S7802C93v21Ev();
static  VTBL_ENTRY vtc_S7802C3[] = {
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7802C3[0]),
  (VTBL_ENTRY)&_ZN7S7802C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7802C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7802C63v27Ev,
  (VTBL_ENTRY)&_ZN7S7802C63v28Ev,
  (VTBL_ENTRY)&_ZN7S7802C33v29Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7802C3[0]),
  (VTBL_ENTRY)&_ZN7S7802C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7802C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7802C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7802C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7802C42v9Ev,
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-16),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S7802C3[0]),
  (VTBL_ENTRY)&_ZN7S7802C83v10Ev,
  (VTBL_ENTRY)&_ZN7S7802C83v11Ev,
  (VTBL_ENTRY)&_ZN7S7802C83v12Ev,
  (VTBL_ENTRY)&_ZN7S7802C83v13Ev,
  (VTBL_ENTRY)&_ZN7S7802C83v14Ev,
  (VTBL_ENTRY)&_ZN7S7802C83v15Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S7802C3D1Ev,_ZTv0_n36_N7S7802C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S7802C3D0Ev,_ZTv0_n36_N7S7802C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7802C73v22Ev,
  (VTBL_ENTRY)&_ZN7S7802C73v23Ev,
  (VTBL_ENTRY)&_ZN7S7802C73v24Ev,
  (VTBL_ENTRY)&_ZN7S7802C73v25Ev,
  (VTBL_ENTRY)&_ZN7S7802C73v26Ev,
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI7S7802C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N7S7802C3D1Ev,_ZTvn12_n36_N7S7802C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N7S7802C3D0Ev,_ZTvn12_n36_N7S7802C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7802C93v16Ev,
  (VTBL_ENTRY)&_ZN7S7802C93v17Ev,
  (VTBL_ENTRY)&_ZN7S7802C93v18Ev,
  (VTBL_ENTRY)&_ZN7S7802C93v19Ev,
  (VTBL_ENTRY)&_ZN7S7802C93v20Ev,
  (VTBL_ENTRY)&_ZN7S7802C93v21Ev,
};
extern VTBL_ENTRY _ZTV7S7802C3[];
extern void _ZN7S7802C6D1Ev();
extern void _ZN7S7802C6D0Ev();
extern void _ZN7S7802C63v27Ev();
extern void _ZN7S7802C63v28Ev();
static  VTBL_ENTRY _tg__ZTV7S7802C6__7S7802C3[] = {
  ABISELECT(8,4),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7802C6[0]),
  (VTBL_ENTRY)&_ZN7S7802C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7802C6D0Ev,
  (VTBL_ENTRY)&_ZN7S7802C63v27Ev,
  (VTBL_ENTRY)&_ZN7S7802C63v28Ev,
};
extern void _ZN7S7802C83v10Ev();
extern void _ZN7S7802C83v11Ev();
extern void _ZN7S7802C83v12Ev();
extern void _ZN7S7802C83v13Ev();
extern void _ZN7S7802C83v14Ev();
extern void _ZN7S7802C83v15Ev();
extern void ABISELECT(_ZTv0_n72_N7S7802C6D1Ev,_ZTv0_n36_N7S7802C6D1Ev)();
extern void ABISELECT(_ZThn32_N7S7802C6D1Ev,_ZThn16_N7S7802C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S7802C6D0Ev,_ZTv0_n36_N7S7802C6D0Ev)();
extern void ABISELECT(_ZThn32_N7S7802C6D0Ev,_ZThn16_N7S7802C6D0Ev)() __attribute__((weak));
extern void _ZN7S7802C73v22Ev();
extern void _ZN7S7802C73v23Ev();
extern void _ZN7S7802C73v24Ev();
extern void _ZN7S7802C73v25Ev();
extern void _ZN7S7802C73v26Ev();
static  VTBL_ENTRY _tg__ZTV7S7802C7__7S7802C6__7S7802C3[] = {
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-16),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S7802C6[0]),
  (VTBL_ENTRY)&_ZN7S7802C83v10Ev,
  (VTBL_ENTRY)&_ZN7S7802C83v11Ev,
  (VTBL_ENTRY)&_ZN7S7802C83v12Ev,
  (VTBL_ENTRY)&_ZN7S7802C83v13Ev,
  (VTBL_ENTRY)&_ZN7S7802C83v14Ev,
  (VTBL_ENTRY)&_ZN7S7802C83v15Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S7802C6D1Ev,_ZTv0_n36_N7S7802C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S7802C6D0Ev,_ZTv0_n36_N7S7802C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7802C73v22Ev,
  (VTBL_ENTRY)&_ZN7S7802C73v23Ev,
  (VTBL_ENTRY)&_ZN7S7802C73v24Ev,
  (VTBL_ENTRY)&_ZN7S7802C73v25Ev,
  (VTBL_ENTRY)&_ZN7S7802C73v26Ev,
};
extern void ABISELECT(_ZTvn24_n72_N7S7802C6D1Ev,_ZTvn12_n36_N7S7802C6D1Ev)();
extern void ABISELECT(_ZTvn24_n72_N7S7802C6D0Ev,_ZTvn12_n36_N7S7802C6D0Ev)();
extern void _ZN7S7802C93v16Ev();
extern void _ZN7S7802C93v17Ev();
extern void _ZN7S7802C93v18Ev();
extern void _ZN7S7802C93v19Ev();
extern void _ZN7S7802C93v20Ev();
extern void _ZN7S7802C93v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7802C97S7802C7__7S7802C6__7S7802C3[] = {
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI7S7802C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N7S7802C6D1Ev,_ZTvn12_n36_N7S7802C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N7S7802C6D0Ev,_ZTvn12_n36_N7S7802C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7802C93v16Ev,
  (VTBL_ENTRY)&_ZN7S7802C93v17Ev,
  (VTBL_ENTRY)&_ZN7S7802C93v18Ev,
  (VTBL_ENTRY)&_ZN7S7802C93v19Ev,
  (VTBL_ENTRY)&_ZN7S7802C93v20Ev,
  (VTBL_ENTRY)&_ZN7S7802C93v21Ev,
};
extern void _ZN7S7802C42v5Ev();
extern void _ZN7S7802C42v6Ev();
extern void _ZN7S7802C42v7Ev();
extern void _ZN7S7802C42v8Ev();
extern void _ZN7S7802C42v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7802C4__7S7802C6__7S7802C3[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7802C6[0]),
  (VTBL_ENTRY)&_ZN7S7802C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7802C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7802C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7802C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7802C42v9Ev,
};
static  VTT_ENTRY vtt_S7802C3[] = {
  {&(_ZTV7S7802C3[8]),  8,68},
  {&(_ZTV7S7802C3[20]),  20,68},
  {&(_ZTV7S7802C3[8]),  8,68},
  {&(_ZTV7S7802C3[45]),  45,68},
  {&(_ZTV7S7802C3[60]),  60,68},
  {&(_tg__ZTV7S7802C6__7S7802C3[4]),  4,8},
  {&(_tg__ZTV7S7802C7__7S7802C6__7S7802C3[20]),  20,33},
  {&(_tg__ZTV7S7802C97S7802C7__7S7802C6__7S7802C3[2]),  2,10},
  {&(_tg__ZTV7S7802C4__7S7802C6__7S7802C3[7]),  7,12},
};
extern VTBL_ENTRY _ZTI7S7802C3[];
extern  VTBL_ENTRY _ZTV7S7802C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7802C3[];
static VTBL_ENTRY alt_thunk_names6[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S7802C6D0Ev,_ZTv0_n36_N7S7802C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7802C6D0Ev,_ZThn16_N7S7802C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S7802C6D1Ev,_ZTv0_n36_N7S7802C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7802C6D1Ev,_ZThn16_N7S7802C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S7802C3D0Ev,_ZTv0_n36_N7S7802C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7802C3D0Ev,_ZThn16_N7S7802C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S7802C3D1Ev,_ZTv0_n36_N7S7802C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7802C3D1Ev,_ZThn16_N7S7802C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7802C3 = {  "S7802C3", // class name
  bases_S7802C3, 5,
  &(vtc_S7802C3[0]), // expected_vtbl_contents
  &(vtt_S7802C3[0]), // expected_vtt_contents
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI7S7802C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7802C3),68, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7802C3),9, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names6,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7802C10  : S7802C4 {
  ::S7802C4 s7802c10f0;
  virtual void  v30(); // _ZN8S7802C103v30Ev
  virtual void  v31(); // _ZN8S7802C103v31Ev
  virtual void  v32(); // _ZN8S7802C103v32Ev
  virtual void  v33(); // _ZN8S7802C103v33Ev
  virtual void  v34(); // _ZN8S7802C103v34Ev
  virtual void  v35(); // _ZN8S7802C103v35Ev
  virtual void  v36(); // _ZN8S7802C103v36Ev
  ~S7802C10(); // tgen
  S7802C10(); // tgen
};
//SIG(-1 S7802C10) C1{ BC2{ v8 v9 v10 v11 v12 FC3{} Fp} v1 v2 v3 v4 v5 v6 v7 FC2}


void  S7802C10 ::v30(){vfunc_called(this, "_ZN8S7802C103v30Ev");}
void  S7802C10 ::v31(){vfunc_called(this, "_ZN8S7802C103v31Ev");}
void  S7802C10 ::v32(){vfunc_called(this, "_ZN8S7802C103v32Ev");}
void  S7802C10 ::v33(){vfunc_called(this, "_ZN8S7802C103v33Ev");}
void  S7802C10 ::v34(){vfunc_called(this, "_ZN8S7802C103v34Ev");}
void  S7802C10 ::v35(){vfunc_called(this, "_ZN8S7802C103v35Ev");}
void  S7802C10 ::v36(){vfunc_called(this, "_ZN8S7802C103v36Ev");}
S7802C10 ::~S7802C10(){ note_dtor("S7802C10", this);} // tgen
S7802C10 ::S7802C10(){ note_ctor("S7802C10", this);} // tgen

static void Test_S7802C10()
{
  extern Class_Descriptor cd_S7802C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[7];
    init_test(&cd_S7802C10, buf);
    S7802C10 *dp, &lv = *(dp=new (buf) S7802C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S7802C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7802C10)");
    check_base_class_offset(lv, (S7802C4*), 0, "S7802C10");
    check_field_offset(lv, s7802c10f0, ABISELECT(24,12), "S7802C10.s7802c10f0");
    test_class_info(&lv, &cd_S7802C10);
    dp->~S7802C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7802C10(Test_S7802C10, "S7802C10", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN8S7802C10C1Ev();
extern void _ZN8S7802C10D1Ev();
Name_Map name_map_S7802C10[] = {
  NSPAIR(_ZN8S7802C10C1Ev),
  NSPAIR(_ZN8S7802C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7802C4;
extern VTBL_ENTRY _ZTI7S7802C4[];
extern  VTBL_ENTRY _ZTV7S7802C4[];
static Base_Class bases_S7802C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7802C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7802C10[];
extern void _ZN7S7802C42v5Ev();
extern void _ZN7S7802C42v6Ev();
extern void _ZN7S7802C42v7Ev();
extern void _ZN7S7802C42v8Ev();
extern void _ZN7S7802C42v9Ev();
extern void _ZN8S7802C103v30Ev();
extern void _ZN8S7802C103v31Ev();
extern void _ZN8S7802C103v32Ev();
extern void _ZN8S7802C103v33Ev();
extern void _ZN8S7802C103v34Ev();
extern void _ZN8S7802C103v35Ev();
extern void _ZN8S7802C103v36Ev();
static  VTBL_ENTRY vtc_S7802C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S7802C10[0]),
  (VTBL_ENTRY)&_ZN7S7802C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7802C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7802C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7802C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7802C42v9Ev,
  (VTBL_ENTRY)&_ZN8S7802C103v30Ev,
  (VTBL_ENTRY)&_ZN8S7802C103v31Ev,
  (VTBL_ENTRY)&_ZN8S7802C103v32Ev,
  (VTBL_ENTRY)&_ZN8S7802C103v33Ev,
  (VTBL_ENTRY)&_ZN8S7802C103v34Ev,
  (VTBL_ENTRY)&_ZN8S7802C103v35Ev,
  (VTBL_ENTRY)&_ZN8S7802C103v36Ev,
};
extern VTBL_ENTRY _ZTI8S7802C10[];
extern  VTBL_ENTRY _ZTV8S7802C10[];
Class_Descriptor cd_S7802C10 = {  "S7802C10", // class name
  bases_S7802C10, 1,
  &(vtc_S7802C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI8S7802C10),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S7802C10),14, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7802C11  {
  ::S601C21_nt s7802c11f0;
  virtual void  v45(); // _ZN8S7802C113v45Ev
  virtual void  v46(); // _ZN8S7802C113v46Ev
  virtual void  v47(); // _ZN8S7802C113v47Ev
  virtual void  v48(); // _ZN8S7802C113v48Ev
  ~S7802C11(); // tgen
  S7802C11(); // tgen
};
//SIG(-1 S7802C11) C1{ v1 v2 v3 v4 FC2{}}


void  S7802C11 ::v45(){vfunc_called(this, "_ZN8S7802C113v45Ev");}
void  S7802C11 ::v46(){vfunc_called(this, "_ZN8S7802C113v46Ev");}
void  S7802C11 ::v47(){vfunc_called(this, "_ZN8S7802C113v47Ev");}
void  S7802C11 ::v48(){vfunc_called(this, "_ZN8S7802C113v48Ev");}
S7802C11 ::~S7802C11(){ note_dtor("S7802C11", this);} // tgen
S7802C11 ::S7802C11(){ note_ctor("S7802C11", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S7802C11C1Ev();
extern void _ZN8S7802C11D1Ev();
Name_Map name_map_S7802C11[] = {
  NSPAIR(_ZN8S7802C11C1Ev),
  NSPAIR(_ZN8S7802C11D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S7802C11[];
extern void _ZN8S7802C113v45Ev();
extern void _ZN8S7802C113v46Ev();
extern void _ZN8S7802C113v47Ev();
extern void _ZN8S7802C113v48Ev();
static  VTBL_ENTRY vtc_S7802C11[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S7802C11[0]),
  (VTBL_ENTRY)&_ZN8S7802C113v45Ev,
  (VTBL_ENTRY)&_ZN8S7802C113v46Ev,
  (VTBL_ENTRY)&_ZN8S7802C113v47Ev,
  (VTBL_ENTRY)&_ZN8S7802C113v48Ev,
};
extern VTBL_ENTRY _ZTI8S7802C11[];
extern  VTBL_ENTRY _ZTV8S7802C11[];
Class_Descriptor cd_S7802C11 = {  "S7802C11", // class name
  0,0,//no base classes
  &(vtc_S7802C11[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S7802C11),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S7802C11),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7802C2  : virtual S7802C3 , S7802C10 {
  ::S7802C11 s7802c2f0;
  ~S7802C2(); // tgen
  S7802C2(); // tgen
};
//SIG(-1 S7802C2) C1{ VBC2{ VBC3{ v1 v2 v3 v4 v5 FC4{} Fp} VBC5{ VBC6{ BC7{ v6 v7 v8 v9 v10 v11 FC8{ vd v12 v13 v14 v15 v16 v17} Fi} BC8 vd v18 v19 v20 v21 v22} VBC3 vd v23 v24} vd v25} BC9{ BC3 v26 v27 v28 v29 v30 v31 v32 FC3} FC10{ v33 v34 v35 v36 FC4}}


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

static void Test_S7802C2()
{
  extern Class_Descriptor cd_S7802C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[17];
    init_test(&cd_S7802C2, buf);
    S7802C2 *dp, &lv = *(dp=new (buf) S7802C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,64), "sizeof(S7802C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7802C2)");
    check_base_class_offset(lv, (S7802C4*)(S7802C3*), ABISELECT(72,36), "S7802C2");
    check_base_class_offset(lv, (S7802C4*)(S7802C6*), ABISELECT(72,36), "S7802C2");
    check_base_class_offset(lv, (S7802C8*)(S7802C7*), ABISELECT(96,48), "S7802C2");
    check_base_class_offset(lv, (S7802C9*)(S7802C7*), ABISELECT(120,60), "S7802C2");
    check_base_class_offset(lv, (S7802C7*)(S7802C6*), ABISELECT(96,48), "S7802C2");
    check_base_class_offset(lv, (S7802C6*)(S7802C3*), ABISELECT(64,32), "S7802C2");
    check_base_class_offset(lv, (S7802C3*), ABISELECT(64,32), "S7802C2");
    check_base_class_offset(lv, (S7802C4*)(S7802C10*), 0, "S7802C2");
    check_base_class_offset(lv, (S7802C10*), 0, "S7802C2");
    check_field_offset(lv, s7802c2f0, ABISELECT(48,24), "S7802C2.s7802c2f0");
    test_class_info(&lv, &cd_S7802C2);
    dp->~S7802C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7802C2(Test_S7802C2, "S7802C2", ABISELECT(128,64));

#else // __cplusplus

extern void _ZN7S7802C2C1Ev();
extern void _ZN7S7802C2D1Ev();
Name_Map name_map_S7802C2[] = {
  NSPAIR(_ZN7S7802C2C1Ev),
  NSPAIR(_ZN7S7802C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7802C4;
extern VTBL_ENTRY _ZTI7S7802C4[];
extern  VTBL_ENTRY _ZTV7S7802C4[];
extern Class_Descriptor cd_S7802C8;
extern VTBL_ENTRY _ZTI7S7802C8[];
extern  VTBL_ENTRY _ZTV7S7802C8[];
extern Class_Descriptor cd_S7802C9;
extern VTBL_ENTRY _ZTI7S7802C9[];
extern  VTBL_ENTRY _ZTV7S7802C9[];
extern Class_Descriptor cd_S7802C7;
extern VTBL_ENTRY _ZTI7S7802C7[];
extern  VTBL_ENTRY _ZTV7S7802C7[];
extern Class_Descriptor cd_S7802C6;
extern VTBL_ENTRY _ZTI7S7802C6[];
extern  VTBL_ENTRY _ZTV7S7802C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7802C6[];
extern Class_Descriptor cd_S7802C3;
extern VTBL_ENTRY _ZTI7S7802C3[];
extern  VTBL_ENTRY _ZTV7S7802C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7802C3[];
extern Class_Descriptor cd_S7802C4;
extern VTBL_ENTRY _ZTI7S7802C4[];
extern  VTBL_ENTRY _ZTV7S7802C4[];
extern Class_Descriptor cd_S7802C10;
extern VTBL_ENTRY _ZTI8S7802C10[];
extern  VTBL_ENTRY _ZTV8S7802C10[];
static Base_Class bases_S7802C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7802C4,    ABISELECT(72,36), //bcp->offset
    34, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7802C8,    ABISELECT(96,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7802C9,    ABISELECT(120,60), //bcp->offset
    79, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7802C7,    ABISELECT(96,48), //bcp->offset
    46, //bcp->virtual_function_table_offset
    20, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7802C6,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S7802C3,    ABISELECT(64,32), //bcp->offset
    20, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7802C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S7802C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S7802C2[];
extern void _ZN7S7802C42v5Ev();
extern void _ZN7S7802C42v6Ev();
extern void _ZN7S7802C42v7Ev();
extern void _ZN7S7802C42v8Ev();
extern void _ZN7S7802C42v9Ev();
extern void _ZN8S7802C103v30Ev();
extern void _ZN8S7802C103v31Ev();
extern void _ZN8S7802C103v32Ev();
extern void _ZN8S7802C103v33Ev();
extern void _ZN8S7802C103v34Ev();
extern void _ZN8S7802C103v35Ev();
extern void _ZN8S7802C103v36Ev();
extern void _ZN7S7802C2D1Ev();
extern void _ZN7S7802C2D0Ev();
extern void ABISELECT(_ZTv0_n40_N7S7802C2D1Ev,_ZTv0_n20_N7S7802C2D1Ev)();
extern void ABISELECT(_ZThn64_N7S7802C2D1Ev,_ZThn32_N7S7802C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7802C2D0Ev,_ZTv0_n20_N7S7802C2D0Ev)();
extern void ABISELECT(_ZThn64_N7S7802C2D0Ev,_ZThn32_N7S7802C2D0Ev)() __attribute__((weak));
extern void _ZN7S7802C63v27Ev();
extern void _ZN7S7802C63v28Ev();
extern void _ZN7S7802C33v29Ev();
extern void _ZN7S7802C42v5Ev();
extern void _ZN7S7802C42v6Ev();
extern void _ZN7S7802C42v7Ev();
extern void _ZN7S7802C42v8Ev();
extern void _ZN7S7802C42v9Ev();
extern void _ZN7S7802C83v10Ev();
extern void _ZN7S7802C83v11Ev();
extern void _ZN7S7802C83v12Ev();
extern void _ZN7S7802C83v13Ev();
extern void _ZN7S7802C83v14Ev();
extern void _ZN7S7802C83v15Ev();
extern void ABISELECT(_ZTv0_n72_N7S7802C2D1Ev,_ZTv0_n36_N7S7802C2D1Ev)();
extern void ABISELECT(_ZThn96_N7S7802C2D1Ev,_ZThn48_N7S7802C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S7802C2D0Ev,_ZTv0_n36_N7S7802C2D0Ev)();
extern void ABISELECT(_ZThn96_N7S7802C2D0Ev,_ZThn48_N7S7802C2D0Ev)() __attribute__((weak));
extern void _ZN7S7802C73v22Ev();
extern void _ZN7S7802C73v23Ev();
extern void _ZN7S7802C73v24Ev();
extern void _ZN7S7802C73v25Ev();
extern void _ZN7S7802C73v26Ev();
extern void ABISELECT(_ZTvn24_n72_N7S7802C2D1Ev,_ZTvn12_n36_N7S7802C2D1Ev)();
extern void ABISELECT(_ZTvn24_n72_N7S7802C2D0Ev,_ZTvn12_n36_N7S7802C2D0Ev)();
extern void _ZN7S7802C93v16Ev();
extern void _ZN7S7802C93v17Ev();
extern void _ZN7S7802C93v18Ev();
extern void _ZN7S7802C93v19Ev();
extern void _ZN7S7802C93v20Ev();
extern void _ZN7S7802C93v21Ev();
static  VTBL_ENTRY vtc_S7802C2[] = {
  ABISELECT(96,48),
  ABISELECT(64,32),
  ABISELECT(72,36),
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI7S7802C2[0]),
  (VTBL_ENTRY)&_ZN7S7802C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7802C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7802C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7802C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7802C42v9Ev,
  (VTBL_ENTRY)&_ZN8S7802C103v30Ev,
  (VTBL_ENTRY)&_ZN8S7802C103v31Ev,
  (VTBL_ENTRY)&_ZN8S7802C103v32Ev,
  (VTBL_ENTRY)&_ZN8S7802C103v33Ev,
  (VTBL_ENTRY)&_ZN8S7802C103v34Ev,
  (VTBL_ENTRY)&_ZN8S7802C103v35Ev,
  (VTBL_ENTRY)&_ZN8S7802C103v36Ev,
  (VTBL_ENTRY)&_ZN7S7802C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7802C2D0Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-64,-32),
  ABISELECT(8,4),
  ABISELECT(32,16),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI7S7802C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7802C2D1Ev,_ZTv0_n20_N7S7802C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7802C2D0Ev,_ZTv0_n20_N7S7802C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7802C63v27Ev,
  (VTBL_ENTRY)&_ZN7S7802C63v28Ev,
  (VTBL_ENTRY)&_ZN7S7802C33v29Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI7S7802C2[0]),
  (VTBL_ENTRY)&_ZN7S7802C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7802C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7802C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7802C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7802C42v9Ev,
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-96,-48),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-96,-48),
  (VTBL_ENTRY)&(_ZTI7S7802C2[0]),
  (VTBL_ENTRY)&_ZN7S7802C83v10Ev,
  (VTBL_ENTRY)&_ZN7S7802C83v11Ev,
  (VTBL_ENTRY)&_ZN7S7802C83v12Ev,
  (VTBL_ENTRY)&_ZN7S7802C83v13Ev,
  (VTBL_ENTRY)&_ZN7S7802C83v14Ev,
  (VTBL_ENTRY)&_ZN7S7802C83v15Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S7802C2D1Ev,_ZTv0_n36_N7S7802C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S7802C2D0Ev,_ZTv0_n36_N7S7802C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7802C73v22Ev,
  (VTBL_ENTRY)&_ZN7S7802C73v23Ev,
  (VTBL_ENTRY)&_ZN7S7802C73v24Ev,
  (VTBL_ENTRY)&_ZN7S7802C73v25Ev,
  (VTBL_ENTRY)&_ZN7S7802C73v26Ev,
  ABISELECT(-120,-60),
  (VTBL_ENTRY)&(_ZTI7S7802C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N7S7802C2D1Ev,_ZTvn12_n36_N7S7802C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N7S7802C2D0Ev,_ZTvn12_n36_N7S7802C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7802C93v16Ev,
  (VTBL_ENTRY)&_ZN7S7802C93v17Ev,
  (VTBL_ENTRY)&_ZN7S7802C93v18Ev,
  (VTBL_ENTRY)&_ZN7S7802C93v19Ev,
  (VTBL_ENTRY)&_ZN7S7802C93v20Ev,
  (VTBL_ENTRY)&_ZN7S7802C93v21Ev,
};
extern VTBL_ENTRY _ZTV7S7802C2[];
extern void ABISELECT(_ZTv0_n40_N7S7802C3D1Ev,_ZTv0_n20_N7S7802C3D1Ev)();
extern void _ZN7S7802C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7802C3D0Ev,_ZTv0_n20_N7S7802C3D0Ev)();
extern void _ZN7S7802C3D0Ev() __attribute__((weak));
extern void _ZN7S7802C63v27Ev();
extern void _ZN7S7802C63v28Ev();
extern void _ZN7S7802C33v29Ev();
static  VTBL_ENTRY _tg__ZTV7S7802C3__7S7802C2[] = {
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7802C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7802C3D1Ev,_ZTv0_n20_N7S7802C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7802C3D0Ev,_ZTv0_n20_N7S7802C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7802C63v27Ev,
  (VTBL_ENTRY)&_ZN7S7802C63v28Ev,
  (VTBL_ENTRY)&_ZN7S7802C33v29Ev,
};
extern void _ZN7S7802C42v5Ev();
extern void _ZN7S7802C42v6Ev();
extern void _ZN7S7802C42v7Ev();
extern void _ZN7S7802C42v8Ev();
extern void _ZN7S7802C42v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7802C4__7S7802C3__7S7802C2[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7802C3[0]),
  (VTBL_ENTRY)&_ZN7S7802C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7802C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7802C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7802C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7802C42v9Ev,
};
extern void _ZN7S7802C83v10Ev();
extern void _ZN7S7802C83v11Ev();
extern void _ZN7S7802C83v12Ev();
extern void _ZN7S7802C83v13Ev();
extern void _ZN7S7802C83v14Ev();
extern void _ZN7S7802C83v15Ev();
extern void ABISELECT(_ZTv0_n72_N7S7802C3D1Ev,_ZTv0_n36_N7S7802C3D1Ev)();
extern void ABISELECT(_ZThn32_N7S7802C3D1Ev,_ZThn16_N7S7802C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S7802C3D0Ev,_ZTv0_n36_N7S7802C3D0Ev)();
extern void ABISELECT(_ZThn32_N7S7802C3D0Ev,_ZThn16_N7S7802C3D0Ev)() __attribute__((weak));
extern void _ZN7S7802C73v22Ev();
extern void _ZN7S7802C73v23Ev();
extern void _ZN7S7802C73v24Ev();
extern void _ZN7S7802C73v25Ev();
extern void _ZN7S7802C73v26Ev();
static  VTBL_ENTRY _tg__ZTV7S7802C7__7S7802C3__7S7802C2[] = {
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-16),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S7802C3[0]),
  (VTBL_ENTRY)&_ZN7S7802C83v10Ev,
  (VTBL_ENTRY)&_ZN7S7802C83v11Ev,
  (VTBL_ENTRY)&_ZN7S7802C83v12Ev,
  (VTBL_ENTRY)&_ZN7S7802C83v13Ev,
  (VTBL_ENTRY)&_ZN7S7802C83v14Ev,
  (VTBL_ENTRY)&_ZN7S7802C83v15Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S7802C3D1Ev,_ZTv0_n36_N7S7802C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S7802C3D0Ev,_ZTv0_n36_N7S7802C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7802C73v22Ev,
  (VTBL_ENTRY)&_ZN7S7802C73v23Ev,
  (VTBL_ENTRY)&_ZN7S7802C73v24Ev,
  (VTBL_ENTRY)&_ZN7S7802C73v25Ev,
  (VTBL_ENTRY)&_ZN7S7802C73v26Ev,
};
extern void ABISELECT(_ZTvn24_n72_N7S7802C3D1Ev,_ZTvn12_n36_N7S7802C3D1Ev)();
extern void ABISELECT(_ZTvn24_n72_N7S7802C3D0Ev,_ZTvn12_n36_N7S7802C3D0Ev)();
extern void _ZN7S7802C93v16Ev();
extern void _ZN7S7802C93v17Ev();
extern void _ZN7S7802C93v18Ev();
extern void _ZN7S7802C93v19Ev();
extern void _ZN7S7802C93v20Ev();
extern void _ZN7S7802C93v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7802C97S7802C7__7S7802C3__7S7802C2[] = {
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI7S7802C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N7S7802C3D1Ev,_ZTvn12_n36_N7S7802C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N7S7802C3D0Ev,_ZTvn12_n36_N7S7802C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7802C93v16Ev,
  (VTBL_ENTRY)&_ZN7S7802C93v17Ev,
  (VTBL_ENTRY)&_ZN7S7802C93v18Ev,
  (VTBL_ENTRY)&_ZN7S7802C93v19Ev,
  (VTBL_ENTRY)&_ZN7S7802C93v20Ev,
  (VTBL_ENTRY)&_ZN7S7802C93v21Ev,
};
extern void _ZN7S7802C6D1Ev();
extern void _ZN7S7802C6D0Ev();
extern void _ZN7S7802C63v27Ev();
extern void _ZN7S7802C63v28Ev();
static  VTBL_ENTRY _tg__ZTV7S7802C6__7S7802C2[] = {
  ABISELECT(8,4),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7802C6[0]),
  (VTBL_ENTRY)&_ZN7S7802C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7802C6D0Ev,
  (VTBL_ENTRY)&_ZN7S7802C63v27Ev,
  (VTBL_ENTRY)&_ZN7S7802C63v28Ev,
};
extern void _ZN7S7802C83v10Ev();
extern void _ZN7S7802C83v11Ev();
extern void _ZN7S7802C83v12Ev();
extern void _ZN7S7802C83v13Ev();
extern void _ZN7S7802C83v14Ev();
extern void _ZN7S7802C83v15Ev();
extern void ABISELECT(_ZTv0_n72_N7S7802C6D1Ev,_ZTv0_n36_N7S7802C6D1Ev)();
extern void ABISELECT(_ZThn32_N7S7802C6D1Ev,_ZThn16_N7S7802C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S7802C6D0Ev,_ZTv0_n36_N7S7802C6D0Ev)();
extern void ABISELECT(_ZThn32_N7S7802C6D0Ev,_ZThn16_N7S7802C6D0Ev)() __attribute__((weak));
extern void _ZN7S7802C73v22Ev();
extern void _ZN7S7802C73v23Ev();
extern void _ZN7S7802C73v24Ev();
extern void _ZN7S7802C73v25Ev();
extern void _ZN7S7802C73v26Ev();
static  VTBL_ENTRY _tg__ZTV7S7802C7__7S7802C6__7S7802C2[] = {
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-16),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S7802C6[0]),
  (VTBL_ENTRY)&_ZN7S7802C83v10Ev,
  (VTBL_ENTRY)&_ZN7S7802C83v11Ev,
  (VTBL_ENTRY)&_ZN7S7802C83v12Ev,
  (VTBL_ENTRY)&_ZN7S7802C83v13Ev,
  (VTBL_ENTRY)&_ZN7S7802C83v14Ev,
  (VTBL_ENTRY)&_ZN7S7802C83v15Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S7802C6D1Ev,_ZTv0_n36_N7S7802C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S7802C6D0Ev,_ZTv0_n36_N7S7802C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7802C73v22Ev,
  (VTBL_ENTRY)&_ZN7S7802C73v23Ev,
  (VTBL_ENTRY)&_ZN7S7802C73v24Ev,
  (VTBL_ENTRY)&_ZN7S7802C73v25Ev,
  (VTBL_ENTRY)&_ZN7S7802C73v26Ev,
};
extern void ABISELECT(_ZTvn24_n72_N7S7802C6D1Ev,_ZTvn12_n36_N7S7802C6D1Ev)();
extern void ABISELECT(_ZTvn24_n72_N7S7802C6D0Ev,_ZTvn12_n36_N7S7802C6D0Ev)();
extern void _ZN7S7802C93v16Ev();
extern void _ZN7S7802C93v17Ev();
extern void _ZN7S7802C93v18Ev();
extern void _ZN7S7802C93v19Ev();
extern void _ZN7S7802C93v20Ev();
extern void _ZN7S7802C93v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7802C97S7802C7__7S7802C6__7S7802C2[] = {
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI7S7802C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N7S7802C6D1Ev,_ZTvn12_n36_N7S7802C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N7S7802C6D0Ev,_ZTvn12_n36_N7S7802C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7802C93v16Ev,
  (VTBL_ENTRY)&_ZN7S7802C93v17Ev,
  (VTBL_ENTRY)&_ZN7S7802C93v18Ev,
  (VTBL_ENTRY)&_ZN7S7802C93v19Ev,
  (VTBL_ENTRY)&_ZN7S7802C93v20Ev,
  (VTBL_ENTRY)&_ZN7S7802C93v21Ev,
};
extern void _ZN7S7802C42v5Ev();
extern void _ZN7S7802C42v6Ev();
extern void _ZN7S7802C42v7Ev();
extern void _ZN7S7802C42v8Ev();
extern void _ZN7S7802C42v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7802C4__7S7802C6__7S7802C2[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7802C6[0]),
  (VTBL_ENTRY)&_ZN7S7802C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7802C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7802C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7802C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7802C42v9Ev,
};
static  VTT_ENTRY vtt_S7802C2[] = {
  {&(_ZTV7S7802C2[6]),  6,89},
  {&(_ZTV7S7802C2[29]),  29,89},
  {&(_ZTV7S7802C2[41]),  41,89},
  {&(_ZTV7S7802C2[29]),  29,89},
  {&(_ZTV7S7802C2[66]),  66,89},
  {&(_ZTV7S7802C2[81]),  81,89},
  {&(_tg__ZTV7S7802C3__7S7802C2[8]),  8,13},
  {&(_tg__ZTV7S7802C4__7S7802C3__7S7802C2[7]),  7,12},
  {&(_tg__ZTV7S7802C3__7S7802C2[8]),  8,13},
  {&(_tg__ZTV7S7802C7__7S7802C3__7S7802C2[20]),  20,33},
  {&(_tg__ZTV7S7802C97S7802C7__7S7802C3__7S7802C2[2]),  2,10},
  {&(_tg__ZTV7S7802C6__7S7802C2[4]),  4,8},
  {&(_tg__ZTV7S7802C7__7S7802C6__7S7802C2[20]),  20,33},
  {&(_tg__ZTV7S7802C97S7802C7__7S7802C6__7S7802C2[2]),  2,10},
  {&(_tg__ZTV7S7802C4__7S7802C6__7S7802C2[7]),  7,12},
};
extern VTBL_ENTRY _ZTI7S7802C2[];
extern  VTBL_ENTRY _ZTV7S7802C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7802C2[];
static VTBL_ENTRY alt_thunk_names7[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S7802C6D0Ev,_ZTv0_n36_N7S7802C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7802C6D0Ev,_ZThn16_N7S7802C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S7802C6D1Ev,_ZTv0_n36_N7S7802C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7802C6D1Ev,_ZThn16_N7S7802C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S7802C3D0Ev,_ZTv0_n36_N7S7802C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7802C3D0Ev,_ZThn16_N7S7802C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S7802C3D1Ev,_ZTv0_n36_N7S7802C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7802C3D1Ev,_ZThn16_N7S7802C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7802C3D0Ev,_ZTv0_n20_N7S7802C3D0Ev), // 
  (VTBL_ENTRY)_ZN7S7802C3D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7802C3D1Ev,_ZTv0_n20_N7S7802C3D1Ev), // 
  (VTBL_ENTRY)_ZN7S7802C3D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S7802C2D0Ev,_ZTv0_n36_N7S7802C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N7S7802C2D0Ev,_ZThn48_N7S7802C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S7802C2D1Ev,_ZTv0_n36_N7S7802C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N7S7802C2D1Ev,_ZThn48_N7S7802C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7802C2D0Ev,_ZTv0_n20_N7S7802C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S7802C2D0Ev,_ZThn32_N7S7802C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7802C2D1Ev,_ZTv0_n20_N7S7802C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S7802C2D1Ev,_ZThn32_N7S7802C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7802C2 = {  "S7802C2", // class name
  bases_S7802C2, 8,
  &(vtc_S7802C2[0]), // expected_vtbl_contents
  &(vtt_S7802C2[0]), // expected_vtt_contents
  ABISELECT(128,64), // object size
  NSPAIRA(_ZTI7S7802C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7802C2),89, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7802C2),15, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names7,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7802C14  : virtual S7802C7 , virtual S7802C4 {
  virtual  ~S7802C14(); // _ZN8S7802C14D2Ev
  virtual void  v37(); // _ZN8S7802C143v37Ev
  virtual void  v38(); // _ZN8S7802C143v38Ev
  virtual void  v39(); // _ZN8S7802C143v39Ev
  virtual void  v40(); // _ZN8S7802C143v40Ev
  virtual void  v41(); // _ZN8S7802C143v41Ev
  virtual void  v42(); // _ZN8S7802C143v42Ev
  S7802C14(); // tgen
};
//SIG(-1 S7802C14) C1{ VBC2{ BC3{ v7 v8 v9 v10 v11 v12 FC4{ vd v13 v14 v15 v16 v17 v18} Fi} BC4 vd v19 v20 v21 v22 v23} VBC5{ v24 v25 v26 v27 v28 FC6{} Fp} vd v1 v2 v3 v4 v5 v6}


 S7802C14 ::~S7802C14(){ note_dtor("S7802C14", this);}
void  S7802C14 ::v37(){vfunc_called(this, "_ZN8S7802C143v37Ev");}
void  S7802C14 ::v38(){vfunc_called(this, "_ZN8S7802C143v38Ev");}
void  S7802C14 ::v39(){vfunc_called(this, "_ZN8S7802C143v39Ev");}
void  S7802C14 ::v40(){vfunc_called(this, "_ZN8S7802C143v40Ev");}
void  S7802C14 ::v41(){vfunc_called(this, "_ZN8S7802C143v41Ev");}
void  S7802C14 ::v42(){vfunc_called(this, "_ZN8S7802C143v42Ev");}
S7802C14 ::S7802C14(){ note_ctor("S7802C14", this);} // tgen

static void Test_S7802C14()
{
  extern Class_Descriptor cd_S7802C14;
  void *lvp;
  {
    ABISELECT(double,int) buf[9];
    init_test(&cd_S7802C14, buf);
    S7802C14 *dp, &lv = *(dp=new (buf) S7802C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S7802C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7802C14)");
    check_base_class_offset(lv, (S7802C8*)(S7802C7*), ABISELECT(8,4), "S7802C14");
    check_base_class_offset(lv, (S7802C9*)(S7802C7*), ABISELECT(32,16), "S7802C14");
    check_base_class_offset(lv, (S7802C7*), ABISELECT(8,4), "S7802C14");
    check_base_class_offset(lv, (S7802C4*), ABISELECT(40,20), "S7802C14");
    test_class_info(&lv, &cd_S7802C14);
    dp->~S7802C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7802C14(Test_S7802C14, "S7802C14", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN8S7802C14C1Ev();
extern void _ZN8S7802C14D2Ev();
Name_Map name_map_S7802C14[] = {
  NSPAIR(_ZN8S7802C14C1Ev),
  NSPAIR(_ZN8S7802C14D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7802C8;
extern VTBL_ENTRY _ZTI7S7802C8[];
extern  VTBL_ENTRY _ZTV7S7802C8[];
extern Class_Descriptor cd_S7802C9;
extern VTBL_ENTRY _ZTI7S7802C9[];
extern  VTBL_ENTRY _ZTV7S7802C9[];
extern Class_Descriptor cd_S7802C7;
extern VTBL_ENTRY _ZTI7S7802C7[];
extern  VTBL_ENTRY _ZTV7S7802C7[];
extern Class_Descriptor cd_S7802C4;
extern VTBL_ENTRY _ZTI7S7802C4[];
extern  VTBL_ENTRY _ZTV7S7802C4[];
static Base_Class bases_S7802C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7802C8,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7802C9,    ABISELECT(32,16), //bcp->offset
    45, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7802C7,    ABISELECT(8,4), //bcp->offset
    12, //bcp->virtual_function_table_offset
    20, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7802C4,    ABISELECT(40,20), //bcp->offset
    55, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7802C14[];
extern void _ZN8S7802C14D1Ev();
extern void _ZN8S7802C14D0Ev();
extern void _ZN8S7802C143v37Ev();
extern void _ZN8S7802C143v38Ev();
extern void _ZN8S7802C143v39Ev();
extern void _ZN8S7802C143v40Ev();
extern void _ZN8S7802C143v41Ev();
extern void _ZN8S7802C143v42Ev();
extern void _ZN7S7802C83v10Ev();
extern void _ZN7S7802C83v11Ev();
extern void _ZN7S7802C83v12Ev();
extern void _ZN7S7802C83v13Ev();
extern void _ZN7S7802C83v14Ev();
extern void _ZN7S7802C83v15Ev();
extern void ABISELECT(_ZTv0_n72_N8S7802C14D1Ev,_ZTv0_n36_N8S7802C14D1Ev)();
extern void ABISELECT(_ZThn8_N8S7802C14D1Ev,_ZThn4_N8S7802C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S7802C14D0Ev,_ZTv0_n36_N8S7802C14D0Ev)();
extern void ABISELECT(_ZThn8_N8S7802C14D0Ev,_ZThn4_N8S7802C14D0Ev)() __attribute__((weak));
extern void _ZN7S7802C73v22Ev();
extern void _ZN7S7802C73v23Ev();
extern void _ZN7S7802C73v24Ev();
extern void _ZN7S7802C73v25Ev();
extern void _ZN7S7802C73v26Ev();
extern void ABISELECT(_ZTvn24_n72_N8S7802C14D1Ev,_ZTvn12_n36_N8S7802C14D1Ev)();
extern void ABISELECT(_ZTvn24_n72_N8S7802C14D0Ev,_ZTvn12_n36_N8S7802C14D0Ev)();
extern void _ZN7S7802C93v16Ev();
extern void _ZN7S7802C93v17Ev();
extern void _ZN7S7802C93v18Ev();
extern void _ZN7S7802C93v19Ev();
extern void _ZN7S7802C93v20Ev();
extern void _ZN7S7802C93v21Ev();
extern void _ZN7S7802C42v5Ev();
extern void _ZN7S7802C42v6Ev();
extern void _ZN7S7802C42v7Ev();
extern void _ZN7S7802C42v8Ev();
extern void _ZN7S7802C42v9Ev();
static  VTBL_ENTRY vtc_S7802C14[] = {
  ABISELECT(40,20),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7802C14[0]),
  (VTBL_ENTRY)&_ZN8S7802C14D1Ev,
  (VTBL_ENTRY)&_ZN8S7802C14D0Ev,
  (VTBL_ENTRY)&_ZN8S7802C143v37Ev,
  (VTBL_ENTRY)&_ZN8S7802C143v38Ev,
  (VTBL_ENTRY)&_ZN8S7802C143v39Ev,
  (VTBL_ENTRY)&_ZN8S7802C143v40Ev,
  (VTBL_ENTRY)&_ZN8S7802C143v41Ev,
  (VTBL_ENTRY)&_ZN8S7802C143v42Ev,
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S7802C14[0]),
  (VTBL_ENTRY)&_ZN7S7802C83v10Ev,
  (VTBL_ENTRY)&_ZN7S7802C83v11Ev,
  (VTBL_ENTRY)&_ZN7S7802C83v12Ev,
  (VTBL_ENTRY)&_ZN7S7802C83v13Ev,
  (VTBL_ENTRY)&_ZN7S7802C83v14Ev,
  (VTBL_ENTRY)&_ZN7S7802C83v15Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S7802C14D1Ev,_ZTv0_n36_N8S7802C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S7802C14D0Ev,_ZTv0_n36_N8S7802C14D0Ev),
  (VTBL_ENTRY)&_ZN7S7802C73v22Ev,
  (VTBL_ENTRY)&_ZN7S7802C73v23Ev,
  (VTBL_ENTRY)&_ZN7S7802C73v24Ev,
  (VTBL_ENTRY)&_ZN7S7802C73v25Ev,
  (VTBL_ENTRY)&_ZN7S7802C73v26Ev,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S7802C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N8S7802C14D1Ev,_ZTvn12_n36_N8S7802C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N8S7802C14D0Ev,_ZTvn12_n36_N8S7802C14D0Ev),
  (VTBL_ENTRY)&_ZN7S7802C93v16Ev,
  (VTBL_ENTRY)&_ZN7S7802C93v17Ev,
  (VTBL_ENTRY)&_ZN7S7802C93v18Ev,
  (VTBL_ENTRY)&_ZN7S7802C93v19Ev,
  (VTBL_ENTRY)&_ZN7S7802C93v20Ev,
  (VTBL_ENTRY)&_ZN7S7802C93v21Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S7802C14[0]),
  (VTBL_ENTRY)&_ZN7S7802C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7802C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7802C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7802C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7802C42v9Ev,
};
extern VTBL_ENTRY _ZTV8S7802C14[];
static  VTT_ENTRY vtt_S7802C14[] = {
  {&(_ZTV8S7802C14[4]),  4,67},
  {&(_ZTV8S7802C14[32]),  32,67},
  {&(_ZTV8S7802C14[47]),  47,67},
  {&(_ZTV8S7802C14[62]),  62,67},
};
extern VTBL_ENTRY _ZTI8S7802C14[];
extern  VTBL_ENTRY _ZTV8S7802C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7802C14[];
static VTBL_ENTRY alt_thunk_names8[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S7802C14D0Ev,_ZTv0_n36_N8S7802C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S7802C14D0Ev,_ZThn4_N8S7802C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S7802C14D1Ev,_ZTv0_n36_N8S7802C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S7802C14D1Ev,_ZThn4_N8S7802C14D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7802C14 = {  "S7802C14", // class name
  bases_S7802C14, 4,
  &(vtc_S7802C14[0]), // expected_vtbl_contents
  &(vtt_S7802C14[0]), // expected_vtt_contents
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI8S7802C14),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S7802C14),67, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7802C14),4, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names8,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7802C13  : virtual S7802C14 {
  virtual  ~S7802C13(); // _ZN8S7802C13D2Ev
  virtual void  v43(); // _ZN8S7802C133v43Ev
  virtual void  v44(); // _ZN8S7802C133v44Ev
  S7802C13(); // tgen
};
//SIG(-1 S7802C13) C1{ VBC2{ VBC3{ BC4{ v3 v4 v5 v6 v7 v8 FC5{ vd v9 v10 v11 v12 v13 v14} Fi} BC5 vd v15 v16 v17 v18 v19} VBC6{ v20 v21 v22 v23 v24 FC7{} Fp} vd v25 v26 v27 v28 v29 v30} vd v1 v2}


 S7802C13 ::~S7802C13(){ note_dtor("S7802C13", this);}
void  S7802C13 ::v43(){vfunc_called(this, "_ZN8S7802C133v43Ev");}
void  S7802C13 ::v44(){vfunc_called(this, "_ZN8S7802C133v44Ev");}
S7802C13 ::S7802C13(){ note_ctor("S7802C13", this);} // tgen

static void Test_S7802C13()
{
  extern Class_Descriptor cd_S7802C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[9];
    init_test(&cd_S7802C13, buf);
    S7802C13 *dp, &lv = *(dp=new (buf) S7802C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S7802C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7802C13)");
    check_base_class_offset(lv, (S7802C8*)(S7802C7*), ABISELECT(8,4), "S7802C13");
    check_base_class_offset(lv, (S7802C9*)(S7802C7*), ABISELECT(32,16), "S7802C13");
    check_base_class_offset(lv, (S7802C7*)(S7802C14*), ABISELECT(8,4), "S7802C13");
    check_base_class_offset(lv, (S7802C4*)(S7802C14*), ABISELECT(40,20), "S7802C13");
    check_base_class_offset(lv, (S7802C14*), 0, "S7802C13");
    test_class_info(&lv, &cd_S7802C13);
    dp->~S7802C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7802C13(Test_S7802C13, "S7802C13", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN8S7802C13C1Ev();
extern void _ZN8S7802C13D2Ev();
Name_Map name_map_S7802C13[] = {
  NSPAIR(_ZN8S7802C13C1Ev),
  NSPAIR(_ZN8S7802C13D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7802C8;
extern VTBL_ENTRY _ZTI7S7802C8[];
extern  VTBL_ENTRY _ZTV7S7802C8[];
extern Class_Descriptor cd_S7802C9;
extern VTBL_ENTRY _ZTI7S7802C9[];
extern  VTBL_ENTRY _ZTV7S7802C9[];
extern Class_Descriptor cd_S7802C7;
extern VTBL_ENTRY _ZTI7S7802C7[];
extern  VTBL_ENTRY _ZTV7S7802C7[];
extern Class_Descriptor cd_S7802C4;
extern VTBL_ENTRY _ZTI7S7802C4[];
extern  VTBL_ENTRY _ZTV7S7802C4[];
extern Class_Descriptor cd_S7802C14;
extern VTBL_ENTRY _ZTI8S7802C14[];
extern  VTBL_ENTRY _ZTV8S7802C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7802C14[];
static Base_Class bases_S7802C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7802C8,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7802C9,    ABISELECT(32,16), //bcp->offset
    55, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7802C7,    ABISELECT(8,4), //bcp->offset
    22, //bcp->virtual_function_table_offset
    20, //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
    4, //immediately_derived
  0, 1},
  {&cd_S7802C4,    ABISELECT(40,20), //bcp->offset
    65, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7802C14,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7802C13[];
extern void _ZN8S7802C13D1Ev();
extern void _ZN8S7802C13D0Ev();
extern void _ZN8S7802C143v37Ev();
extern void _ZN8S7802C143v38Ev();
extern void _ZN8S7802C143v39Ev();
extern void _ZN8S7802C143v40Ev();
extern void _ZN8S7802C143v41Ev();
extern void _ZN8S7802C143v42Ev();
extern void _ZN8S7802C133v43Ev();
extern void _ZN8S7802C133v44Ev();
extern void _ZN7S7802C83v10Ev();
extern void _ZN7S7802C83v11Ev();
extern void _ZN7S7802C83v12Ev();
extern void _ZN7S7802C83v13Ev();
extern void _ZN7S7802C83v14Ev();
extern void _ZN7S7802C83v15Ev();
extern void ABISELECT(_ZTv0_n72_N8S7802C13D1Ev,_ZTv0_n36_N8S7802C13D1Ev)();
extern void ABISELECT(_ZThn8_N8S7802C13D1Ev,_ZThn4_N8S7802C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S7802C13D0Ev,_ZTv0_n36_N8S7802C13D0Ev)();
extern void ABISELECT(_ZThn8_N8S7802C13D0Ev,_ZThn4_N8S7802C13D0Ev)() __attribute__((weak));
extern void _ZN7S7802C73v22Ev();
extern void _ZN7S7802C73v23Ev();
extern void _ZN7S7802C73v24Ev();
extern void _ZN7S7802C73v25Ev();
extern void _ZN7S7802C73v26Ev();
extern void ABISELECT(_ZTvn24_n72_N8S7802C13D1Ev,_ZTvn12_n36_N8S7802C13D1Ev)();
extern void ABISELECT(_ZTvn24_n72_N8S7802C13D0Ev,_ZTvn12_n36_N8S7802C13D0Ev)();
extern void _ZN7S7802C93v16Ev();
extern void _ZN7S7802C93v17Ev();
extern void _ZN7S7802C93v18Ev();
extern void _ZN7S7802C93v19Ev();
extern void _ZN7S7802C93v20Ev();
extern void _ZN7S7802C93v21Ev();
extern void _ZN7S7802C42v5Ev();
extern void _ZN7S7802C42v6Ev();
extern void _ZN7S7802C42v7Ev();
extern void _ZN7S7802C42v8Ev();
extern void _ZN7S7802C42v9Ev();
static  VTBL_ENTRY vtc_S7802C13[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,20),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7802C13[0]),
  (VTBL_ENTRY)&_ZN8S7802C13D1Ev,
  (VTBL_ENTRY)&_ZN8S7802C13D0Ev,
  (VTBL_ENTRY)&_ZN8S7802C143v37Ev,
  (VTBL_ENTRY)&_ZN8S7802C143v38Ev,
  (VTBL_ENTRY)&_ZN8S7802C143v39Ev,
  (VTBL_ENTRY)&_ZN8S7802C143v40Ev,
  (VTBL_ENTRY)&_ZN8S7802C143v41Ev,
  (VTBL_ENTRY)&_ZN8S7802C143v42Ev,
  (VTBL_ENTRY)&_ZN8S7802C133v43Ev,
  (VTBL_ENTRY)&_ZN8S7802C133v44Ev,
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S7802C13[0]),
  (VTBL_ENTRY)&_ZN7S7802C83v10Ev,
  (VTBL_ENTRY)&_ZN7S7802C83v11Ev,
  (VTBL_ENTRY)&_ZN7S7802C83v12Ev,
  (VTBL_ENTRY)&_ZN7S7802C83v13Ev,
  (VTBL_ENTRY)&_ZN7S7802C83v14Ev,
  (VTBL_ENTRY)&_ZN7S7802C83v15Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S7802C13D1Ev,_ZTv0_n36_N8S7802C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S7802C13D0Ev,_ZTv0_n36_N8S7802C13D0Ev),
  (VTBL_ENTRY)&_ZN7S7802C73v22Ev,
  (VTBL_ENTRY)&_ZN7S7802C73v23Ev,
  (VTBL_ENTRY)&_ZN7S7802C73v24Ev,
  (VTBL_ENTRY)&_ZN7S7802C73v25Ev,
  (VTBL_ENTRY)&_ZN7S7802C73v26Ev,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S7802C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N8S7802C13D1Ev,_ZTvn12_n36_N8S7802C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N8S7802C13D0Ev,_ZTvn12_n36_N8S7802C13D0Ev),
  (VTBL_ENTRY)&_ZN7S7802C93v16Ev,
  (VTBL_ENTRY)&_ZN7S7802C93v17Ev,
  (VTBL_ENTRY)&_ZN7S7802C93v18Ev,
  (VTBL_ENTRY)&_ZN7S7802C93v19Ev,
  (VTBL_ENTRY)&_ZN7S7802C93v20Ev,
  (VTBL_ENTRY)&_ZN7S7802C93v21Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S7802C13[0]),
  (VTBL_ENTRY)&_ZN7S7802C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7802C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7802C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7802C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7802C42v9Ev,
};
extern VTBL_ENTRY _ZTV8S7802C13[];
extern void _ZN8S7802C14D1Ev();
extern void _ZN8S7802C14D0Ev();
extern void _ZN8S7802C143v37Ev();
extern void _ZN8S7802C143v38Ev();
extern void _ZN8S7802C143v39Ev();
extern void _ZN8S7802C143v40Ev();
extern void _ZN8S7802C143v41Ev();
extern void _ZN8S7802C143v42Ev();
static  VTBL_ENTRY _tg__ZTV8S7802C14__8S7802C13[] = {
  ABISELECT(40,20),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7802C14[0]),
  (VTBL_ENTRY)&_ZN8S7802C14D1Ev,
  (VTBL_ENTRY)&_ZN8S7802C14D0Ev,
  (VTBL_ENTRY)&_ZN8S7802C143v37Ev,
  (VTBL_ENTRY)&_ZN8S7802C143v38Ev,
  (VTBL_ENTRY)&_ZN8S7802C143v39Ev,
  (VTBL_ENTRY)&_ZN8S7802C143v40Ev,
  (VTBL_ENTRY)&_ZN8S7802C143v41Ev,
  (VTBL_ENTRY)&_ZN8S7802C143v42Ev,
};
extern void _ZN7S7802C83v10Ev();
extern void _ZN7S7802C83v11Ev();
extern void _ZN7S7802C83v12Ev();
extern void _ZN7S7802C83v13Ev();
extern void _ZN7S7802C83v14Ev();
extern void _ZN7S7802C83v15Ev();
extern void ABISELECT(_ZTv0_n72_N8S7802C14D1Ev,_ZTv0_n36_N8S7802C14D1Ev)();
extern void ABISELECT(_ZThn8_N8S7802C14D1Ev,_ZThn4_N8S7802C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S7802C14D0Ev,_ZTv0_n36_N8S7802C14D0Ev)();
extern void ABISELECT(_ZThn8_N8S7802C14D0Ev,_ZThn4_N8S7802C14D0Ev)() __attribute__((weak));
extern void _ZN7S7802C73v22Ev();
extern void _ZN7S7802C73v23Ev();
extern void _ZN7S7802C73v24Ev();
extern void _ZN7S7802C73v25Ev();
extern void _ZN7S7802C73v26Ev();
static  VTBL_ENTRY _tg__ZTV7S7802C7__8S7802C14__8S7802C13[] = {
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S7802C14[0]),
  (VTBL_ENTRY)&_ZN7S7802C83v10Ev,
  (VTBL_ENTRY)&_ZN7S7802C83v11Ev,
  (VTBL_ENTRY)&_ZN7S7802C83v12Ev,
  (VTBL_ENTRY)&_ZN7S7802C83v13Ev,
  (VTBL_ENTRY)&_ZN7S7802C83v14Ev,
  (VTBL_ENTRY)&_ZN7S7802C83v15Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S7802C14D1Ev,_ZTv0_n36_N8S7802C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S7802C14D0Ev,_ZTv0_n36_N8S7802C14D0Ev),
  (VTBL_ENTRY)&_ZN7S7802C73v22Ev,
  (VTBL_ENTRY)&_ZN7S7802C73v23Ev,
  (VTBL_ENTRY)&_ZN7S7802C73v24Ev,
  (VTBL_ENTRY)&_ZN7S7802C73v25Ev,
  (VTBL_ENTRY)&_ZN7S7802C73v26Ev,
};
extern void ABISELECT(_ZTvn24_n72_N8S7802C14D1Ev,_ZTvn12_n36_N8S7802C14D1Ev)();
extern void ABISELECT(_ZTvn24_n72_N8S7802C14D0Ev,_ZTvn12_n36_N8S7802C14D0Ev)();
extern void _ZN7S7802C93v16Ev();
extern void _ZN7S7802C93v17Ev();
extern void _ZN7S7802C93v18Ev();
extern void _ZN7S7802C93v19Ev();
extern void _ZN7S7802C93v20Ev();
extern void _ZN7S7802C93v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7802C97S7802C7__8S7802C14__8S7802C13[] = {
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S7802C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N8S7802C14D1Ev,_ZTvn12_n36_N8S7802C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N8S7802C14D0Ev,_ZTvn12_n36_N8S7802C14D0Ev),
  (VTBL_ENTRY)&_ZN7S7802C93v16Ev,
  (VTBL_ENTRY)&_ZN7S7802C93v17Ev,
  (VTBL_ENTRY)&_ZN7S7802C93v18Ev,
  (VTBL_ENTRY)&_ZN7S7802C93v19Ev,
  (VTBL_ENTRY)&_ZN7S7802C93v20Ev,
  (VTBL_ENTRY)&_ZN7S7802C93v21Ev,
};
extern void _ZN7S7802C42v5Ev();
extern void _ZN7S7802C42v6Ev();
extern void _ZN7S7802C42v7Ev();
extern void _ZN7S7802C42v8Ev();
extern void _ZN7S7802C42v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7802C4__8S7802C14__8S7802C13[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S7802C14[0]),
  (VTBL_ENTRY)&_ZN7S7802C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7802C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7802C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7802C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7802C42v9Ev,
};
static  VTT_ENTRY vtt_S7802C13[] = {
  {&(_ZTV8S7802C13[12]),  12,77},
  {&(_ZTV8S7802C13[12]),  12,77},
  {&(_ZTV8S7802C13[42]),  42,77},
  {&(_ZTV8S7802C13[57]),  57,77},
  {&(_ZTV8S7802C13[72]),  72,77},
  {&(_tg__ZTV8S7802C14__8S7802C13[4]),  4,12},
  {&(_tg__ZTV7S7802C7__8S7802C14__8S7802C13[20]),  20,33},
  {&(_tg__ZTV7S7802C97S7802C7__8S7802C14__8S7802C13[2]),  2,10},
  {&(_tg__ZTV7S7802C4__8S7802C14__8S7802C13[7]),  7,12},
};
extern VTBL_ENTRY _ZTI8S7802C13[];
extern  VTBL_ENTRY _ZTV8S7802C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7802C13[];
static VTBL_ENTRY alt_thunk_names9[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S7802C14D0Ev,_ZTv0_n36_N8S7802C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S7802C14D0Ev,_ZThn4_N8S7802C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S7802C14D1Ev,_ZTv0_n36_N8S7802C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S7802C14D1Ev,_ZThn4_N8S7802C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S7802C13D0Ev,_ZTv0_n36_N8S7802C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S7802C13D0Ev,_ZThn4_N8S7802C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S7802C13D1Ev,_ZTv0_n36_N8S7802C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S7802C13D1Ev,_ZThn4_N8S7802C13D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7802C13 = {  "S7802C13", // class name
  bases_S7802C13, 5,
  &(vtc_S7802C13[0]), // expected_vtbl_contents
  &(vtt_S7802C13[0]), // expected_vtt_contents
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI8S7802C13),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S7802C13),77, //virtual function table var
  12, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7802C13),9, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names9,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7802C12  : virtual S7802C13 , virtual S7802C11 {
  ::S7802C11 s7802c12f0;
  virtual void  v49(); // _ZN8S7802C123v49Ev
  virtual void  v50(); // _ZN8S7802C123v50Ev
  virtual void  v51(); // _ZN8S7802C123v51Ev
  virtual void  v52(); // _ZN8S7802C123v52Ev
  ~S7802C12(); // tgen
  S7802C12(); // tgen
};
//SIG(-1 S7802C12) C1{ VBC2{ VBC3{ VBC4{ BC5{ v5 v6 v7 v8 v9 v10 FC6{ vd v11 v12 v13 v14 v15 v16} Fi} BC6 vd v17 v18 v19 v20 v21} VBC7{ v22 v23 v24 v25 v26 FC8{} Fp} vd v27 v28 v29 v30 v31 v32} vd v33 v34} VBC9{ v35 v36 v37 v38 FC8} v1 v2 v3 v4 FC9}


void  S7802C12 ::v49(){vfunc_called(this, "_ZN8S7802C123v49Ev");}
void  S7802C12 ::v50(){vfunc_called(this, "_ZN8S7802C123v50Ev");}
void  S7802C12 ::v51(){vfunc_called(this, "_ZN8S7802C123v51Ev");}
void  S7802C12 ::v52(){vfunc_called(this, "_ZN8S7802C123v52Ev");}
S7802C12 ::~S7802C12(){ note_dtor("S7802C12", this);} // tgen
S7802C12 ::S7802C12(){ note_ctor("S7802C12", this);} // tgen

static void Test_S7802C12()
{
  extern Class_Descriptor cd_S7802C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[13];
    init_test(&cd_S7802C12, buf);
    S7802C12 *dp, &lv = *(dp=new (buf) S7802C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,48), "sizeof(S7802C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7802C12)");
    check_base_class_offset(lv, (S7802C8*)(S7802C7*), ABISELECT(24,12), "S7802C12");
    check_base_class_offset(lv, (S7802C9*)(S7802C7*), ABISELECT(48,24), "S7802C12");
    check_base_class_offset(lv, (S7802C7*)(S7802C14*), ABISELECT(24,12), "S7802C12");
    check_base_class_offset(lv, (S7802C4*)(S7802C14*), ABISELECT(56,28), "S7802C12");
    check_base_class_offset(lv, (S7802C14*)(S7802C13*), 0, "S7802C12");
    check_base_class_offset(lv, (S7802C13*), 0, "S7802C12");
    check_base_class_offset(lv, (S7802C11*), ABISELECT(80,40), "S7802C12");
    check_field_offset(lv, s7802c12f0, ABISELECT(8,4), "S7802C12.s7802c12f0");
    test_class_info(&lv, &cd_S7802C12);
    dp->~S7802C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7802C12(Test_S7802C12, "S7802C12", ABISELECT(96,48));

#else // __cplusplus

extern void _ZN8S7802C12C1Ev();
extern void _ZN8S7802C12D1Ev();
Name_Map name_map_S7802C12[] = {
  NSPAIR(_ZN8S7802C12C1Ev),
  NSPAIR(_ZN8S7802C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7802C8;
extern VTBL_ENTRY _ZTI7S7802C8[];
extern  VTBL_ENTRY _ZTV7S7802C8[];
extern Class_Descriptor cd_S7802C9;
extern VTBL_ENTRY _ZTI7S7802C9[];
extern  VTBL_ENTRY _ZTV7S7802C9[];
extern Class_Descriptor cd_S7802C7;
extern VTBL_ENTRY _ZTI7S7802C7[];
extern  VTBL_ENTRY _ZTV7S7802C7[];
extern Class_Descriptor cd_S7802C4;
extern VTBL_ENTRY _ZTI7S7802C4[];
extern  VTBL_ENTRY _ZTV7S7802C4[];
extern Class_Descriptor cd_S7802C14;
extern VTBL_ENTRY _ZTI8S7802C14[];
extern  VTBL_ENTRY _ZTV8S7802C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7802C14[];
extern Class_Descriptor cd_S7802C13;
extern VTBL_ENTRY _ZTI8S7802C13[];
extern  VTBL_ENTRY _ZTV8S7802C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7802C13[];
extern Class_Descriptor cd_S7802C11;
extern VTBL_ENTRY _ZTI8S7802C11[];
extern  VTBL_ENTRY _ZTV8S7802C11[];
static Base_Class bases_S7802C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7802C8,    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
    2, //immediately_derived
  0, 0},
  {&cd_S7802C9,    ABISELECT(48,24), //bcp->offset
    63, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7802C7,    ABISELECT(24,12), //bcp->offset
    30, //bcp->virtual_function_table_offset
    20, //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_S7802C4,    ABISELECT(56,28), //bcp->offset
    73, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7802C14,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S7802C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7802C11,    ABISELECT(80,40), //bcp->offset
    85, //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
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7802C12[];
extern void _ZN8S7802C12D1Ev();
extern void _ZN8S7802C12D0Ev();
extern void _ZN8S7802C143v37Ev();
extern void _ZN8S7802C143v38Ev();
extern void _ZN8S7802C143v39Ev();
extern void _ZN8S7802C143v40Ev();
extern void _ZN8S7802C143v41Ev();
extern void _ZN8S7802C143v42Ev();
extern void _ZN8S7802C133v43Ev();
extern void _ZN8S7802C133v44Ev();
extern void _ZN8S7802C123v49Ev();
extern void _ZN8S7802C123v50Ev();
extern void _ZN8S7802C123v51Ev();
extern void _ZN8S7802C123v52Ev();
extern void _ZN7S7802C83v10Ev();
extern void _ZN7S7802C83v11Ev();
extern void _ZN7S7802C83v12Ev();
extern void _ZN7S7802C83v13Ev();
extern void _ZN7S7802C83v14Ev();
extern void _ZN7S7802C83v15Ev();
extern void ABISELECT(_ZTv0_n72_N8S7802C12D1Ev,_ZTv0_n36_N8S7802C12D1Ev)();
extern void ABISELECT(_ZThn24_N8S7802C12D1Ev,_ZThn12_N8S7802C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S7802C12D0Ev,_ZTv0_n36_N8S7802C12D0Ev)();
extern void ABISELECT(_ZThn24_N8S7802C12D0Ev,_ZThn12_N8S7802C12D0Ev)() __attribute__((weak));
extern void _ZN7S7802C73v22Ev();
extern void _ZN7S7802C73v23Ev();
extern void _ZN7S7802C73v24Ev();
extern void _ZN7S7802C73v25Ev();
extern void _ZN7S7802C73v26Ev();
extern void ABISELECT(_ZTvn24_n72_N8S7802C12D1Ev,_ZTvn12_n36_N8S7802C12D1Ev)();
extern void ABISELECT(_ZTvn24_n72_N8S7802C12D0Ev,_ZTvn12_n36_N8S7802C12D0Ev)();
extern void _ZN7S7802C93v16Ev();
extern void _ZN7S7802C93v17Ev();
extern void _ZN7S7802C93v18Ev();
extern void _ZN7S7802C93v19Ev();
extern void _ZN7S7802C93v20Ev();
extern void _ZN7S7802C93v21Ev();
extern void _ZN7S7802C42v5Ev();
extern void _ZN7S7802C42v6Ev();
extern void _ZN7S7802C42v7Ev();
extern void _ZN7S7802C42v8Ev();
extern void _ZN7S7802C42v9Ev();
extern void _ZN8S7802C113v45Ev();
extern void _ZN8S7802C113v46Ev();
extern void _ZN8S7802C113v47Ev();
extern void _ZN8S7802C113v48Ev();
static  VTBL_ENTRY vtc_S7802C12[] = {
  ABISELECT(80,40),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(56,28),
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S7802C12[0]),
  (VTBL_ENTRY)&_ZN8S7802C12D1Ev,
  (VTBL_ENTRY)&_ZN8S7802C12D0Ev,
  (VTBL_ENTRY)&_ZN8S7802C143v37Ev,
  (VTBL_ENTRY)&_ZN8S7802C143v38Ev,
  (VTBL_ENTRY)&_ZN8S7802C143v39Ev,
  (VTBL_ENTRY)&_ZN8S7802C143v40Ev,
  (VTBL_ENTRY)&_ZN8S7802C143v41Ev,
  (VTBL_ENTRY)&_ZN8S7802C143v42Ev,
  (VTBL_ENTRY)&_ZN8S7802C133v43Ev,
  (VTBL_ENTRY)&_ZN8S7802C133v44Ev,
  (VTBL_ENTRY)&_ZN8S7802C123v49Ev,
  (VTBL_ENTRY)&_ZN8S7802C123v50Ev,
  (VTBL_ENTRY)&_ZN8S7802C123v51Ev,
  (VTBL_ENTRY)&_ZN8S7802C123v52Ev,
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-12),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S7802C12[0]),
  (VTBL_ENTRY)&_ZN7S7802C83v10Ev,
  (VTBL_ENTRY)&_ZN7S7802C83v11Ev,
  (VTBL_ENTRY)&_ZN7S7802C83v12Ev,
  (VTBL_ENTRY)&_ZN7S7802C83v13Ev,
  (VTBL_ENTRY)&_ZN7S7802C83v14Ev,
  (VTBL_ENTRY)&_ZN7S7802C83v15Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S7802C12D1Ev,_ZTv0_n36_N8S7802C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S7802C12D0Ev,_ZTv0_n36_N8S7802C12D0Ev),
  (VTBL_ENTRY)&_ZN7S7802C73v22Ev,
  (VTBL_ENTRY)&_ZN7S7802C73v23Ev,
  (VTBL_ENTRY)&_ZN7S7802C73v24Ev,
  (VTBL_ENTRY)&_ZN7S7802C73v25Ev,
  (VTBL_ENTRY)&_ZN7S7802C73v26Ev,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S7802C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N8S7802C12D1Ev,_ZTvn12_n36_N8S7802C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N8S7802C12D0Ev,_ZTvn12_n36_N8S7802C12D0Ev),
  (VTBL_ENTRY)&_ZN7S7802C93v16Ev,
  (VTBL_ENTRY)&_ZN7S7802C93v17Ev,
  (VTBL_ENTRY)&_ZN7S7802C93v18Ev,
  (VTBL_ENTRY)&_ZN7S7802C93v19Ev,
  (VTBL_ENTRY)&_ZN7S7802C93v20Ev,
  (VTBL_ENTRY)&_ZN7S7802C93v21Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S7802C12[0]),
  (VTBL_ENTRY)&_ZN7S7802C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7802C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7802C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7802C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7802C42v9Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI8S7802C12[0]),
  (VTBL_ENTRY)&_ZN8S7802C113v45Ev,
  (VTBL_ENTRY)&_ZN8S7802C113v46Ev,
  (VTBL_ENTRY)&_ZN8S7802C113v47Ev,
  (VTBL_ENTRY)&_ZN8S7802C113v48Ev,
};
extern VTBL_ENTRY _ZTV8S7802C12[];
extern void ABISELECT(_ZTv0_n40_N8S7802C13D1Ev,_ZTv0_n20_N8S7802C13D1Ev)();
extern void _ZN8S7802C13D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7802C13D0Ev,_ZTv0_n20_N8S7802C13D0Ev)();
extern void _ZN8S7802C13D0Ev() __attribute__((weak));
extern void _ZN8S7802C143v37Ev();
extern void _ZN8S7802C143v38Ev();
extern void _ZN8S7802C143v39Ev();
extern void _ZN8S7802C143v40Ev();
extern void _ZN8S7802C143v41Ev();
extern void _ZN8S7802C143v42Ev();
extern void _ZN8S7802C133v43Ev();
extern void _ZN8S7802C133v44Ev();
static  VTBL_ENTRY _tg__ZTV8S7802C13__8S7802C12[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(56,28),
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S7802C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7802C13D1Ev,_ZTv0_n20_N8S7802C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7802C13D0Ev,_ZTv0_n20_N8S7802C13D0Ev),
  (VTBL_ENTRY)&_ZN8S7802C143v37Ev,
  (VTBL_ENTRY)&_ZN8S7802C143v38Ev,
  (VTBL_ENTRY)&_ZN8S7802C143v39Ev,
  (VTBL_ENTRY)&_ZN8S7802C143v40Ev,
  (VTBL_ENTRY)&_ZN8S7802C143v41Ev,
  (VTBL_ENTRY)&_ZN8S7802C143v42Ev,
  (VTBL_ENTRY)&_ZN8S7802C133v43Ev,
  (VTBL_ENTRY)&_ZN8S7802C133v44Ev,
};
extern void _ZN7S7802C83v10Ev();
extern void _ZN7S7802C83v11Ev();
extern void _ZN7S7802C83v12Ev();
extern void _ZN7S7802C83v13Ev();
extern void _ZN7S7802C83v14Ev();
extern void _ZN7S7802C83v15Ev();
extern void ABISELECT(_ZTv0_n72_N8S7802C13D1Ev,_ZTv0_n36_N8S7802C13D1Ev)();
extern void ABISELECT(_ZThn24_N8S7802C13D1Ev,_ZThn12_N8S7802C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S7802C13D0Ev,_ZTv0_n36_N8S7802C13D0Ev)();
extern void ABISELECT(_ZThn24_N8S7802C13D0Ev,_ZThn12_N8S7802C13D0Ev)() __attribute__((weak));
extern void _ZN7S7802C73v22Ev();
extern void _ZN7S7802C73v23Ev();
extern void _ZN7S7802C73v24Ev();
extern void _ZN7S7802C73v25Ev();
extern void _ZN7S7802C73v26Ev();
static  VTBL_ENTRY _tg__ZTV7S7802C7__8S7802C13__8S7802C12[] = {
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-12),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S7802C13[0]),
  (VTBL_ENTRY)&_ZN7S7802C83v10Ev,
  (VTBL_ENTRY)&_ZN7S7802C83v11Ev,
  (VTBL_ENTRY)&_ZN7S7802C83v12Ev,
  (VTBL_ENTRY)&_ZN7S7802C83v13Ev,
  (VTBL_ENTRY)&_ZN7S7802C83v14Ev,
  (VTBL_ENTRY)&_ZN7S7802C83v15Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S7802C13D1Ev,_ZTv0_n36_N8S7802C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S7802C13D0Ev,_ZTv0_n36_N8S7802C13D0Ev),
  (VTBL_ENTRY)&_ZN7S7802C73v22Ev,
  (VTBL_ENTRY)&_ZN7S7802C73v23Ev,
  (VTBL_ENTRY)&_ZN7S7802C73v24Ev,
  (VTBL_ENTRY)&_ZN7S7802C73v25Ev,
  (VTBL_ENTRY)&_ZN7S7802C73v26Ev,
};
extern void ABISELECT(_ZTvn24_n72_N8S7802C13D1Ev,_ZTvn12_n36_N8S7802C13D1Ev)();
extern void ABISELECT(_ZTvn24_n72_N8S7802C13D0Ev,_ZTvn12_n36_N8S7802C13D0Ev)();
extern void _ZN7S7802C93v16Ev();
extern void _ZN7S7802C93v17Ev();
extern void _ZN7S7802C93v18Ev();
extern void _ZN7S7802C93v19Ev();
extern void _ZN7S7802C93v20Ev();
extern void _ZN7S7802C93v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7802C97S7802C7__8S7802C13__8S7802C12[] = {
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S7802C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N8S7802C13D1Ev,_ZTvn12_n36_N8S7802C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N8S7802C13D0Ev,_ZTvn12_n36_N8S7802C13D0Ev),
  (VTBL_ENTRY)&_ZN7S7802C93v16Ev,
  (VTBL_ENTRY)&_ZN7S7802C93v17Ev,
  (VTBL_ENTRY)&_ZN7S7802C93v18Ev,
  (VTBL_ENTRY)&_ZN7S7802C93v19Ev,
  (VTBL_ENTRY)&_ZN7S7802C93v20Ev,
  (VTBL_ENTRY)&_ZN7S7802C93v21Ev,
};
extern void _ZN7S7802C42v5Ev();
extern void _ZN7S7802C42v6Ev();
extern void _ZN7S7802C42v7Ev();
extern void _ZN7S7802C42v8Ev();
extern void _ZN7S7802C42v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7802C4__8S7802C13__8S7802C12[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S7802C13[0]),
  (VTBL_ENTRY)&_ZN7S7802C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7802C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7802C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7802C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7802C42v9Ev,
};
extern void _ZN8S7802C14D1Ev();
extern void _ZN8S7802C14D0Ev();
extern void _ZN8S7802C143v37Ev();
extern void _ZN8S7802C143v38Ev();
extern void _ZN8S7802C143v39Ev();
extern void _ZN8S7802C143v40Ev();
extern void _ZN8S7802C143v41Ev();
extern void _ZN8S7802C143v42Ev();
static  VTBL_ENTRY _tg__ZTV8S7802C14__8S7802C12[] = {
  ABISELECT(56,28),
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S7802C14[0]),
  (VTBL_ENTRY)&_ZN8S7802C14D1Ev,
  (VTBL_ENTRY)&_ZN8S7802C14D0Ev,
  (VTBL_ENTRY)&_ZN8S7802C143v37Ev,
  (VTBL_ENTRY)&_ZN8S7802C143v38Ev,
  (VTBL_ENTRY)&_ZN8S7802C143v39Ev,
  (VTBL_ENTRY)&_ZN8S7802C143v40Ev,
  (VTBL_ENTRY)&_ZN8S7802C143v41Ev,
  (VTBL_ENTRY)&_ZN8S7802C143v42Ev,
};
extern void _ZN7S7802C83v10Ev();
extern void _ZN7S7802C83v11Ev();
extern void _ZN7S7802C83v12Ev();
extern void _ZN7S7802C83v13Ev();
extern void _ZN7S7802C83v14Ev();
extern void _ZN7S7802C83v15Ev();
extern void ABISELECT(_ZTv0_n72_N8S7802C14D1Ev,_ZTv0_n36_N8S7802C14D1Ev)();
extern void ABISELECT(_ZThn24_N8S7802C14D1Ev,_ZThn12_N8S7802C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S7802C14D0Ev,_ZTv0_n36_N8S7802C14D0Ev)();
extern void ABISELECT(_ZThn24_N8S7802C14D0Ev,_ZThn12_N8S7802C14D0Ev)() __attribute__((weak));
extern void _ZN7S7802C73v22Ev();
extern void _ZN7S7802C73v23Ev();
extern void _ZN7S7802C73v24Ev();
extern void _ZN7S7802C73v25Ev();
extern void _ZN7S7802C73v26Ev();
static  VTBL_ENTRY _tg__ZTV7S7802C7__8S7802C14__8S7802C12[] = {
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-12),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S7802C14[0]),
  (VTBL_ENTRY)&_ZN7S7802C83v10Ev,
  (VTBL_ENTRY)&_ZN7S7802C83v11Ev,
  (VTBL_ENTRY)&_ZN7S7802C83v12Ev,
  (VTBL_ENTRY)&_ZN7S7802C83v13Ev,
  (VTBL_ENTRY)&_ZN7S7802C83v14Ev,
  (VTBL_ENTRY)&_ZN7S7802C83v15Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S7802C14D1Ev,_ZTv0_n36_N8S7802C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S7802C14D0Ev,_ZTv0_n36_N8S7802C14D0Ev),
  (VTBL_ENTRY)&_ZN7S7802C73v22Ev,
  (VTBL_ENTRY)&_ZN7S7802C73v23Ev,
  (VTBL_ENTRY)&_ZN7S7802C73v24Ev,
  (VTBL_ENTRY)&_ZN7S7802C73v25Ev,
  (VTBL_ENTRY)&_ZN7S7802C73v26Ev,
};
extern void ABISELECT(_ZTvn24_n72_N8S7802C14D1Ev,_ZTvn12_n36_N8S7802C14D1Ev)();
extern void ABISELECT(_ZTvn24_n72_N8S7802C14D0Ev,_ZTvn12_n36_N8S7802C14D0Ev)();
extern void _ZN7S7802C93v16Ev();
extern void _ZN7S7802C93v17Ev();
extern void _ZN7S7802C93v18Ev();
extern void _ZN7S7802C93v19Ev();
extern void _ZN7S7802C93v20Ev();
extern void _ZN7S7802C93v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7802C97S7802C7__8S7802C14__8S7802C12[] = {
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S7802C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N8S7802C14D1Ev,_ZTvn12_n36_N8S7802C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N8S7802C14D0Ev,_ZTvn12_n36_N8S7802C14D0Ev),
  (VTBL_ENTRY)&_ZN7S7802C93v16Ev,
  (VTBL_ENTRY)&_ZN7S7802C93v17Ev,
  (VTBL_ENTRY)&_ZN7S7802C93v18Ev,
  (VTBL_ENTRY)&_ZN7S7802C93v19Ev,
  (VTBL_ENTRY)&_ZN7S7802C93v20Ev,
  (VTBL_ENTRY)&_ZN7S7802C93v21Ev,
};
extern void _ZN7S7802C42v5Ev();
extern void _ZN7S7802C42v6Ev();
extern void _ZN7S7802C42v7Ev();
extern void _ZN7S7802C42v8Ev();
extern void _ZN7S7802C42v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7802C4__8S7802C14__8S7802C12[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S7802C14[0]),
  (VTBL_ENTRY)&_ZN7S7802C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7802C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7802C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7802C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7802C42v9Ev,
};
static  VTT_ENTRY vtt_S7802C12[] = {
  {&(_ZTV8S7802C12[16]),  16,95},
  {&(_ZTV8S7802C12[16]),  16,95},
  {&(_ZTV8S7802C12[16]),  16,95},
  {&(_ZTV8S7802C12[50]),  50,95},
  {&(_ZTV8S7802C12[65]),  65,95},
  {&(_ZTV8S7802C12[80]),  80,95},
  {&(_ZTV8S7802C12[91]),  91,95},
  {&(_tg__ZTV8S7802C13__8S7802C12[12]),  12,22},
  {&(_tg__ZTV8S7802C13__8S7802C12[12]),  12,22},
  {&(_tg__ZTV7S7802C7__8S7802C13__8S7802C12[20]),  20,33},
  {&(_tg__ZTV7S7802C97S7802C7__8S7802C13__8S7802C12[2]),  2,10},
  {&(_tg__ZTV7S7802C4__8S7802C13__8S7802C12[7]),  7,12},
  {&(_tg__ZTV8S7802C14__8S7802C12[4]),  4,12},
  {&(_tg__ZTV7S7802C7__8S7802C14__8S7802C12[20]),  20,33},
  {&(_tg__ZTV7S7802C97S7802C7__8S7802C14__8S7802C12[2]),  2,10},
  {&(_tg__ZTV7S7802C4__8S7802C14__8S7802C12[7]),  7,12},
};
extern VTBL_ENTRY _ZTI8S7802C12[];
extern  VTBL_ENTRY _ZTV8S7802C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7802C12[];
static VTBL_ENTRY alt_thunk_names10[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S7802C14D0Ev,_ZTv0_n36_N8S7802C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S7802C14D0Ev,_ZThn12_N8S7802C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S7802C14D1Ev,_ZTv0_n36_N8S7802C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S7802C14D1Ev,_ZThn12_N8S7802C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S7802C13D0Ev,_ZTv0_n36_N8S7802C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S7802C13D0Ev,_ZThn12_N8S7802C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S7802C13D1Ev,_ZTv0_n36_N8S7802C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S7802C13D1Ev,_ZThn12_N8S7802C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7802C13D0Ev,_ZTv0_n20_N8S7802C13D0Ev), // 
  (VTBL_ENTRY)_ZN8S7802C13D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7802C13D1Ev,_ZTv0_n20_N8S7802C13D1Ev), // 
  (VTBL_ENTRY)_ZN8S7802C13D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S7802C12D0Ev,_ZTv0_n36_N8S7802C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S7802C12D0Ev,_ZThn12_N8S7802C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S7802C12D1Ev,_ZTv0_n36_N8S7802C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S7802C12D1Ev,_ZThn12_N8S7802C12D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7802C12 = {  "S7802C12", // class name
  bases_S7802C12, 7,
  &(vtc_S7802C12[0]), // expected_vtbl_contents
  &(vtt_S7802C12[0]), // expected_vtt_contents
  ABISELECT(96,48), // object size
  NSPAIRA(_ZTI8S7802C12),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S7802C12),95, //virtual function table var
  16, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7802C12),16, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names10,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7802C1  : S7802C2 , virtual S7802C12 {
  __tsi64 s7802c1f0;
  virtual  ~S7802C1(); // _ZN7S7802C1D2Ev
  virtual void  v1(); // _ZN7S7802C12v1Ev
  virtual void  v2(); // _ZN7S7802C12v2Ev
  virtual void  v3(); // _ZN7S7802C12v3Ev
  virtual void  v4(); // _ZN7S7802C12v4Ev
  S7802C1(); // tgen
};
//SIG(1 S7802C1) C1{ BC2{ VBC3{ VBC4{ v5 v6 v7 v8 v9 FC5{} Fp} VBC6{ VBC7{ BC8{ v10 v11 v12 v13 v14 v15 FC9{ vd v16 v17 v18 v19 v20 v21} Fi} BC9 vd v22 v23 v24 v25 v26} VBC4 vd v27 v28} vd v29} BC10{ BC4 v30 v31 v32 v33 v34 v35 v36 FC4} FC11{ v45 v46 v47 v48 FC5}} VBC12{ VBC13{ VBC14{ VBC7 VBC4 vd v37 v38 v39 v40 v41 v42} vd v43 v44} VBC11 v49 v50 v51 v52 FC11} vd v1 v2 v3 v4 FL}


 S7802C1 ::~S7802C1(){ note_dtor("S7802C1", this);}
void  S7802C1 ::v1(){vfunc_called(this, "_ZN7S7802C12v1Ev");}
void  S7802C1 ::v2(){vfunc_called(this, "_ZN7S7802C12v2Ev");}
void  S7802C1 ::v3(){vfunc_called(this, "_ZN7S7802C12v3Ev");}
void  S7802C1 ::v4(){vfunc_called(this, "_ZN7S7802C12v4Ev");}
S7802C1 ::S7802C1(){ note_ctor("S7802C1", this);} // tgen

static void Test_S7802C1()
{
  extern Class_Descriptor cd_S7802C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(23,24)];
    init_test(&cd_S7802C1, buf);
    S7802C1 *dp, &lv = *(dp=new (buf) S7802C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,92), "sizeof(S7802C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7802C1)");
    check_base_class_offset(lv, (S7802C4*)(S7802C3*), ABISELECT(80,44), "S7802C1");
    check_base_class_offset(lv, (S7802C4*)(S7802C6*), ABISELECT(80,44), "S7802C1");
    check_base_class_offset(lv, (S7802C4*)(S7802C14*), ABISELECT(80,44), "S7802C1");
    check_base_class_offset(lv, (S7802C8*)(S7802C7*), ABISELECT(104,56), "S7802C1");
    check_base_class_offset(lv, (S7802C9*)(S7802C7*), ABISELECT(128,68), "S7802C1");
    check_base_class_offset(lv, (S7802C7*)(S7802C6*), ABISELECT(104,56), "S7802C1");
    check_base_class_offset(lv, (S7802C7*)(S7802C14*), ABISELECT(104,56), "S7802C1");
    check_base_class_offset(lv, (S7802C6*)(S7802C3*), ABISELECT(72,40), "S7802C1");
    check_base_class_offset(lv, (S7802C3*)(S7802C2*), ABISELECT(72,40), "S7802C1");
    check_base_class_offset(lv, (S7802C4*)(S7802C10*)(S7802C2*), 0, "S7802C1");
    check_base_class_offset(lv, (S7802C10*)(S7802C2*), 0, "S7802C1");
    check_base_class_offset(lv, (S7802C2*), 0, "S7802C1");
    check_base_class_offset(lv, (S7802C14*)(S7802C13*), ABISELECT(136,72), "S7802C1");
    check_base_class_offset(lv, (S7802C13*)(S7802C12*), ABISELECT(136,72), "S7802C1");
    check_base_class_offset(lv, (S7802C11*)(S7802C12*), ABISELECT(160,84), "S7802C1");
    check_base_class_offset(lv, (S7802C12*), ABISELECT(136,72), "S7802C1");
    check_field_offset(lv, s7802c1f0, ABISELECT(64,32), "S7802C1.s7802c1f0");
    test_class_info(&lv, &cd_S7802C1);
    dp->~S7802C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7802C1(Test_S7802C1, "S7802C1", ABISELECT(176,92));

#else // __cplusplus

extern void _ZN7S7802C1C1Ev();
extern void _ZN7S7802C1D2Ev();
Name_Map name_map_S7802C1[] = {
  NSPAIR(_ZN7S7802C1C1Ev),
  NSPAIR(_ZN7S7802C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7802C4;
extern VTBL_ENTRY _ZTI7S7802C4[];
extern  VTBL_ENTRY _ZTV7S7802C4[];
extern Class_Descriptor cd_S7802C8;
extern VTBL_ENTRY _ZTI7S7802C8[];
extern  VTBL_ENTRY _ZTV7S7802C8[];
extern Class_Descriptor cd_S7802C9;
extern VTBL_ENTRY _ZTI7S7802C9[];
extern  VTBL_ENTRY _ZTV7S7802C9[];
extern Class_Descriptor cd_S7802C7;
extern VTBL_ENTRY _ZTI7S7802C7[];
extern  VTBL_ENTRY _ZTV7S7802C7[];
extern Class_Descriptor cd_S7802C6;
extern VTBL_ENTRY _ZTI7S7802C6[];
extern  VTBL_ENTRY _ZTV7S7802C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7802C6[];
extern Class_Descriptor cd_S7802C3;
extern VTBL_ENTRY _ZTI7S7802C3[];
extern  VTBL_ENTRY _ZTV7S7802C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7802C3[];
extern Class_Descriptor cd_S7802C4;
extern VTBL_ENTRY _ZTI7S7802C4[];
extern  VTBL_ENTRY _ZTV7S7802C4[];
extern Class_Descriptor cd_S7802C10;
extern VTBL_ENTRY _ZTI8S7802C10[];
extern  VTBL_ENTRY _ZTV8S7802C10[];
extern Class_Descriptor cd_S7802C2;
extern VTBL_ENTRY _ZTI7S7802C2[];
extern  VTBL_ENTRY _ZTV7S7802C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7802C2[];
extern Class_Descriptor cd_S7802C14;
extern VTBL_ENTRY _ZTI8S7802C14[];
extern  VTBL_ENTRY _ZTV8S7802C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7802C14[];
extern Class_Descriptor cd_S7802C13;
extern VTBL_ENTRY _ZTI8S7802C13[];
extern  VTBL_ENTRY _ZTV8S7802C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7802C13[];
extern Class_Descriptor cd_S7802C11;
extern VTBL_ENTRY _ZTI8S7802C11[];
extern  VTBL_ENTRY _ZTV8S7802C11[];
extern Class_Descriptor cd_S7802C12;
extern VTBL_ENTRY _ZTI8S7802C12[];
extern  VTBL_ENTRY _ZTV8S7802C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7802C12[];
static Base_Class bases_S7802C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7802C4,    ABISELECT(80,44), //bcp->offset
    42, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7802C8,    ABISELECT(104,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7802C9,    ABISELECT(128,68), //bcp->offset
    87, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7802C7,    ABISELECT(104,56), //bcp->offset
    54, //bcp->virtual_function_table_offset
    20, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7802C6,    ABISELECT(72,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S7802C3,    ABISELECT(72,40), //bcp->offset
    28, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S7802C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S7802C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    8, //immediately_derived
  0, 0},
  {&cd_S7802C2,    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},
  {&cd_S7802C14,    ABISELECT(136,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S7802C13,    ABISELECT(136,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S7802C11,    ABISELECT(160,84), //bcp->offset
    131, //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
    9, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S7802C12,    ABISELECT(136,72), //bcp->offset
    97, //bcp->virtual_function_table_offset
    20, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7802C1[];
extern void _ZN7S7802C42v5Ev();
extern void _ZN7S7802C42v6Ev();
extern void _ZN7S7802C42v7Ev();
extern void _ZN7S7802C42v8Ev();
extern void _ZN7S7802C42v9Ev();
extern void _ZN8S7802C103v30Ev();
extern void _ZN8S7802C103v31Ev();
extern void _ZN8S7802C103v32Ev();
extern void _ZN8S7802C103v33Ev();
extern void _ZN8S7802C103v34Ev();
extern void _ZN8S7802C103v35Ev();
extern void _ZN8S7802C103v36Ev();
extern void _ZN7S7802C1D1Ev();
extern void _ZN7S7802C1D0Ev();
extern void _ZN7S7802C12v1Ev();
extern void _ZN7S7802C12v2Ev();
extern void _ZN7S7802C12v3Ev();
extern void _ZN7S7802C12v4Ev();
extern void ABISELECT(_ZTv0_n40_N7S7802C1D1Ev,_ZTv0_n20_N7S7802C1D1Ev)();
extern void ABISELECT(_ZThn72_N7S7802C1D1Ev,_ZThn40_N7S7802C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7802C1D0Ev,_ZTv0_n20_N7S7802C1D0Ev)();
extern void ABISELECT(_ZThn72_N7S7802C1D0Ev,_ZThn40_N7S7802C1D0Ev)() __attribute__((weak));
extern void _ZN7S7802C63v27Ev();
extern void _ZN7S7802C63v28Ev();
extern void _ZN7S7802C33v29Ev();
extern void _ZN7S7802C42v5Ev();
extern void _ZN7S7802C42v6Ev();
extern void _ZN7S7802C42v7Ev();
extern void _ZN7S7802C42v8Ev();
extern void _ZN7S7802C42v9Ev();
extern void _ZN7S7802C83v10Ev();
extern void _ZN7S7802C83v11Ev();
extern void _ZN7S7802C83v12Ev();
extern void _ZN7S7802C83v13Ev();
extern void _ZN7S7802C83v14Ev();
extern void _ZN7S7802C83v15Ev();
extern void ABISELECT(_ZTv0_n72_N7S7802C1D1Ev,_ZTv0_n36_N7S7802C1D1Ev)();
extern void ABISELECT(_ZThn104_N7S7802C1D1Ev,_ZThn56_N7S7802C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S7802C1D0Ev,_ZTv0_n36_N7S7802C1D0Ev)();
extern void ABISELECT(_ZThn104_N7S7802C1D0Ev,_ZThn56_N7S7802C1D0Ev)() __attribute__((weak));
extern void _ZN7S7802C73v22Ev();
extern void _ZN7S7802C73v23Ev();
extern void _ZN7S7802C73v24Ev();
extern void _ZN7S7802C73v25Ev();
extern void _ZN7S7802C73v26Ev();
extern void ABISELECT(_ZTvn24_n72_N7S7802C1D1Ev,_ZTvn12_n36_N7S7802C1D1Ev)();
extern void ABISELECT(_ZTvn24_n72_N7S7802C1D0Ev,_ZTvn12_n36_N7S7802C1D0Ev)();
extern void _ZN7S7802C93v16Ev();
extern void _ZN7S7802C93v17Ev();
extern void _ZN7S7802C93v18Ev();
extern void _ZN7S7802C93v19Ev();
extern void _ZN7S7802C93v20Ev();
extern void _ZN7S7802C93v21Ev();
extern void ABISELECT(_ZTv0_n40_N7S7802C1D1Ev,_ZTv0_n20_N7S7802C1D1Ev)();
extern void ABISELECT(_ZThn136_N7S7802C1D1Ev,_ZThn72_N7S7802C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7802C1D0Ev,_ZTv0_n20_N7S7802C1D0Ev)();
extern void ABISELECT(_ZThn136_N7S7802C1D0Ev,_ZThn72_N7S7802C1D0Ev)() __attribute__((weak));
extern void _ZN8S7802C143v37Ev();
extern void _ZN8S7802C143v38Ev();
extern void _ZN8S7802C143v39Ev();
extern void _ZN8S7802C143v40Ev();
extern void _ZN8S7802C143v41Ev();
extern void _ZN8S7802C143v42Ev();
extern void _ZN8S7802C133v43Ev();
extern void _ZN8S7802C133v44Ev();
extern void _ZN8S7802C123v49Ev();
extern void _ZN8S7802C123v50Ev();
extern void _ZN8S7802C123v51Ev();
extern void _ZN8S7802C123v52Ev();
extern void _ZN8S7802C113v45Ev();
extern void _ZN8S7802C113v46Ev();
extern void _ZN8S7802C113v47Ev();
extern void _ZN8S7802C113v48Ev();
static  VTBL_ENTRY vtc_S7802C1[] = {
  ABISELECT(160,84),
  ABISELECT(136,72),
  ABISELECT(136,72),
  ABISELECT(136,72),
  ABISELECT(104,56),
  ABISELECT(72,40),
  ABISELECT(80,44),
  ABISELECT(72,40),
  0,
  (VTBL_ENTRY)&(_ZTI7S7802C1[0]),
  (VTBL_ENTRY)&_ZN7S7802C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7802C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7802C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7802C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7802C42v9Ev,
  (VTBL_ENTRY)&_ZN8S7802C103v30Ev,
  (VTBL_ENTRY)&_ZN8S7802C103v31Ev,
  (VTBL_ENTRY)&_ZN8S7802C103v32Ev,
  (VTBL_ENTRY)&_ZN8S7802C103v33Ev,
  (VTBL_ENTRY)&_ZN8S7802C103v34Ev,
  (VTBL_ENTRY)&_ZN8S7802C103v35Ev,
  (VTBL_ENTRY)&_ZN8S7802C103v36Ev,
  (VTBL_ENTRY)&_ZN7S7802C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7802C1D0Ev,
  (VTBL_ENTRY)&_ZN7S7802C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7802C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7802C12v3Ev,
  (VTBL_ENTRY)&_ZN7S7802C12v4Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-72,-40),
  ABISELECT(8,4),
  ABISELECT(32,16),
  ABISELECT(-72,-40),
  (VTBL_ENTRY)&(_ZTI7S7802C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7802C1D1Ev,_ZTv0_n20_N7S7802C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7802C1D0Ev,_ZTv0_n20_N7S7802C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7802C63v27Ev,
  (VTBL_ENTRY)&_ZN7S7802C63v28Ev,
  (VTBL_ENTRY)&_ZN7S7802C33v29Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI7S7802C1[0]),
  (VTBL_ENTRY)&_ZN7S7802C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7802C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7802C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7802C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7802C42v9Ev,
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-104,-56),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI7S7802C1[0]),
  (VTBL_ENTRY)&_ZN7S7802C83v10Ev,
  (VTBL_ENTRY)&_ZN7S7802C83v11Ev,
  (VTBL_ENTRY)&_ZN7S7802C83v12Ev,
  (VTBL_ENTRY)&_ZN7S7802C83v13Ev,
  (VTBL_ENTRY)&_ZN7S7802C83v14Ev,
  (VTBL_ENTRY)&_ZN7S7802C83v15Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S7802C1D1Ev,_ZTv0_n36_N7S7802C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S7802C1D0Ev,_ZTv0_n36_N7S7802C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7802C73v22Ev,
  (VTBL_ENTRY)&_ZN7S7802C73v23Ev,
  (VTBL_ENTRY)&_ZN7S7802C73v24Ev,
  (VTBL_ENTRY)&_ZN7S7802C73v25Ev,
  (VTBL_ENTRY)&_ZN7S7802C73v26Ev,
  ABISELECT(-128,-68),
  (VTBL_ENTRY)&(_ZTI7S7802C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N7S7802C1D1Ev,_ZTvn12_n36_N7S7802C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N7S7802C1D0Ev,_ZTvn12_n36_N7S7802C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7802C93v16Ev,
  (VTBL_ENTRY)&_ZN7S7802C93v17Ev,
  (VTBL_ENTRY)&_ZN7S7802C93v18Ev,
  (VTBL_ENTRY)&_ZN7S7802C93v19Ev,
  (VTBL_ENTRY)&_ZN7S7802C93v20Ev,
  (VTBL_ENTRY)&_ZN7S7802C93v21Ev,
  0,
  0,
  0,
  0,
  ABISELECT(24,12),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-136,-72),
  ABISELECT(-56,-28),
  ABISELECT(-32,-16),
  ABISELECT(-136,-72),
  (VTBL_ENTRY)&(_ZTI7S7802C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7802C1D1Ev,_ZTv0_n20_N7S7802C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7802C1D0Ev,_ZTv0_n20_N7S7802C1D0Ev),
  (VTBL_ENTRY)&_ZN8S7802C143v37Ev,
  (VTBL_ENTRY)&_ZN8S7802C143v38Ev,
  (VTBL_ENTRY)&_ZN8S7802C143v39Ev,
  (VTBL_ENTRY)&_ZN8S7802C143v40Ev,
  (VTBL_ENTRY)&_ZN8S7802C143v41Ev,
  (VTBL_ENTRY)&_ZN8S7802C143v42Ev,
  (VTBL_ENTRY)&_ZN8S7802C133v43Ev,
  (VTBL_ENTRY)&_ZN8S7802C133v44Ev,
  (VTBL_ENTRY)&_ZN8S7802C123v49Ev,
  (VTBL_ENTRY)&_ZN8S7802C123v50Ev,
  (VTBL_ENTRY)&_ZN8S7802C123v51Ev,
  (VTBL_ENTRY)&_ZN8S7802C123v52Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-160,-84),
  (VTBL_ENTRY)&(_ZTI7S7802C1[0]),
  (VTBL_ENTRY)&_ZN8S7802C113v45Ev,
  (VTBL_ENTRY)&_ZN8S7802C113v46Ev,
  (VTBL_ENTRY)&_ZN8S7802C113v47Ev,
  (VTBL_ENTRY)&_ZN8S7802C113v48Ev,
};
extern VTBL_ENTRY _ZTV7S7802C1[];
extern void _ZN7S7802C42v5Ev();
extern void _ZN7S7802C42v6Ev();
extern void _ZN7S7802C42v7Ev();
extern void _ZN7S7802C42v8Ev();
extern void _ZN7S7802C42v9Ev();
extern void _ZN8S7802C103v30Ev();
extern void _ZN8S7802C103v31Ev();
extern void _ZN8S7802C103v32Ev();
extern void _ZN8S7802C103v33Ev();
extern void _ZN8S7802C103v34Ev();
extern void _ZN8S7802C103v35Ev();
extern void _ZN8S7802C103v36Ev();
extern void _ZN7S7802C2D1Ev();
extern void _ZN7S7802C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7802C2__7S7802C1[] = {
  ABISELECT(104,56),
  ABISELECT(72,40),
  ABISELECT(80,44),
  ABISELECT(72,40),
  0,
  (VTBL_ENTRY)&(_ZTI7S7802C2[0]),
  (VTBL_ENTRY)&_ZN7S7802C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7802C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7802C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7802C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7802C42v9Ev,
  (VTBL_ENTRY)&_ZN8S7802C103v30Ev,
  (VTBL_ENTRY)&_ZN8S7802C103v31Ev,
  (VTBL_ENTRY)&_ZN8S7802C103v32Ev,
  (VTBL_ENTRY)&_ZN8S7802C103v33Ev,
  (VTBL_ENTRY)&_ZN8S7802C103v34Ev,
  (VTBL_ENTRY)&_ZN8S7802C103v35Ev,
  (VTBL_ENTRY)&_ZN8S7802C103v36Ev,
  (VTBL_ENTRY)&_ZN7S7802C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7802C2D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S7802C2D1Ev,_ZTv0_n20_N7S7802C2D1Ev)();
extern void ABISELECT(_ZThn72_N7S7802C2D1Ev,_ZThn40_N7S7802C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7802C2D0Ev,_ZTv0_n20_N7S7802C2D0Ev)();
extern void ABISELECT(_ZThn72_N7S7802C2D0Ev,_ZThn40_N7S7802C2D0Ev)() __attribute__((weak));
extern void _ZN7S7802C63v27Ev();
extern void _ZN7S7802C63v28Ev();
extern void _ZN7S7802C33v29Ev();
static  VTBL_ENTRY _tg__ZTV7S7802C3__7S7802C2__7S7802C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-72,-40),
  ABISELECT(8,4),
  ABISELECT(32,16),
  ABISELECT(-72,-40),
  (VTBL_ENTRY)&(_ZTI7S7802C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7802C2D1Ev,_ZTv0_n20_N7S7802C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7802C2D0Ev,_ZTv0_n20_N7S7802C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7802C63v27Ev,
  (VTBL_ENTRY)&_ZN7S7802C63v28Ev,
  (VTBL_ENTRY)&_ZN7S7802C33v29Ev,
};
extern void _ZN7S7802C42v5Ev();
extern void _ZN7S7802C42v6Ev();
extern void _ZN7S7802C42v7Ev();
extern void _ZN7S7802C42v8Ev();
extern void _ZN7S7802C42v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7802C4__7S7802C2__7S7802C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI7S7802C2[0]),
  (VTBL_ENTRY)&_ZN7S7802C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7802C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7802C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7802C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7802C42v9Ev,
};
extern void _ZN7S7802C83v10Ev();
extern void _ZN7S7802C83v11Ev();
extern void _ZN7S7802C83v12Ev();
extern void _ZN7S7802C83v13Ev();
extern void _ZN7S7802C83v14Ev();
extern void _ZN7S7802C83v15Ev();
extern void ABISELECT(_ZTv0_n72_N7S7802C2D1Ev,_ZTv0_n36_N7S7802C2D1Ev)();
extern void ABISELECT(_ZThn104_N7S7802C2D1Ev,_ZThn56_N7S7802C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S7802C2D0Ev,_ZTv0_n36_N7S7802C2D0Ev)();
extern void ABISELECT(_ZThn104_N7S7802C2D0Ev,_ZThn56_N7S7802C2D0Ev)() __attribute__((weak));
extern void _ZN7S7802C73v22Ev();
extern void _ZN7S7802C73v23Ev();
extern void _ZN7S7802C73v24Ev();
extern void _ZN7S7802C73v25Ev();
extern void _ZN7S7802C73v26Ev();
static  VTBL_ENTRY _tg__ZTV7S7802C7__7S7802C2__7S7802C1[] = {
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-104,-56),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI7S7802C2[0]),
  (VTBL_ENTRY)&_ZN7S7802C83v10Ev,
  (VTBL_ENTRY)&_ZN7S7802C83v11Ev,
  (VTBL_ENTRY)&_ZN7S7802C83v12Ev,
  (VTBL_ENTRY)&_ZN7S7802C83v13Ev,
  (VTBL_ENTRY)&_ZN7S7802C83v14Ev,
  (VTBL_ENTRY)&_ZN7S7802C83v15Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S7802C2D1Ev,_ZTv0_n36_N7S7802C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S7802C2D0Ev,_ZTv0_n36_N7S7802C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7802C73v22Ev,
  (VTBL_ENTRY)&_ZN7S7802C73v23Ev,
  (VTBL_ENTRY)&_ZN7S7802C73v24Ev,
  (VTBL_ENTRY)&_ZN7S7802C73v25Ev,
  (VTBL_ENTRY)&_ZN7S7802C73v26Ev,
};
extern void ABISELECT(_ZTvn24_n72_N7S7802C2D1Ev,_ZTvn12_n36_N7S7802C2D1Ev)();
extern void ABISELECT(_ZTvn24_n72_N7S7802C2D0Ev,_ZTvn12_n36_N7S7802C2D0Ev)();
extern void _ZN7S7802C93v16Ev();
extern void _ZN7S7802C93v17Ev();
extern void _ZN7S7802C93v18Ev();
extern void _ZN7S7802C93v19Ev();
extern void _ZN7S7802C93v20Ev();
extern void _ZN7S7802C93v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7802C97S7802C7__7S7802C2__7S7802C1[] = {
  ABISELECT(-128,-68),
  (VTBL_ENTRY)&(_ZTI7S7802C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N7S7802C2D1Ev,_ZTvn12_n36_N7S7802C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N7S7802C2D0Ev,_ZTvn12_n36_N7S7802C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7802C93v16Ev,
  (VTBL_ENTRY)&_ZN7S7802C93v17Ev,
  (VTBL_ENTRY)&_ZN7S7802C93v18Ev,
  (VTBL_ENTRY)&_ZN7S7802C93v19Ev,
  (VTBL_ENTRY)&_ZN7S7802C93v20Ev,
  (VTBL_ENTRY)&_ZN7S7802C93v21Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S7802C3D1Ev,_ZTv0_n20_N7S7802C3D1Ev)();
extern void _ZN7S7802C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7802C3D0Ev,_ZTv0_n20_N7S7802C3D0Ev)();
extern void _ZN7S7802C3D0Ev() __attribute__((weak));
extern void _ZN7S7802C63v27Ev();
extern void _ZN7S7802C63v28Ev();
extern void _ZN7S7802C33v29Ev();
static  VTBL_ENTRY _tg__ZTV7S7802C3__7S7802C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7802C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7802C3D1Ev,_ZTv0_n20_N7S7802C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7802C3D0Ev,_ZTv0_n20_N7S7802C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7802C63v27Ev,
  (VTBL_ENTRY)&_ZN7S7802C63v28Ev,
  (VTBL_ENTRY)&_ZN7S7802C33v29Ev,
};
extern void _ZN7S7802C42v5Ev();
extern void _ZN7S7802C42v6Ev();
extern void _ZN7S7802C42v7Ev();
extern void _ZN7S7802C42v8Ev();
extern void _ZN7S7802C42v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7802C4__7S7802C3__7S7802C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7802C3[0]),
  (VTBL_ENTRY)&_ZN7S7802C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7802C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7802C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7802C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7802C42v9Ev,
};
extern void _ZN7S7802C83v10Ev();
extern void _ZN7S7802C83v11Ev();
extern void _ZN7S7802C83v12Ev();
extern void _ZN7S7802C83v13Ev();
extern void _ZN7S7802C83v14Ev();
extern void _ZN7S7802C83v15Ev();
extern void ABISELECT(_ZTv0_n72_N7S7802C3D1Ev,_ZTv0_n36_N7S7802C3D1Ev)();
extern void ABISELECT(_ZThn32_N7S7802C3D1Ev,_ZThn16_N7S7802C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S7802C3D0Ev,_ZTv0_n36_N7S7802C3D0Ev)();
extern void ABISELECT(_ZThn32_N7S7802C3D0Ev,_ZThn16_N7S7802C3D0Ev)() __attribute__((weak));
extern void _ZN7S7802C73v22Ev();
extern void _ZN7S7802C73v23Ev();
extern void _ZN7S7802C73v24Ev();
extern void _ZN7S7802C73v25Ev();
extern void _ZN7S7802C73v26Ev();
static  VTBL_ENTRY _tg__ZTV7S7802C7__7S7802C3__7S7802C1[] = {
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-16),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S7802C3[0]),
  (VTBL_ENTRY)&_ZN7S7802C83v10Ev,
  (VTBL_ENTRY)&_ZN7S7802C83v11Ev,
  (VTBL_ENTRY)&_ZN7S7802C83v12Ev,
  (VTBL_ENTRY)&_ZN7S7802C83v13Ev,
  (VTBL_ENTRY)&_ZN7S7802C83v14Ev,
  (VTBL_ENTRY)&_ZN7S7802C83v15Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S7802C3D1Ev,_ZTv0_n36_N7S7802C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S7802C3D0Ev,_ZTv0_n36_N7S7802C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7802C73v22Ev,
  (VTBL_ENTRY)&_ZN7S7802C73v23Ev,
  (VTBL_ENTRY)&_ZN7S7802C73v24Ev,
  (VTBL_ENTRY)&_ZN7S7802C73v25Ev,
  (VTBL_ENTRY)&_ZN7S7802C73v26Ev,
};
extern void ABISELECT(_ZTvn24_n72_N7S7802C3D1Ev,_ZTvn12_n36_N7S7802C3D1Ev)();
extern void ABISELECT(_ZTvn24_n72_N7S7802C3D0Ev,_ZTvn12_n36_N7S7802C3D0Ev)();
extern void _ZN7S7802C93v16Ev();
extern void _ZN7S7802C93v17Ev();
extern void _ZN7S7802C93v18Ev();
extern void _ZN7S7802C93v19Ev();
extern void _ZN7S7802C93v20Ev();
extern void _ZN7S7802C93v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7802C97S7802C7__7S7802C3__7S7802C1[] = {
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI7S7802C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N7S7802C3D1Ev,_ZTvn12_n36_N7S7802C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N7S7802C3D0Ev,_ZTvn12_n36_N7S7802C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7802C93v16Ev,
  (VTBL_ENTRY)&_ZN7S7802C93v17Ev,
  (VTBL_ENTRY)&_ZN7S7802C93v18Ev,
  (VTBL_ENTRY)&_ZN7S7802C93v19Ev,
  (VTBL_ENTRY)&_ZN7S7802C93v20Ev,
  (VTBL_ENTRY)&_ZN7S7802C93v21Ev,
};
extern void _ZN7S7802C6D1Ev();
extern void _ZN7S7802C6D0Ev();
extern void _ZN7S7802C63v27Ev();
extern void _ZN7S7802C63v28Ev();
static  VTBL_ENTRY _tg__ZTV7S7802C6__7S7802C1[] = {
  ABISELECT(8,4),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7802C6[0]),
  (VTBL_ENTRY)&_ZN7S7802C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7802C6D0Ev,
  (VTBL_ENTRY)&_ZN7S7802C63v27Ev,
  (VTBL_ENTRY)&_ZN7S7802C63v28Ev,
};
extern void _ZN7S7802C83v10Ev();
extern void _ZN7S7802C83v11Ev();
extern void _ZN7S7802C83v12Ev();
extern void _ZN7S7802C83v13Ev();
extern void _ZN7S7802C83v14Ev();
extern void _ZN7S7802C83v15Ev();
extern void ABISELECT(_ZTv0_n72_N7S7802C6D1Ev,_ZTv0_n36_N7S7802C6D1Ev)();
extern void ABISELECT(_ZThn32_N7S7802C6D1Ev,_ZThn16_N7S7802C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S7802C6D0Ev,_ZTv0_n36_N7S7802C6D0Ev)();
extern void ABISELECT(_ZThn32_N7S7802C6D0Ev,_ZThn16_N7S7802C6D0Ev)() __attribute__((weak));
extern void _ZN7S7802C73v22Ev();
extern void _ZN7S7802C73v23Ev();
extern void _ZN7S7802C73v24Ev();
extern void _ZN7S7802C73v25Ev();
extern void _ZN7S7802C73v26Ev();
static  VTBL_ENTRY _tg__ZTV7S7802C7__7S7802C6__7S7802C1[] = {
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-16),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S7802C6[0]),
  (VTBL_ENTRY)&_ZN7S7802C83v10Ev,
  (VTBL_ENTRY)&_ZN7S7802C83v11Ev,
  (VTBL_ENTRY)&_ZN7S7802C83v12Ev,
  (VTBL_ENTRY)&_ZN7S7802C83v13Ev,
  (VTBL_ENTRY)&_ZN7S7802C83v14Ev,
  (VTBL_ENTRY)&_ZN7S7802C83v15Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S7802C6D1Ev,_ZTv0_n36_N7S7802C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S7802C6D0Ev,_ZTv0_n36_N7S7802C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7802C73v22Ev,
  (VTBL_ENTRY)&_ZN7S7802C73v23Ev,
  (VTBL_ENTRY)&_ZN7S7802C73v24Ev,
  (VTBL_ENTRY)&_ZN7S7802C73v25Ev,
  (VTBL_ENTRY)&_ZN7S7802C73v26Ev,
};
extern void ABISELECT(_ZTvn24_n72_N7S7802C6D1Ev,_ZTvn12_n36_N7S7802C6D1Ev)();
extern void ABISELECT(_ZTvn24_n72_N7S7802C6D0Ev,_ZTvn12_n36_N7S7802C6D0Ev)();
extern void _ZN7S7802C93v16Ev();
extern void _ZN7S7802C93v17Ev();
extern void _ZN7S7802C93v18Ev();
extern void _ZN7S7802C93v19Ev();
extern void _ZN7S7802C93v20Ev();
extern void _ZN7S7802C93v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7802C97S7802C7__7S7802C6__7S7802C1[] = {
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI7S7802C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N7S7802C6D1Ev,_ZTvn12_n36_N7S7802C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N7S7802C6D0Ev,_ZTvn12_n36_N7S7802C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7802C93v16Ev,
  (VTBL_ENTRY)&_ZN7S7802C93v17Ev,
  (VTBL_ENTRY)&_ZN7S7802C93v18Ev,
  (VTBL_ENTRY)&_ZN7S7802C93v19Ev,
  (VTBL_ENTRY)&_ZN7S7802C93v20Ev,
  (VTBL_ENTRY)&_ZN7S7802C93v21Ev,
};
extern void _ZN7S7802C42v5Ev();
extern void _ZN7S7802C42v6Ev();
extern void _ZN7S7802C42v7Ev();
extern void _ZN7S7802C42v8Ev();
extern void _ZN7S7802C42v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7802C4__7S7802C6__7S7802C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7802C6[0]),
  (VTBL_ENTRY)&_ZN7S7802C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7802C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7802C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7802C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7802C42v9Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S7802C12D1Ev,_ZTv0_n20_N8S7802C12D1Ev)();
extern void _ZN8S7802C12D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7802C12D0Ev,_ZTv0_n20_N8S7802C12D0Ev)();
extern void _ZN8S7802C12D0Ev() __attribute__((weak));
extern void _ZN8S7802C143v37Ev();
extern void _ZN8S7802C143v38Ev();
extern void _ZN8S7802C143v39Ev();
extern void _ZN8S7802C143v40Ev();
extern void _ZN8S7802C143v41Ev();
extern void _ZN8S7802C143v42Ev();
extern void _ZN8S7802C133v43Ev();
extern void _ZN8S7802C133v44Ev();
extern void _ZN8S7802C123v49Ev();
extern void _ZN8S7802C123v50Ev();
extern void _ZN8S7802C123v51Ev();
extern void _ZN8S7802C123v52Ev();
static  VTBL_ENTRY _tg__ZTV8S7802C12__7S7802C1[] = {
  ABISELECT(24,12),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-56,-28),
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI8S7802C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7802C12D1Ev,_ZTv0_n20_N8S7802C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7802C12D0Ev,_ZTv0_n20_N8S7802C12D0Ev),
  (VTBL_ENTRY)&_ZN8S7802C143v37Ev,
  (VTBL_ENTRY)&_ZN8S7802C143v38Ev,
  (VTBL_ENTRY)&_ZN8S7802C143v39Ev,
  (VTBL_ENTRY)&_ZN8S7802C143v40Ev,
  (VTBL_ENTRY)&_ZN8S7802C143v41Ev,
  (VTBL_ENTRY)&_ZN8S7802C143v42Ev,
  (VTBL_ENTRY)&_ZN8S7802C133v43Ev,
  (VTBL_ENTRY)&_ZN8S7802C133v44Ev,
  (VTBL_ENTRY)&_ZN8S7802C123v49Ev,
  (VTBL_ENTRY)&_ZN8S7802C123v50Ev,
  (VTBL_ENTRY)&_ZN8S7802C123v51Ev,
  (VTBL_ENTRY)&_ZN8S7802C123v52Ev,
};
extern void _ZN7S7802C83v10Ev();
extern void _ZN7S7802C83v11Ev();
extern void _ZN7S7802C83v12Ev();
extern void _ZN7S7802C83v13Ev();
extern void _ZN7S7802C83v14Ev();
extern void _ZN7S7802C83v15Ev();
extern void ABISELECT(_ZTv0_n72_N8S7802C12D1Ev,_ZTv0_n36_N8S7802C12D1Ev)();
extern void ABISELECT(_ZTv0_n72_N8S7802C12D0Ev,_ZTv0_n36_N8S7802C12D0Ev)();
extern void _ZN7S7802C73v22Ev();
extern void _ZN7S7802C73v23Ev();
extern void _ZN7S7802C73v24Ev();
extern void _ZN7S7802C73v25Ev();
extern void _ZN7S7802C73v26Ev();
static  VTBL_ENTRY _tg__ZTV7S7802C7__8S7802C12__7S7802C1[] = {
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,16),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI8S7802C12[0]),
  (VTBL_ENTRY)&_ZN7S7802C83v10Ev,
  (VTBL_ENTRY)&_ZN7S7802C83v11Ev,
  (VTBL_ENTRY)&_ZN7S7802C83v12Ev,
  (VTBL_ENTRY)&_ZN7S7802C83v13Ev,
  (VTBL_ENTRY)&_ZN7S7802C83v14Ev,
  (VTBL_ENTRY)&_ZN7S7802C83v15Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S7802C12D1Ev,_ZTv0_n36_N8S7802C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S7802C12D0Ev,_ZTv0_n36_N8S7802C12D0Ev),
  (VTBL_ENTRY)&_ZN7S7802C73v22Ev,
  (VTBL_ENTRY)&_ZN7S7802C73v23Ev,
  (VTBL_ENTRY)&_ZN7S7802C73v24Ev,
  (VTBL_ENTRY)&_ZN7S7802C73v25Ev,
  (VTBL_ENTRY)&_ZN7S7802C73v26Ev,
};
extern void ABISELECT(_ZTvn24_n72_N8S7802C12D1Ev,_ZTvn12_n36_N8S7802C12D1Ev)();
extern void ABISELECT(_ZTvn24_n72_N8S7802C12D0Ev,_ZTvn12_n36_N8S7802C12D0Ev)();
extern void _ZN7S7802C93v16Ev();
extern void _ZN7S7802C93v17Ev();
extern void _ZN7S7802C93v18Ev();
extern void _ZN7S7802C93v19Ev();
extern void _ZN7S7802C93v20Ev();
extern void _ZN7S7802C93v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7802C97S7802C7__8S7802C12__7S7802C1[] = {
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S7802C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N8S7802C12D1Ev,_ZTvn12_n36_N8S7802C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N8S7802C12D0Ev,_ZTvn12_n36_N8S7802C12D0Ev),
  (VTBL_ENTRY)&_ZN7S7802C93v16Ev,
  (VTBL_ENTRY)&_ZN7S7802C93v17Ev,
  (VTBL_ENTRY)&_ZN7S7802C93v18Ev,
  (VTBL_ENTRY)&_ZN7S7802C93v19Ev,
  (VTBL_ENTRY)&_ZN7S7802C93v20Ev,
  (VTBL_ENTRY)&_ZN7S7802C93v21Ev,
};
extern void _ZN7S7802C42v5Ev();
extern void _ZN7S7802C42v6Ev();
extern void _ZN7S7802C42v7Ev();
extern void _ZN7S7802C42v8Ev();
extern void _ZN7S7802C42v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7802C4__8S7802C12__7S7802C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(56,28),
  (VTBL_ENTRY)&(_ZTI8S7802C12[0]),
  (VTBL_ENTRY)&_ZN7S7802C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7802C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7802C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7802C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7802C42v9Ev,
};
extern void _ZN8S7802C113v45Ev();
extern void _ZN8S7802C113v46Ev();
extern void _ZN8S7802C113v47Ev();
extern void _ZN8S7802C113v48Ev();
static  VTBL_ENTRY _tg__ZTV8S7802C11__8S7802C12__7S7802C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S7802C12[0]),
  (VTBL_ENTRY)&_ZN8S7802C113v45Ev,
  (VTBL_ENTRY)&_ZN8S7802C113v46Ev,
  (VTBL_ENTRY)&_ZN8S7802C113v47Ev,
  (VTBL_ENTRY)&_ZN8S7802C113v48Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S7802C13D1Ev,_ZTv0_n20_N8S7802C13D1Ev)();
extern void _ZN8S7802C13D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7802C13D0Ev,_ZTv0_n20_N8S7802C13D0Ev)();
extern void _ZN8S7802C13D0Ev() __attribute__((weak));
extern void _ZN8S7802C143v37Ev();
extern void _ZN8S7802C143v38Ev();
extern void _ZN8S7802C143v39Ev();
extern void _ZN8S7802C143v40Ev();
extern void _ZN8S7802C143v41Ev();
extern void _ZN8S7802C143v42Ev();
extern void _ZN8S7802C133v43Ev();
extern void _ZN8S7802C133v44Ev();
static  VTBL_ENTRY _tg__ZTV8S7802C13__7S7802C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-56,-28),
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI8S7802C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7802C13D1Ev,_ZTv0_n20_N8S7802C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7802C13D0Ev,_ZTv0_n20_N8S7802C13D0Ev),
  (VTBL_ENTRY)&_ZN8S7802C143v37Ev,
  (VTBL_ENTRY)&_ZN8S7802C143v38Ev,
  (VTBL_ENTRY)&_ZN8S7802C143v39Ev,
  (VTBL_ENTRY)&_ZN8S7802C143v40Ev,
  (VTBL_ENTRY)&_ZN8S7802C143v41Ev,
  (VTBL_ENTRY)&_ZN8S7802C143v42Ev,
  (VTBL_ENTRY)&_ZN8S7802C133v43Ev,
  (VTBL_ENTRY)&_ZN8S7802C133v44Ev,
};
extern void _ZN7S7802C83v10Ev();
extern void _ZN7S7802C83v11Ev();
extern void _ZN7S7802C83v12Ev();
extern void _ZN7S7802C83v13Ev();
extern void _ZN7S7802C83v14Ev();
extern void _ZN7S7802C83v15Ev();
extern void ABISELECT(_ZTv0_n72_N8S7802C13D1Ev,_ZTv0_n36_N8S7802C13D1Ev)();
extern void ABISELECT(_ZTv0_n72_N8S7802C13D0Ev,_ZTv0_n36_N8S7802C13D0Ev)();
extern void _ZN7S7802C73v22Ev();
extern void _ZN7S7802C73v23Ev();
extern void _ZN7S7802C73v24Ev();
extern void _ZN7S7802C73v25Ev();
extern void _ZN7S7802C73v26Ev();
static  VTBL_ENTRY _tg__ZTV7S7802C7__8S7802C13__7S7802C1[] = {
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,16),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI8S7802C13[0]),
  (VTBL_ENTRY)&_ZN7S7802C83v10Ev,
  (VTBL_ENTRY)&_ZN7S7802C83v11Ev,
  (VTBL_ENTRY)&_ZN7S7802C83v12Ev,
  (VTBL_ENTRY)&_ZN7S7802C83v13Ev,
  (VTBL_ENTRY)&_ZN7S7802C83v14Ev,
  (VTBL_ENTRY)&_ZN7S7802C83v15Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S7802C13D1Ev,_ZTv0_n36_N8S7802C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S7802C13D0Ev,_ZTv0_n36_N8S7802C13D0Ev),
  (VTBL_ENTRY)&_ZN7S7802C73v22Ev,
  (VTBL_ENTRY)&_ZN7S7802C73v23Ev,
  (VTBL_ENTRY)&_ZN7S7802C73v24Ev,
  (VTBL_ENTRY)&_ZN7S7802C73v25Ev,
  (VTBL_ENTRY)&_ZN7S7802C73v26Ev,
};
extern void ABISELECT(_ZTvn24_n72_N8S7802C13D1Ev,_ZTvn12_n36_N8S7802C13D1Ev)();
extern void ABISELECT(_ZTvn24_n72_N8S7802C13D0Ev,_ZTvn12_n36_N8S7802C13D0Ev)();
extern void _ZN7S7802C93v16Ev();
extern void _ZN7S7802C93v17Ev();
extern void _ZN7S7802C93v18Ev();
extern void _ZN7S7802C93v19Ev();
extern void _ZN7S7802C93v20Ev();
extern void _ZN7S7802C93v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7802C97S7802C7__8S7802C13__7S7802C1[] = {
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S7802C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N8S7802C13D1Ev,_ZTvn12_n36_N8S7802C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N8S7802C13D0Ev,_ZTvn12_n36_N8S7802C13D0Ev),
  (VTBL_ENTRY)&_ZN7S7802C93v16Ev,
  (VTBL_ENTRY)&_ZN7S7802C93v17Ev,
  (VTBL_ENTRY)&_ZN7S7802C93v18Ev,
  (VTBL_ENTRY)&_ZN7S7802C93v19Ev,
  (VTBL_ENTRY)&_ZN7S7802C93v20Ev,
  (VTBL_ENTRY)&_ZN7S7802C93v21Ev,
};
extern void _ZN7S7802C42v5Ev();
extern void _ZN7S7802C42v6Ev();
extern void _ZN7S7802C42v7Ev();
extern void _ZN7S7802C42v8Ev();
extern void _ZN7S7802C42v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7802C4__8S7802C13__7S7802C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(56,28),
  (VTBL_ENTRY)&(_ZTI8S7802C13[0]),
  (VTBL_ENTRY)&_ZN7S7802C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7802C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7802C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7802C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7802C42v9Ev,
};
extern void _ZN8S7802C14D1Ev();
extern void _ZN8S7802C14D0Ev();
extern void _ZN8S7802C143v37Ev();
extern void _ZN8S7802C143v38Ev();
extern void _ZN8S7802C143v39Ev();
extern void _ZN8S7802C143v40Ev();
extern void _ZN8S7802C143v41Ev();
extern void _ZN8S7802C143v42Ev();
static  VTBL_ENTRY _tg__ZTV8S7802C14__7S7802C1[] = {
  ABISELECT(-56,-28),
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI8S7802C14[0]),
  (VTBL_ENTRY)&_ZN8S7802C14D1Ev,
  (VTBL_ENTRY)&_ZN8S7802C14D0Ev,
  (VTBL_ENTRY)&_ZN8S7802C143v37Ev,
  (VTBL_ENTRY)&_ZN8S7802C143v38Ev,
  (VTBL_ENTRY)&_ZN8S7802C143v39Ev,
  (VTBL_ENTRY)&_ZN8S7802C143v40Ev,
  (VTBL_ENTRY)&_ZN8S7802C143v41Ev,
  (VTBL_ENTRY)&_ZN8S7802C143v42Ev,
};
extern void _ZN7S7802C83v10Ev();
extern void _ZN7S7802C83v11Ev();
extern void _ZN7S7802C83v12Ev();
extern void _ZN7S7802C83v13Ev();
extern void _ZN7S7802C83v14Ev();
extern void _ZN7S7802C83v15Ev();
extern void ABISELECT(_ZTv0_n72_N8S7802C14D1Ev,_ZTv0_n36_N8S7802C14D1Ev)();
extern void ABISELECT(_ZTv0_n72_N8S7802C14D0Ev,_ZTv0_n36_N8S7802C14D0Ev)();
extern void _ZN7S7802C73v22Ev();
extern void _ZN7S7802C73v23Ev();
extern void _ZN7S7802C73v24Ev();
extern void _ZN7S7802C73v25Ev();
extern void _ZN7S7802C73v26Ev();
static  VTBL_ENTRY _tg__ZTV7S7802C7__8S7802C14__7S7802C1[] = {
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,16),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI8S7802C14[0]),
  (VTBL_ENTRY)&_ZN7S7802C83v10Ev,
  (VTBL_ENTRY)&_ZN7S7802C83v11Ev,
  (VTBL_ENTRY)&_ZN7S7802C83v12Ev,
  (VTBL_ENTRY)&_ZN7S7802C83v13Ev,
  (VTBL_ENTRY)&_ZN7S7802C83v14Ev,
  (VTBL_ENTRY)&_ZN7S7802C83v15Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S7802C14D1Ev,_ZTv0_n36_N8S7802C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S7802C14D0Ev,_ZTv0_n36_N8S7802C14D0Ev),
  (VTBL_ENTRY)&_ZN7S7802C73v22Ev,
  (VTBL_ENTRY)&_ZN7S7802C73v23Ev,
  (VTBL_ENTRY)&_ZN7S7802C73v24Ev,
  (VTBL_ENTRY)&_ZN7S7802C73v25Ev,
  (VTBL_ENTRY)&_ZN7S7802C73v26Ev,
};
extern void ABISELECT(_ZTvn24_n72_N8S7802C14D1Ev,_ZTvn12_n36_N8S7802C14D1Ev)();
extern void ABISELECT(_ZTvn24_n72_N8S7802C14D0Ev,_ZTvn12_n36_N8S7802C14D0Ev)();
extern void _ZN7S7802C93v16Ev();
extern void _ZN7S7802C93v17Ev();
extern void _ZN7S7802C93v18Ev();
extern void _ZN7S7802C93v19Ev();
extern void _ZN7S7802C93v20Ev();
extern void _ZN7S7802C93v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7802C97S7802C7__8S7802C14__7S7802C1[] = {
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S7802C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N8S7802C14D1Ev,_ZTvn12_n36_N8S7802C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N8S7802C14D0Ev,_ZTvn12_n36_N8S7802C14D0Ev),
  (VTBL_ENTRY)&_ZN7S7802C93v16Ev,
  (VTBL_ENTRY)&_ZN7S7802C93v17Ev,
  (VTBL_ENTRY)&_ZN7S7802C93v18Ev,
  (VTBL_ENTRY)&_ZN7S7802C93v19Ev,
  (VTBL_ENTRY)&_ZN7S7802C93v20Ev,
  (VTBL_ENTRY)&_ZN7S7802C93v21Ev,
};
extern void _ZN7S7802C42v5Ev();
extern void _ZN7S7802C42v6Ev();
extern void _ZN7S7802C42v7Ev();
extern void _ZN7S7802C42v8Ev();
extern void _ZN7S7802C42v9Ev();
static  VTBL_ENTRY _tg__ZTV7S7802C4__8S7802C14__7S7802C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(56,28),
  (VTBL_ENTRY)&(_ZTI8S7802C14[0]),
  (VTBL_ENTRY)&_ZN7S7802C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7802C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7802C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7802C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7802C42v9Ev,
};
static  VTT_ENTRY vtt_S7802C1[] = {
  {&(_ZTV7S7802C1[10]),  10,141},
  {&(_tg__ZTV7S7802C2__7S7802C1[6]),  6,20},
  {&(_tg__ZTV7S7802C3__7S7802C2__7S7802C1[9]),  9,14},
  {&(_tg__ZTV7S7802C4__7S7802C2__7S7802C1[7]),  7,12},
  {&(_tg__ZTV7S7802C3__7S7802C2__7S7802C1[9]),  9,14},
  {&(_tg__ZTV7S7802C7__7S7802C2__7S7802C1[20]),  20,33},
  {&(_tg__ZTV7S7802C97S7802C7__7S7802C2__7S7802C1[2]),  2,10},
  {&(_ZTV7S7802C1[37]),  37,141},
  {&(_ZTV7S7802C1[49]),  49,141},
  {&(_ZTV7S7802C1[37]),  37,141},
  {&(_ZTV7S7802C1[74]),  74,141},
  {&(_ZTV7S7802C1[89]),  89,141},
  {&(_ZTV7S7802C1[117]),  117,141},
  {&(_ZTV7S7802C1[117]),  117,141},
  {&(_ZTV7S7802C1[117]),  117,141},
  {&(_ZTV7S7802C1[137]),  137,141},
  {&(_tg__ZTV7S7802C3__7S7802C1[8]),  8,13},
  {&(_tg__ZTV7S7802C4__7S7802C3__7S7802C1[7]),  7,12},
  {&(_tg__ZTV7S7802C3__7S7802C1[8]),  8,13},
  {&(_tg__ZTV7S7802C7__7S7802C3__7S7802C1[20]),  20,33},
  {&(_tg__ZTV7S7802C97S7802C7__7S7802C3__7S7802C1[2]),  2,10},
  {&(_tg__ZTV7S7802C6__7S7802C1[4]),  4,8},
  {&(_tg__ZTV7S7802C7__7S7802C6__7S7802C1[20]),  20,33},
  {&(_tg__ZTV7S7802C97S7802C7__7S7802C6__7S7802C1[2]),  2,10},
  {&(_tg__ZTV7S7802C4__7S7802C6__7S7802C1[7]),  7,12},
  {&(_tg__ZTV8S7802C12__7S7802C1[16]),  16,30},
  {&(_tg__ZTV8S7802C12__7S7802C1[16]),  16,30},
  {&(_tg__ZTV8S7802C12__7S7802C1[16]),  16,30},
  {&(_tg__ZTV7S7802C7__8S7802C12__7S7802C1[20]),  20,33},
  {&(_tg__ZTV7S7802C97S7802C7__8S7802C12__7S7802C1[2]),  2,10},
  {&(_tg__ZTV7S7802C4__8S7802C12__7S7802C1[7]),  7,12},
  {&(_tg__ZTV8S7802C11__8S7802C12__7S7802C1[6]),  6,10},
  {&(_tg__ZTV8S7802C13__7S7802C1[12]),  12,22},
  {&(_tg__ZTV8S7802C13__7S7802C1[12]),  12,22},
  {&(_tg__ZTV7S7802C7__8S7802C13__7S7802C1[20]),  20,33},
  {&(_tg__ZTV7S7802C97S7802C7__8S7802C13__7S7802C1[2]),  2,10},
  {&(_tg__ZTV7S7802C4__8S7802C13__7S7802C1[7]),  7,12},
  {&(_tg__ZTV8S7802C14__7S7802C1[4]),  4,12},
  {&(_tg__ZTV7S7802C7__8S7802C14__7S7802C1[20]),  20,33},
  {&(_tg__ZTV7S7802C97S7802C7__8S7802C14__7S7802C1[2]),  2,10},
  {&(_tg__ZTV7S7802C4__8S7802C14__7S7802C1[7]),  7,12},
};
extern VTBL_ENTRY _ZTI7S7802C1[];
extern  VTBL_ENTRY _ZTV7S7802C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7802C1[];
static VTBL_ENTRY alt_thunk_names11[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7802C13D0Ev,_ZTv0_n20_N8S7802C13D0Ev), // 
  (VTBL_ENTRY)_ZN8S7802C13D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7802C13D1Ev,_ZTv0_n20_N8S7802C13D1Ev), // 
  (VTBL_ENTRY)_ZN8S7802C13D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7802C12D0Ev,_ZTv0_n20_N8S7802C12D0Ev), // 
  (VTBL_ENTRY)_ZN8S7802C12D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7802C12D1Ev,_ZTv0_n20_N8S7802C12D1Ev), // 
  (VTBL_ENTRY)_ZN8S7802C12D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S7802C6D0Ev,_ZTv0_n36_N7S7802C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7802C6D0Ev,_ZThn16_N7S7802C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S7802C6D1Ev,_ZTv0_n36_N7S7802C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7802C6D1Ev,_ZThn16_N7S7802C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S7802C3D0Ev,_ZTv0_n36_N7S7802C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7802C3D0Ev,_ZThn16_N7S7802C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S7802C3D1Ev,_ZTv0_n36_N7S7802C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7802C3D1Ev,_ZThn16_N7S7802C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7802C3D0Ev,_ZTv0_n20_N7S7802C3D0Ev), // 
  (VTBL_ENTRY)_ZN7S7802C3D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7802C3D1Ev,_ZTv0_n20_N7S7802C3D1Ev), // 
  (VTBL_ENTRY)_ZN7S7802C3D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S7802C2D0Ev,_ZTv0_n36_N7S7802C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S7802C2D0Ev,_ZThn56_N7S7802C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S7802C2D1Ev,_ZTv0_n36_N7S7802C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S7802C2D1Ev,_ZThn56_N7S7802C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7802C2D0Ev,_ZTv0_n20_N7S7802C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N7S7802C2D0Ev,_ZThn40_N7S7802C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7802C2D1Ev,_ZTv0_n20_N7S7802C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N7S7802C2D1Ev,_ZThn40_N7S7802C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S7802C1D0Ev,_ZTv0_n36_N7S7802C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S7802C1D0Ev,_ZThn56_N7S7802C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S7802C1D1Ev,_ZTv0_n36_N7S7802C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S7802C1D1Ev,_ZThn56_N7S7802C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7802C1D0Ev,_ZTv0_n20_N7S7802C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N7S7802C1D0Ev,_ZThn72_N7S7802C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn72_N7S7802C1D0Ev,_ZThn40_N7S7802C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7802C1D1Ev,_ZTv0_n20_N7S7802C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N7S7802C1D1Ev,_ZThn72_N7S7802C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn72_N7S7802C1D1Ev,_ZThn40_N7S7802C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7802C1 = {  "S7802C1", // class name
  bases_S7802C1, 13,
  &(vtc_S7802C1[0]), // expected_vtbl_contents
  &(vtt_S7802C1[0]), // expected_vtt_contents
  ABISELECT(176,92), // object size
  NSPAIRA(_ZTI7S7802C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7802C1),141, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7802C1),41, //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  S19914C2  {
  long double s19914c2f0;
  int s19914c2f1:3;
  char s19914c2f2:8;
  long double s19914c2f3[2];
  __tsi64 s19914c2f4;
  virtual void  v1(); // _ZN8S19914C22v1Ev
  ~S19914C2(); // tgen
  S19914C2(); // tgen
};
//SIG(-1 S19914C2) C1{ v1 FD Fi:3 Fc:8 FD[2] FL}


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

static void Test_S19914C2()
{
  extern Class_Descriptor cd_S19914C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7,14)];
    init_test(&cd_S19914C2, buf);
    S19914C2 *dp, &lv = *(dp=new (buf) S19914C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,52), "sizeof(S19914C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19914C2)");
    check_field_offset(lv, s19914c2f0, ABISELECT(16,4), "S19914C2.s19914c2f0");
    set_bf_and_test(lv, s19914c2f1, ABISELECT(32,16), 0, 3, 1, "S19914C2");
    set_bf_and_test(lv, s19914c2f1, ABISELECT(32,16), 0, 3, hide_sll(1LL<<2), "S19914C2");
    set_bf_and_test(lv, s19914c2f2, ABISELECT(33,17), 0, 8, 1, "S19914C2");
    set_bf_and_test(lv, s19914c2f2, ABISELECT(33,17), 0, 8, hide_sll(1LL<<7), "S19914C2");
    check_field_offset(lv, s19914c2f3, ABISELECT(48,20), "S19914C2.s19914c2f3");
    check_field_offset(lv, s19914c2f4, ABISELECT(80,44), "S19914C2.s19914c2f4");
    test_class_info(&lv, &cd_S19914C2);
    dp->~S19914C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19914C2(Test_S19914C2, "S19914C2", ABISELECT(96,52));

#else // __cplusplus

extern void _ZN8S19914C2C1Ev();
extern void _ZN8S19914C2D1Ev();
Name_Map name_map_S19914C2[] = {
  NSPAIR(_ZN8S19914C2C1Ev),
  NSPAIR(_ZN8S19914C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19914C2[];
extern void _ZN8S19914C22v1Ev();
static  VTBL_ENTRY vtc_S19914C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19914C2[0]),
  (VTBL_ENTRY)&_ZN8S19914C22v1Ev,
};
extern VTBL_ENTRY _ZTI8S19914C2[];
extern  VTBL_ENTRY _ZTV8S19914C2[];
Class_Descriptor cd_S19914C2 = {  "S19914C2", // class name
  0,0,//no base classes
  &(vtc_S19914C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,52), // object size
  NSPAIRA(_ZTI8S19914C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19914C2),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  S19914C5  : virtual S19914C2 {
  ::S3490C4 s19914c5f0;
  __tsi64 s19914c5f1;
  ::S3490C4 s19914c5f2[7];
  void *s19914c5f3;
  __tsi64 s19914c5f4;
  ::S3490C4 s19914c5f5;
  void *s19914c5f6;
  char s19914c5f7;
  short s19914c5f8;
  int s19914c5f9;
  ::S19914C2 s19914c5f10;
  virtual void  v2(); // _ZN8S19914C52v2Ev
  ~S19914C5(); // tgen
  S19914C5(); // tgen
};
//SIG(-1 S19914C5) C1{ VBC2{ v2 FD Fi:3 Fc:8 FD[2] FL} v1 FC3{ m FL Fi Fc} FL FC3[7] Fp FL FC3 Fp Fc Fs Fi FC2}


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

static void Test_S19914C5()
{
  extern Class_Descriptor cd_S19914C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(25,72)];
    init_test(&cd_S19914C5, buf);
    S19914C5 *dp, &lv = *(dp=new (buf) S19914C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(384,284), "sizeof(S19914C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19914C5)");
    check_base_class_offset(lv, (S19914C2*), ABISELECT(288,232), "S19914C5");
    check_field_offset(lv, s19914c5f0, ABISELECT(8,4), "S19914C5.s19914c5f0");
    check_field_offset(lv, s19914c5f1, ABISELECT(24,20), "S19914C5.s19914c5f1");
    check_field_offset(lv, s19914c5f2, ABISELECT(32,28), "S19914C5.s19914c5f2");
    check_field_offset(lv, s19914c5f3, ABISELECT(144,140), "S19914C5.s19914c5f3");
    check_field_offset(lv, s19914c5f4, ABISELECT(152,144), "S19914C5.s19914c5f4");
    check_field_offset(lv, s19914c5f5, ABISELECT(160,152), "S19914C5.s19914c5f5");
    check_field_offset(lv, s19914c5f6, ABISELECT(176,168), "S19914C5.s19914c5f6");
    check_field_offset(lv, s19914c5f7, ABISELECT(184,172), "S19914C5.s19914c5f7");
    check_field_offset(lv, s19914c5f8, ABISELECT(186,174), "S19914C5.s19914c5f8");
    check_field_offset(lv, s19914c5f9, ABISELECT(188,176), "S19914C5.s19914c5f9");
    check_field_offset(lv, s19914c5f10, ABISELECT(192,180), "S19914C5.s19914c5f10");
    test_class_info(&lv, &cd_S19914C5);
    dp->~S19914C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19914C5(Test_S19914C5, "S19914C5", ABISELECT(384,284));

#else // __cplusplus

extern void _ZN8S19914C5C1Ev();
extern void _ZN8S19914C5D1Ev();
Name_Map name_map_S19914C5[] = {
  NSPAIR(_ZN8S19914C5C1Ev),
  NSPAIR(_ZN8S19914C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19914C2;
extern VTBL_ENTRY _ZTI8S19914C2[];
extern  VTBL_ENTRY _ZTV8S19914C2[];
static Base_Class bases_S19914C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19914C2,    ABISELECT(288,232), //bcp->offset
    4, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19914C5[];
extern void _ZN8S19914C52v2Ev();
extern void _ZN8S19914C22v1Ev();
static  VTBL_ENTRY vtc_S19914C5[] = {
  ABISELECT(288,232),
  0,
  (VTBL_ENTRY)&(_ZTI8S19914C5[0]),
  (VTBL_ENTRY)&_ZN8S19914C52v2Ev,
  0,
  ABISELECT(-288,-232),
  (VTBL_ENTRY)&(_ZTI8S19914C5[0]),
  (VTBL_ENTRY)&_ZN8S19914C22v1Ev,
};
extern VTBL_ENTRY _ZTV8S19914C5[];
static  VTT_ENTRY vtt_S19914C5[] = {
  {&(_ZTV8S19914C5[3]),  3,8},
  {&(_ZTV8S19914C5[7]),  7,8},
};
extern VTBL_ENTRY _ZTI8S19914C5[];
extern  VTBL_ENTRY _ZTV8S19914C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19914C5[];
Class_Descriptor cd_S19914C5 = {  "S19914C5", // class name
  bases_S19914C5, 1,
  &(vtc_S19914C5[0]), // expected_vtbl_contents
  &(vtt_S19914C5[0]), // expected_vtt_contents
  ABISELECT(384,284), // object size
  NSPAIRA(_ZTI8S19914C5),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19914C5),8, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19914C5),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  S19914C3  : S19914C2 , virtual S3490C4 {
  char s19914c3f0[10];
  int s19914c3f1;
  ::S19914C5 s19914c3f2;
  __tsi64 s19914c3f3;
  ~S19914C3(); // tgen
  S19914C3(); // tgen
};
//SIG(-1 S19914C3) C1{ BC2{ v1 FD Fi:3 Fc:8 FD[2] FL} VBC3{ m FL Fi Fc} Fc[10] Fi FC4{ VBC2 v2 FC3 FL FC3[7] Fp FL FC3 Fp Fc Fs Fi FC2} FL}


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

static void Test_S19914C3()
{
  extern Class_Descriptor cd_S19914C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(34,95)];
    init_test(&cd_S19914C3, buf);
    S19914C3 *dp, &lv = *(dp=new (buf) S19914C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(528,376), "sizeof(S19914C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19914C3)");
    check_base_class_offset(lv, (S19914C2*), 0, "S19914C3");
    check_base_class_offset(lv, (S3490C4*), ABISELECT(504,360), "S19914C3");
    check_field_offset(lv, s19914c3f0, ABISELECT(88,52), "S19914C3.s19914c3f0");
    check_field_offset(lv, s19914c3f1, ABISELECT(100,64), "S19914C3.s19914c3f1");
    check_field_offset(lv, s19914c3f2, ABISELECT(112,68), "S19914C3.s19914c3f2");
    check_field_offset(lv, s19914c3f3, ABISELECT(496,352), "S19914C3.s19914c3f3");
    test_class_info(&lv, &cd_S19914C3);
    dp->~S19914C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19914C3(Test_S19914C3, "S19914C3", ABISELECT(528,376));

#else // __cplusplus

extern void _ZN8S19914C3C1Ev();
extern void _ZN8S19914C3D1Ev();
Name_Map name_map_S19914C3[] = {
  NSPAIR(_ZN8S19914C3C1Ev),
  NSPAIR(_ZN8S19914C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19914C2;
extern VTBL_ENTRY _ZTI8S19914C2[];
extern  VTBL_ENTRY _ZTV8S19914C2[];
extern Class_Descriptor cd_S3490C4;
extern VTBL_ENTRY _ZTI7S3490C4[];
static Base_Class bases_S19914C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19914C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S3490C4,    ABISELECT(504,360), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI8S19914C3[];
extern void _ZN8S19914C22v1Ev();
static  VTBL_ENTRY vtc_S19914C3[] = {
  ABISELECT(504,360),
  0,
  (VTBL_ENTRY)&(_ZTI8S19914C3[0]),
  (VTBL_ENTRY)&_ZN8S19914C22v1Ev,
};
extern VTBL_ENTRY _ZTV8S19914C3[];
static  VTT_ENTRY vtt_S19914C3[] = {
  {&(_ZTV8S19914C3[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S19914C3[];
extern  VTBL_ENTRY _ZTV8S19914C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19914C3[];
Class_Descriptor cd_S19914C3 = {  "S19914C3", // class name
  bases_S19914C3, 2,
  &(vtc_S19914C3[0]), // expected_vtbl_contents
  &(vtt_S19914C3[0]), // expected_vtt_contents
  ABISELECT(528,376), // object size
  NSPAIRA(_ZTI8S19914C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19914C3),4, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19914C3),1, //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  S19914C8  : virtual S3490C4 , virtual S19914C3 , virtual S19914C2 , virtual S19914C5 {
  void *s19914c8f0;
  ~S19914C8(); // tgen
  S19914C8(); // tgen
};
//SIG(-1 S19914C8) C1{ VBC2{ m FL Fi Fc} VBC3{ BC4{ v1 FD Fi:3 Fc:8 FD[2] FL} VBC2 Fc[10] Fi FC5{ VBC4 v2 FC2 FL FC2[7] Fp FL FC2 Fp Fc Fs Fi FC4} FL} VBC4 VBC5 Fp}


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

static void Test_S19914C8()
{
  extern Class_Descriptor cd_S19914C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(59,168)];
    init_test(&cd_S19914C8, buf);
    S19914C8 *dp, &lv = *(dp=new (buf) S19914C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(928,668), "sizeof(S19914C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19914C8)");
    check_base_class_offset(lv, (S3490C4*), ABISELECT(16,8), "S19914C8");
    check_base_class_offset(lv, (S3490C4*)(S19914C3*), ABISELECT(16,8), "S19914C8");
    check_base_class_offset(lv, (S19914C2*)(S19914C3*), ABISELECT(32,24), "S19914C8");
    check_base_class_offset(lv, (S19914C3*), ABISELECT(32,24), "S19914C8");
    /*is_ambiguous_... S19914C8::S19914C2 */ AMB_check_base_class_offset(lv, (S19914C2*), ABISELECT(544,384), "S19914C8");
    check_base_class_offset(lv, (S19914C2*)(S19914C5*), ABISELECT(544,384), "S19914C8");
    check_base_class_offset(lv, (S19914C5*), ABISELECT(640,436), "S19914C8");
    check_field_offset(lv, s19914c8f0, ABISELECT(8,4), "S19914C8.s19914c8f0");
    test_class_info(&lv, &cd_S19914C8);
    dp->~S19914C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19914C8(Test_S19914C8, "S19914C8", ABISELECT(928,668));

#else // __cplusplus

extern void _ZN8S19914C8C1Ev();
extern void _ZN8S19914C8D1Ev();
Name_Map name_map_S19914C8[] = {
  NSPAIR(_ZN8S19914C8C1Ev),
  NSPAIR(_ZN8S19914C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3490C4;
extern VTBL_ENTRY _ZTI7S3490C4[];
extern Class_Descriptor cd_S19914C2;
extern VTBL_ENTRY _ZTI8S19914C2[];
extern  VTBL_ENTRY _ZTV8S19914C2[];
extern Class_Descriptor cd_S19914C3;
extern VTBL_ENTRY _ZTI8S19914C3[];
extern  VTBL_ENTRY _ZTV8S19914C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19914C3[];
extern Class_Descriptor cd_S19914C2;
extern VTBL_ENTRY _ZTI8S19914C2[];
extern  VTBL_ENTRY _ZTV8S19914C2[];
extern Class_Descriptor cd_S19914C5;
extern VTBL_ENTRY _ZTI8S19914C5[];
extern  VTBL_ENTRY _ZTV8S19914C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19914C5[];
static Base_Class bases_S19914C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3490C4,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19914C2,    ABISELECT(32,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19914C3,    ABISELECT(32,24), //bcp->offset
    6, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19914C2,    ABISELECT(544,384), //bcp->offset
    11, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19914C5,    ABISELECT(640,436), //bcp->offset
    15, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19914C8[];
extern void _ZN8S19914C22v1Ev();
extern void _ZN8S19914C22v1Ev();
extern void _ZN8S19914C52v2Ev();
static  VTBL_ENTRY vtc_S19914C8[] = {
  ABISELECT(640,436),
  ABISELECT(544,384),
  ABISELECT(32,24),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19914C8[0]),
  0,
  -16,
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI8S19914C8[0]),
  (VTBL_ENTRY)&_ZN8S19914C22v1Ev,
  0,
  ABISELECT(-544,-384),
  (VTBL_ENTRY)&(_ZTI8S19914C8[0]),
  (VTBL_ENTRY)&_ZN8S19914C22v1Ev,
  0,
  ABISELECT(-96,-52),
  ABISELECT(-640,-436),
  (VTBL_ENTRY)&(_ZTI8S19914C8[0]),
  (VTBL_ENTRY)&_ZN8S19914C52v2Ev,
};
extern VTBL_ENTRY _ZTV8S19914C8[];
extern void _ZN8S19914C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19914C3__8S19914C8[] = {
  -16,
  0,
  (VTBL_ENTRY)&(_ZTI8S19914C3[0]),
  (VTBL_ENTRY)&_ZN8S19914C22v1Ev,
};
extern void _ZN8S19914C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19914C5__8S19914C8[] = {
  ABISELECT(-96,-52),
  0,
  (VTBL_ENTRY)&(_ZTI8S19914C5[0]),
  (VTBL_ENTRY)&_ZN8S19914C52v2Ev,
};
extern void _ZN8S19914C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19914C2__8S19914C5__8S19914C8[] = {
  0,
  ABISELECT(96,52),
  (VTBL_ENTRY)&(_ZTI8S19914C5[0]),
  (VTBL_ENTRY)&_ZN8S19914C22v1Ev,
};
static  VTT_ENTRY vtt_S19914C8[] = {
  {&(_ZTV8S19914C8[6]),  6,20},
  {&(_ZTV8S19914C8[10]),  10,20},
  {&(_ZTV8S19914C8[14]),  14,20},
  {&(_ZTV8S19914C8[19]),  19,20},
  {&(_tg__ZTV8S19914C3__8S19914C8[3]),  3,4},
  {&(_tg__ZTV8S19914C5__8S19914C8[3]),  3,4},
  {&(_tg__ZTV8S19914C2__8S19914C5__8S19914C8[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S19914C8[];
extern  VTBL_ENTRY _ZTV8S19914C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19914C8[];
Class_Descriptor cd_S19914C8 = {  "S19914C8", // class name
  bases_S19914C8, 5,
  &(vtc_S19914C8[0]), // expected_vtbl_contents
  &(vtt_S19914C8[0]), // expected_vtt_contents
  ABISELECT(928,668), // object size
  NSPAIRA(_ZTI8S19914C8),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19914C8),20, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19914C8),7, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19914C7  : S19914C2 , virtual S3490C4 , S19914C3 , S19914C5 , virtual S19914C8 {
  ::S19914C5 s19914c7f0;
  ::S19914C8 s19914c7f1;
  void *s19914c7f2;
  int s19914c7f3;
  ::S19914C2 s19914c7f4;
  ::S19914C5 s19914c7f5;
  virtual  ~S19914C7(); // _ZN8S19914C7D2Ev
  S19914C7(); // tgen
};
//SIG(-1 S19914C7) C1{ BC2{ v1 FD Fi:3 Fc:8 FD[2] FL} VBC3{ m FL Fi Fc} BC4{ BC2 VBC3 Fc[10] Fi FC5{ VBC2 v2 FC3 FL FC3[7] Fp FL FC3 Fp Fc Fs Fi FC2} FL} BC5 VBC6{ VBC3 VBC4 VBC2 VBC5 Fp} vd FC5 FC6 Fp Fi FC2 FC5}


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

static void Test_S19914C7()
{
  extern Class_Descriptor cd_S19914C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(228,653)];
    init_test(&cd_S19914C7, buf);
    S19914C7 *dp, &lv = *(dp=new (buf) S19914C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(3632,2608), "sizeof(S19914C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19914C7)");
    /*is_ambiguous_... S19914C7::S19914C2 */ AMB_check_base_class_offset(lv, (S19914C2*), 0, "S19914C7");
    check_base_class_offset(lv, (S3490C4*), ABISELECT(2704,1940), "S19914C7");
    /*is_ambiguous_... S19914C7::S19914C3 */ AMB_check_base_class_offset(lv, (S3490C4*)(S19914C3*), ABISELECT(2704,1940), "S19914C7");
    check_base_class_offset(lv, (S3490C4*)(S19914C8*), ABISELECT(2704,1940), "S19914C7");
    /*is_ambiguous_... S19914C7::S19914C3 */ AMB_check_base_class_offset(lv, (S3490C4*)(S19914C3*), ABISELECT(2704,1940), "S19914C7");
    /*is_ambiguous_... S19914C7::S19914C3 */ AMB_check_base_class_offset(lv, (S19914C2*)(S19914C3*), ABISELECT(96,52), "S19914C7");
    /*is_ambiguous_... S19914C7::S19914C3 */ AMB_check_base_class_offset(lv, (S19914C3*), ABISELECT(96,52), "S19914C7");
    /*is_ambiguous_... S19914C7::S19914C5 */ AMB_check_base_class_offset(lv, (S19914C2*)(S19914C5*), ABISELECT(2720,1956), "S19914C7");
    /*is_ambiguous_... S19914C8::S19914C2 */ AMB_check_base_class_offset(lv, (S19914C2*)(S19914C8*), ABISELECT(2720,1956), "S19914C7");
    /*is_ambiguous_... S19914C7::S19914C5 */ AMB_check_base_class_offset(lv, (S19914C2*)(S19914C5*), ABISELECT(2720,1956), "S19914C7");
    /*is_ambiguous_... S19914C7::S19914C5 */ AMB_check_base_class_offset(lv, (S19914C5*), ABISELECT(608,412), "S19914C7");
    /*is_ambiguous_... S19914C7::S19914C3 */ AMB_check_base_class_offset(lv, (S19914C2*)(S19914C3*), ABISELECT(2832,2016), "S19914C7");
    check_base_class_offset(lv, (S19914C3*)(S19914C8*), ABISELECT(2832,2016), "S19914C7");
    check_base_class_offset(lv, (S19914C5*)(S19914C8*), ABISELECT(3344,2376), "S19914C7");
    check_base_class_offset(lv, (S19914C8*), ABISELECT(2808,2008), "S19914C7");
    check_field_offset(lv, s19914c7f0, ABISELECT(896,644), "S19914C7.s19914c7f0");
    check_field_offset(lv, s19914c7f1, ABISELECT(1280,928), "S19914C7.s19914c7f1");
    check_field_offset(lv, s19914c7f2, ABISELECT(2208,1596), "S19914C7.s19914c7f2");
    check_field_offset(lv, s19914c7f3, ABISELECT(2216,1600), "S19914C7.s19914c7f3");
    check_field_offset(lv, s19914c7f4, ABISELECT(2224,1604), "S19914C7.s19914c7f4");
    check_field_offset(lv, s19914c7f5, ABISELECT(2320,1656), "S19914C7.s19914c7f5");
    test_class_info(&lv, &cd_S19914C7);
    dp->~S19914C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19914C7(Test_S19914C7, "S19914C7", ABISELECT(3632,2608));

#else // __cplusplus

extern void _ZN8S19914C7C1Ev();
extern void _ZN8S19914C7D2Ev();
Name_Map name_map_S19914C7[] = {
  NSPAIR(_ZN8S19914C7C1Ev),
  NSPAIR(_ZN8S19914C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19914C2;
extern VTBL_ENTRY _ZTI8S19914C2[];
extern  VTBL_ENTRY _ZTV8S19914C2[];
extern Class_Descriptor cd_S3490C4;
extern VTBL_ENTRY _ZTI7S3490C4[];
extern Class_Descriptor cd_S19914C2;
extern VTBL_ENTRY _ZTI8S19914C2[];
extern  VTBL_ENTRY _ZTV8S19914C2[];
extern Class_Descriptor cd_S19914C3;
extern VTBL_ENTRY _ZTI8S19914C3[];
extern  VTBL_ENTRY _ZTV8S19914C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19914C3[];
extern Class_Descriptor cd_S19914C2;
extern VTBL_ENTRY _ZTI8S19914C2[];
extern  VTBL_ENTRY _ZTV8S19914C2[];
extern Class_Descriptor cd_S19914C5;
extern VTBL_ENTRY _ZTI8S19914C5[];
extern  VTBL_ENTRY _ZTV8S19914C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19914C5[];
extern Class_Descriptor cd_S19914C2;
extern VTBL_ENTRY _ZTI8S19914C2[];
extern  VTBL_ENTRY _ZTV8S19914C2[];
extern Class_Descriptor cd_S19914C3;
extern VTBL_ENTRY _ZTI8S19914C3[];
extern  VTBL_ENTRY _ZTV8S19914C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19914C3[];
extern Class_Descriptor cd_S19914C5;
extern VTBL_ENTRY _ZTI8S19914C5[];
extern  VTBL_ENTRY _ZTV8S19914C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19914C5[];
extern Class_Descriptor cd_S19914C8;
extern VTBL_ENTRY _ZTI8S19914C8[];
extern  VTBL_ENTRY _ZTV8S19914C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19914C8[];
static Base_Class bases_S19914C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19914C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S3490C4,    ABISELECT(2704,1940), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19914C2,    ABISELECT(96,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19914C3,    ABISELECT(96,52), //bcp->offset
    10, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19914C2,    ABISELECT(2720,1956), //bcp->offset
    18, //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
    5, //immediately_derived
  0, 1},
  {&cd_S19914C5,    ABISELECT(608,412), //bcp->offset
    14, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19914C2,    ABISELECT(2832,2016), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19914C3,    ABISELECT(2832,2016), //bcp->offset
    28, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S19914C5,    ABISELECT(3344,2376), //bcp->offset
    33, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S19914C8,    ABISELECT(2808,2008), //bcp->offset
    22, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19914C7[];
extern void _ZN8S19914C22v1Ev();
extern void _ZN8S19914C7D1Ev();
extern void _ZN8S19914C7D0Ev();
extern void _ZN8S19914C22v1Ev();
extern void _ZN8S19914C52v2Ev();
extern void _ZN8S19914C22v1Ev();
extern void _ZN8S19914C22v1Ev();
extern void _ZN8S19914C52v2Ev();
static  VTBL_ENTRY vtc_S19914C7[] = {
  ABISELECT(3344,2376),
  ABISELECT(2832,2016),
  ABISELECT(2808,2008),
  ABISELECT(2720,1956),
  ABISELECT(2704,1940),
  0,
  (VTBL_ENTRY)&(_ZTI8S19914C7[0]),
  (VTBL_ENTRY)&_ZN8S19914C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19914C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19914C7D0Ev,
  ABISELECT(2608,1888),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI8S19914C7[0]),
  (VTBL_ENTRY)&_ZN8S19914C22v1Ev,
  ABISELECT(2112,1544),
  ABISELECT(-608,-412),
  (VTBL_ENTRY)&(_ZTI8S19914C7[0]),
  (VTBL_ENTRY)&_ZN8S19914C52v2Ev,
  0,
  ABISELECT(-2720,-1956),
  (VTBL_ENTRY)&(_ZTI8S19914C7[0]),
  (VTBL_ENTRY)&_ZN8S19914C22v1Ev,
  ABISELECT(536,368),
  ABISELECT(-88,-52),
  ABISELECT(24,8),
  ABISELECT(-104,-68),
  ABISELECT(-2808,-2008),
  (VTBL_ENTRY)&(_ZTI8S19914C7[0]),
  0,
  ABISELECT(-128,-76),
  ABISELECT(-2832,-2016),
  (VTBL_ENTRY)&(_ZTI8S19914C7[0]),
  (VTBL_ENTRY)&_ZN8S19914C22v1Ev,
  0,
  ABISELECT(-624,-420),
  ABISELECT(-3344,-2376),
  (VTBL_ENTRY)&(_ZTI8S19914C7[0]),
  (VTBL_ENTRY)&_ZN8S19914C52v2Ev,
};
extern VTBL_ENTRY _ZTV8S19914C7[];
extern void _ZN8S19914C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19914C3__A__8S19914C7[] = {
  ABISELECT(2608,1888),
  0,
  (VTBL_ENTRY)&(_ZTI8S19914C3[0]),
  (VTBL_ENTRY)&_ZN8S19914C22v1Ev,
};
extern void _ZN8S19914C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19914C5__A__8S19914C7[] = {
  ABISELECT(2112,1544),
  0,
  (VTBL_ENTRY)&(_ZTI8S19914C5[0]),
  (VTBL_ENTRY)&_ZN8S19914C52v2Ev,
};
extern void _ZN8S19914C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19914C2__8S19914C5__A__8S19914C7[] = {
  0,
  ABISELECT(-2112,-1544),
  (VTBL_ENTRY)&(_ZTI8S19914C5[0]),
  (VTBL_ENTRY)&_ZN8S19914C22v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19914C8__8S19914C7[] = {
  ABISELECT(536,368),
  ABISELECT(-88,-52),
  ABISELECT(24,8),
  ABISELECT(-104,-68),
  0,
  (VTBL_ENTRY)&(_ZTI8S19914C8[0]),
};
extern void _ZN8S19914C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19914C3__8S19914C8__8S19914C7[] = {
  0,
  ABISELECT(-128,-76),
  ABISELECT(-24,-8),
  (VTBL_ENTRY)&(_ZTI8S19914C8[0]),
  (VTBL_ENTRY)&_ZN8S19914C22v1Ev,
};
extern void _ZN8S19914C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19914C2__A1__8S19914C8__8S19914C7[] = {
  0,
  ABISELECT(88,52),
  (VTBL_ENTRY)&(_ZTI8S19914C8[0]),
  (VTBL_ENTRY)&_ZN8S19914C22v1Ev,
};
extern void _ZN8S19914C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19914C5__8S19914C8__8S19914C7[] = {
  0,
  ABISELECT(-624,-420),
  ABISELECT(-536,-368),
  (VTBL_ENTRY)&(_ZTI8S19914C8[0]),
  (VTBL_ENTRY)&_ZN8S19914C52v2Ev,
};
extern void _ZN8S19914C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19914C3__A1__8S19914C7[] = {
  ABISELECT(-128,-76),
  0,
  (VTBL_ENTRY)&(_ZTI8S19914C3[0]),
  (VTBL_ENTRY)&_ZN8S19914C22v1Ev,
};
extern void _ZN8S19914C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19914C5__A1__8S19914C7[] = {
  ABISELECT(-624,-420),
  0,
  (VTBL_ENTRY)&(_ZTI8S19914C5[0]),
  (VTBL_ENTRY)&_ZN8S19914C52v2Ev,
};
extern void _ZN8S19914C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19914C2__8S19914C5__A1__8S19914C7[] = {
  0,
  ABISELECT(624,420),
  (VTBL_ENTRY)&(_ZTI8S19914C5[0]),
  (VTBL_ENTRY)&_ZN8S19914C22v1Ev,
};
static  VTT_ENTRY vtt_S19914C7[] = {
  {&(_ZTV8S19914C7[7]),  7,38},
  {&(_tg__ZTV8S19914C3__A__8S19914C7[3]),  3,4},
  {&(_tg__ZTV8S19914C5__A__8S19914C7[3]),  3,4},
  {&(_tg__ZTV8S19914C2__8S19914C5__A__8S19914C7[3]),  3,4},
  {&(_ZTV8S19914C7[13]),  13,38},
  {&(_ZTV8S19914C7[17]),  17,38},
  {&(_ZTV8S19914C7[21]),  21,38},
  {&(_ZTV8S19914C7[28]),  28,38},
  {&(_ZTV8S19914C7[32]),  32,38},
  {&(_ZTV8S19914C7[37]),  37,38},
  {&(_tg__ZTV8S19914C8__8S19914C7[6]),  6,6},
  {&(_tg__ZTV8S19914C3__8S19914C8__8S19914C7[4]),  4,5},
  {&(_tg__ZTV8S19914C2__A1__8S19914C8__8S19914C7[3]),  3,4},
  {&(_tg__ZTV8S19914C5__8S19914C8__8S19914C7[4]),  4,5},
  {&(_tg__ZTV8S19914C3__A1__8S19914C7[3]),  3,4},
  {&(_tg__ZTV8S19914C5__A1__8S19914C7[3]),  3,4},
  {&(_tg__ZTV8S19914C2__8S19914C5__A1__8S19914C7[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S19914C7[];
extern  VTBL_ENTRY _ZTV8S19914C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19914C7[];
Class_Descriptor cd_S19914C7 = {  "S19914C7", // class name
  bases_S19914C7, 10,
  &(vtc_S19914C7[0]), // expected_vtbl_contents
  &(vtt_S19914C7[0]), // expected_vtt_contents
  ABISELECT(3632,2608), // object size
  NSPAIRA(_ZTI8S19914C7),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S19914C7),38, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19914C7),17, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19914C6  : S19914C7 {
  void *s19914c6f0;
  short s19914c6f1:6;
  ::S19914C2 s19914c6f2;
  long double s19914c6f3;
  int s19914c6f4;
  ::S3490C4 s19914c6f5;
  ::S19914C5 s19914c6f6;
  void *s19914c6f7;
  int s19914c6f8;
  void *s19914c6f9[2];
  virtual  ~S19914C6(); // _ZN8S19914C6D2Ev
  virtual void  v3(); // _ZN8S19914C62v3Ev
  virtual void  v4(); // _ZN8S19914C62v4Ev
  S19914C6(); // tgen
};
//SIG(-1 S19914C6) C1{ BC2{ BC3{ v3 FD Fi:3 Fc:8 FD[2] FL} VBC4{ m FL Fi Fc} BC5{ BC3 VBC4 Fc[10] Fi FC6{ VBC3 v4 FC4 FL FC4[7] Fp FL FC4 Fp Fc Fs Fi FC3} FL} BC6 VBC7{ VBC4 VBC5 VBC3 VBC6 Fp} vd FC6 FC7 Fp Fi FC3 FC6} vd v1 v2 Fp Fs:6 FC3 FD Fi FC4 FC6 Fp Fi Fp[2]}


 S19914C6 ::~S19914C6(){ note_dtor("S19914C6", this);}
void  S19914C6 ::v3(){vfunc_called(this, "_ZN8S19914C62v3Ev");}
void  S19914C6 ::v4(){vfunc_called(this, "_ZN8S19914C62v4Ev");}
S19914C6 ::S19914C6(){ note_ctor("S19914C6", this);} // tgen

static void Test_S19914C6()
{
  extern Class_Descriptor cd_S19914C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(264,751)];
    init_test(&cd_S19914C6, buf);
    S19914C6 *dp, &lv = *(dp=new (buf) S19914C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(4208,3000), "sizeof(S19914C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19914C6)");
    /*is_ambiguous_... S19914C7::S19914C2 */ AMB_check_base_class_offset(lv, (S19914C2*)(S19914C7*), 0, "S19914C6");
    check_base_class_offset(lv, (S3490C4*)(S19914C7*), ABISELECT(3280,2332), "S19914C6");
    /*is_ambiguous_... S19914C7::S19914C3 */ AMB_check_base_class_offset(lv, (S3490C4*)(S19914C3*)(S19914C7*), ABISELECT(3280,2332), "S19914C6");
    check_base_class_offset(lv, (S3490C4*)(S19914C8*), ABISELECT(3280,2332), "S19914C6");
    /*is_ambiguous_... S19914C6::S19914C3 */ AMB_check_base_class_offset(lv, (S3490C4*)(S19914C3*), ABISELECT(3280,2332), "S19914C6");
    /*is_ambiguous_... S19914C7::S19914C3 */ AMB_check_base_class_offset(lv, (S19914C2*)(S19914C3*)(S19914C7*), ABISELECT(96,52), "S19914C6");
    /*is_ambiguous_... S19914C7::S19914C3 */ AMB_check_base_class_offset(lv, (S19914C3*)(S19914C7*), ABISELECT(96,52), "S19914C6");
    /*is_ambiguous_... S19914C7::S19914C5 */ AMB_check_base_class_offset(lv, (S19914C2*)(S19914C5*)(S19914C7*), ABISELECT(3296,2348), "S19914C6");
    /*is_ambiguous_... S19914C8::S19914C2 */ AMB_check_base_class_offset(lv, (S19914C2*)(S19914C8*), ABISELECT(3296,2348), "S19914C6");
    /*is_ambiguous_... S19914C6::S19914C5 */ AMB_check_base_class_offset(lv, (S19914C2*)(S19914C5*), ABISELECT(3296,2348), "S19914C6");
    /*is_ambiguous_... S19914C7::S19914C5 */ AMB_check_base_class_offset(lv, (S19914C5*)(S19914C7*), ABISELECT(608,412), "S19914C6");
    /*is_ambiguous_... S19914C6::S19914C3 */ AMB_check_base_class_offset(lv, (S19914C2*)(S19914C3*), ABISELECT(3408,2408), "S19914C6");
    check_base_class_offset(lv, (S19914C3*)(S19914C8*), ABISELECT(3408,2408), "S19914C6");
    check_base_class_offset(lv, (S19914C5*)(S19914C8*), ABISELECT(3920,2768), "S19914C6");
    check_base_class_offset(lv, (S19914C8*)(S19914C7*), ABISELECT(3384,2400), "S19914C6");
    check_base_class_offset(lv, (S19914C7*), 0, "S19914C6");
    check_field_offset(lv, s19914c6f0, ABISELECT(2704,1940), "S19914C6.s19914c6f0");
    set_bf_and_test(lv, s19914c6f1, ABISELECT(2712,1944), 0, 6, 1, "S19914C6");
    set_bf_and_test(lv, s19914c6f1, ABISELECT(2712,1944), 0, 6, hide_sll(1LL<<5), "S19914C6");
    check_field_offset(lv, s19914c6f2, ABISELECT(2720,1948), "S19914C6.s19914c6f2");
    check_field_offset(lv, s19914c6f3, ABISELECT(2816,2000), "S19914C6.s19914c6f3");
    check_field_offset(lv, s19914c6f4, ABISELECT(2832,2012), "S19914C6.s19914c6f4");
    check_field_offset(lv, s19914c6f5, ABISELECT(2840,2016), "S19914C6.s19914c6f5");
    check_field_offset(lv, s19914c6f6, ABISELECT(2864,2032), "S19914C6.s19914c6f6");
    check_field_offset(lv, s19914c6f7, ABISELECT(3248,2316), "S19914C6.s19914c6f7");
    check_field_offset(lv, s19914c6f8, ABISELECT(3256,2320), "S19914C6.s19914c6f8");
    check_field_offset(lv, s19914c6f9, ABISELECT(3264,2324), "S19914C6.s19914c6f9");
    test_class_info(&lv, &cd_S19914C6);
    dp->~S19914C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19914C6(Test_S19914C6, "S19914C6", ABISELECT(4208,3000));

#else // __cplusplus

extern void _ZN8S19914C6C1Ev();
extern void _ZN8S19914C6D2Ev();
Name_Map name_map_S19914C6[] = {
  NSPAIR(_ZN8S19914C6C1Ev),
  NSPAIR(_ZN8S19914C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19914C2;
extern VTBL_ENTRY _ZTI8S19914C2[];
extern  VTBL_ENTRY _ZTV8S19914C2[];
extern Class_Descriptor cd_S3490C4;
extern VTBL_ENTRY _ZTI7S3490C4[];
extern Class_Descriptor cd_S19914C2;
extern VTBL_ENTRY _ZTI8S19914C2[];
extern  VTBL_ENTRY _ZTV8S19914C2[];
extern Class_Descriptor cd_S19914C3;
extern VTBL_ENTRY _ZTI8S19914C3[];
extern  VTBL_ENTRY _ZTV8S19914C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19914C3[];
extern Class_Descriptor cd_S19914C2;
extern VTBL_ENTRY _ZTI8S19914C2[];
extern  VTBL_ENTRY _ZTV8S19914C2[];
extern Class_Descriptor cd_S19914C5;
extern VTBL_ENTRY _ZTI8S19914C5[];
extern  VTBL_ENTRY _ZTV8S19914C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19914C5[];
extern Class_Descriptor cd_S19914C2;
extern VTBL_ENTRY _ZTI8S19914C2[];
extern  VTBL_ENTRY _ZTV8S19914C2[];
extern Class_Descriptor cd_S19914C3;
extern VTBL_ENTRY _ZTI8S19914C3[];
extern  VTBL_ENTRY _ZTV8S19914C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19914C3[];
extern Class_Descriptor cd_S19914C5;
extern VTBL_ENTRY _ZTI8S19914C5[];
extern  VTBL_ENTRY _ZTV8S19914C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19914C5[];
extern Class_Descriptor cd_S19914C8;
extern VTBL_ENTRY _ZTI8S19914C8[];
extern  VTBL_ENTRY _ZTV8S19914C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19914C8[];
extern Class_Descriptor cd_S19914C7;
extern VTBL_ENTRY _ZTI8S19914C7[];
extern  VTBL_ENTRY _ZTV8S19914C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19914C7[];
static Base_Class bases_S19914C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19914C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S3490C4,    ABISELECT(3280,2332), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19914C2,    ABISELECT(96,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19914C3,    ABISELECT(96,52), //bcp->offset
    12, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19914C2,    ABISELECT(3296,2348), //bcp->offset
    20, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S19914C5,    ABISELECT(608,412), //bcp->offset
    16, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19914C2,    ABISELECT(3408,2408), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19914C3,    ABISELECT(3408,2408), //bcp->offset
    30, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S19914C5,    ABISELECT(3920,2768), //bcp->offset
    35, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S19914C8,    ABISELECT(3384,2400), //bcp->offset
    24, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19914C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19914C6[];
extern void _ZN8S19914C22v1Ev();
extern void _ZN8S19914C6D1Ev();
extern void _ZN8S19914C6D0Ev();
extern void _ZN8S19914C62v3Ev();
extern void _ZN8S19914C62v4Ev();
extern void _ZN8S19914C22v1Ev();
extern void _ZN8S19914C52v2Ev();
extern void _ZN8S19914C22v1Ev();
extern void _ZN8S19914C22v1Ev();
extern void _ZN8S19914C52v2Ev();
static  VTBL_ENTRY vtc_S19914C6[] = {
  ABISELECT(3920,2768),
  ABISELECT(3408,2408),
  ABISELECT(3384,2400),
  ABISELECT(3296,2348),
  ABISELECT(3280,2332),
  0,
  (VTBL_ENTRY)&(_ZTI8S19914C6[0]),
  (VTBL_ENTRY)&_ZN8S19914C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19914C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19914C6D0Ev,
  (VTBL_ENTRY)&_ZN8S19914C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19914C62v4Ev,
  ABISELECT(3184,2280),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI8S19914C6[0]),
  (VTBL_ENTRY)&_ZN8S19914C22v1Ev,
  ABISELECT(2688,1936),
  ABISELECT(-608,-412),
  (VTBL_ENTRY)&(_ZTI8S19914C6[0]),
  (VTBL_ENTRY)&_ZN8S19914C52v2Ev,
  0,
  ABISELECT(-3296,-2348),
  (VTBL_ENTRY)&(_ZTI8S19914C6[0]),
  (VTBL_ENTRY)&_ZN8S19914C22v1Ev,
  ABISELECT(536,368),
  ABISELECT(-88,-52),
  ABISELECT(24,8),
  ABISELECT(-104,-68),
  ABISELECT(-3384,-2400),
  (VTBL_ENTRY)&(_ZTI8S19914C6[0]),
  0,
  ABISELECT(-128,-76),
  ABISELECT(-3408,-2408),
  (VTBL_ENTRY)&(_ZTI8S19914C6[0]),
  (VTBL_ENTRY)&_ZN8S19914C22v1Ev,
  0,
  ABISELECT(-624,-420),
  ABISELECT(-3920,-2768),
  (VTBL_ENTRY)&(_ZTI8S19914C6[0]),
  (VTBL_ENTRY)&_ZN8S19914C52v2Ev,
};
extern VTBL_ENTRY _ZTV8S19914C6[];
extern void _ZN8S19914C22v1Ev();
extern void _ZN8S19914C7D1Ev();
extern void _ZN8S19914C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19914C7__8S19914C6[] = {
  ABISELECT(3920,2768),
  ABISELECT(3408,2408),
  ABISELECT(3384,2400),
  ABISELECT(3296,2348),
  ABISELECT(3280,2332),
  0,
  (VTBL_ENTRY)&(_ZTI8S19914C7[0]),
  (VTBL_ENTRY)&_ZN8S19914C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19914C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19914C7D0Ev,
};
extern void _ZN8S19914C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19914C38S19914C7__8S19914C6[] = {
  ABISELECT(3184,2280),
  0,
  (VTBL_ENTRY)&(_ZTI8S19914C3[0]),
  (VTBL_ENTRY)&_ZN8S19914C22v1Ev,
};
extern void _ZN8S19914C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19914C58S19914C7__8S19914C6[] = {
  ABISELECT(2688,1936),
  0,
  (VTBL_ENTRY)&(_ZTI8S19914C5[0]),
  (VTBL_ENTRY)&_ZN8S19914C52v2Ev,
};
extern void _ZN8S19914C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19914C2__8S19914C58S19914C7__8S19914C6[] = {
  0,
  ABISELECT(-2688,-1936),
  (VTBL_ENTRY)&(_ZTI8S19914C5[0]),
  (VTBL_ENTRY)&_ZN8S19914C22v1Ev,
};
extern void _ZN8S19914C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19914C3__A__8S19914C7__8S19914C6[] = {
  ABISELECT(3184,2280),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI8S19914C7[0]),
  (VTBL_ENTRY)&_ZN8S19914C22v1Ev,
};
extern void _ZN8S19914C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19914C5__A__8S19914C7__8S19914C6[] = {
  ABISELECT(2688,1936),
  ABISELECT(-608,-412),
  (VTBL_ENTRY)&(_ZTI8S19914C7[0]),
  (VTBL_ENTRY)&_ZN8S19914C52v2Ev,
};
extern void _ZN8S19914C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19914C2__A2__8S19914C7__8S19914C6[] = {
  0,
  ABISELECT(-3296,-2348),
  (VTBL_ENTRY)&(_ZTI8S19914C7[0]),
  (VTBL_ENTRY)&_ZN8S19914C22v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19914C8__8S19914C7__8S19914C6[] = {
  ABISELECT(536,368),
  ABISELECT(-88,-52),
  ABISELECT(24,8),
  ABISELECT(-104,-68),
  ABISELECT(-3384,-2400),
  (VTBL_ENTRY)&(_ZTI8S19914C7[0]),
};
extern void _ZN8S19914C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19914C3__A1__8S19914C7__8S19914C6[] = {
  0,
  ABISELECT(-128,-76),
  ABISELECT(-3408,-2408),
  (VTBL_ENTRY)&(_ZTI8S19914C7[0]),
  (VTBL_ENTRY)&_ZN8S19914C22v1Ev,
};
extern void _ZN8S19914C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19914C5__A1__8S19914C7__8S19914C6[] = {
  0,
  ABISELECT(-624,-420),
  ABISELECT(-3920,-2768),
  (VTBL_ENTRY)&(_ZTI8S19914C7[0]),
  (VTBL_ENTRY)&_ZN8S19914C52v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19914C8__8S19914C6[] = {
  ABISELECT(536,368),
  ABISELECT(-88,-52),
  ABISELECT(24,8),
  ABISELECT(-104,-68),
  0,
  (VTBL_ENTRY)&(_ZTI8S19914C8[0]),
};
extern void _ZN8S19914C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19914C3__8S19914C8__8S19914C6[] = {
  0,
  ABISELECT(-128,-76),
  ABISELECT(-24,-8),
  (VTBL_ENTRY)&(_ZTI8S19914C8[0]),
  (VTBL_ENTRY)&_ZN8S19914C22v1Ev,
};
extern void _ZN8S19914C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19914C2__A1__8S19914C8__8S19914C6[] = {
  0,
  ABISELECT(88,52),
  (VTBL_ENTRY)&(_ZTI8S19914C8[0]),
  (VTBL_ENTRY)&_ZN8S19914C22v1Ev,
};
extern void _ZN8S19914C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19914C5__8S19914C8__8S19914C6[] = {
  0,
  ABISELECT(-624,-420),
  ABISELECT(-536,-368),
  (VTBL_ENTRY)&(_ZTI8S19914C8[0]),
  (VTBL_ENTRY)&_ZN8S19914C52v2Ev,
};
extern void _ZN8S19914C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19914C3__A1__8S19914C6[] = {
  ABISELECT(-128,-76),
  0,
  (VTBL_ENTRY)&(_ZTI8S19914C3[0]),
  (VTBL_ENTRY)&_ZN8S19914C22v1Ev,
};
extern void _ZN8S19914C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19914C5__A1__8S19914C6[] = {
  ABISELECT(-624,-420),
  0,
  (VTBL_ENTRY)&(_ZTI8S19914C5[0]),
  (VTBL_ENTRY)&_ZN8S19914C52v2Ev,
};
extern void _ZN8S19914C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19914C2__8S19914C5__A1__8S19914C6[] = {
  0,
  ABISELECT(624,420),
  (VTBL_ENTRY)&(_ZTI8S19914C5[0]),
  (VTBL_ENTRY)&_ZN8S19914C22v1Ev,
};
static  VTT_ENTRY vtt_S19914C6[] = {
  {&(_ZTV8S19914C6[7]),  7,40},
  {&(_tg__ZTV8S19914C7__8S19914C6[7]),  7,10},
  {&(_tg__ZTV8S19914C38S19914C7__8S19914C6[3]),  3,4},
  {&(_tg__ZTV8S19914C58S19914C7__8S19914C6[3]),  3,4},
  {&(_tg__ZTV8S19914C2__8S19914C58S19914C7__8S19914C6[3]),  3,4},
  {&(_tg__ZTV8S19914C3__A__8S19914C7__8S19914C6[3]),  3,4},
  {&(_tg__ZTV8S19914C5__A__8S19914C7__8S19914C6[3]),  3,4},
  {&(_tg__ZTV8S19914C2__A2__8S19914C7__8S19914C6[3]),  3,4},
  {&(_tg__ZTV8S19914C8__8S19914C7__8S19914C6[6]),  6,6},
  {&(_tg__ZTV8S19914C3__A1__8S19914C7__8S19914C6[4]),  4,5},
  {&(_tg__ZTV8S19914C5__A1__8S19914C7__8S19914C6[4]),  4,5},
  {&(_ZTV8S19914C6[15]),  15,40},
  {&(_ZTV8S19914C6[19]),  19,40},
  {&(_ZTV8S19914C6[23]),  23,40},
  {&(_ZTV8S19914C6[30]),  30,40},
  {&(_ZTV8S19914C6[34]),  34,40},
  {&(_ZTV8S19914C6[39]),  39,40},
  {&(_tg__ZTV8S19914C8__8S19914C6[6]),  6,6},
  {&(_tg__ZTV8S19914C3__8S19914C8__8S19914C6[4]),  4,5},
  {&(_tg__ZTV8S19914C2__A1__8S19914C8__8S19914C6[3]),  3,4},
  {&(_tg__ZTV8S19914C5__8S19914C8__8S19914C6[4]),  4,5},
  {&(_tg__ZTV8S19914C3__A1__8S19914C6[3]),  3,4},
  {&(_tg__ZTV8S19914C5__A1__8S19914C6[3]),  3,4},
  {&(_tg__ZTV8S19914C2__8S19914C5__A1__8S19914C6[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S19914C6[];
extern  VTBL_ENTRY _ZTV8S19914C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19914C6[];
Class_Descriptor cd_S19914C6 = {  "S19914C6", // class name
  bases_S19914C6, 11,
  &(vtc_S19914C6[0]), // expected_vtbl_contents
  &(vtt_S19914C6[0]), // expected_vtt_contents
  ABISELECT(4208,3000), // object size
  NSPAIRA(_ZTI8S19914C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19914C6),40, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19914C6),24, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19914C9  : S19914C8 , S19914C7 , S19914C3 , S19914C2 {
  ::S19914C3 s19914c9f0[2];
  ::S19914C2 s19914c9f1;
  int s19914c9f2;
  ::S3490C4 s19914c9f3;
  void *s19914c9f4[10];
  int s19914c9f5[2];
  __tsi64 s19914c9f6;
  long double s19914c9f7;
  __tsi64 s19914c9f8;
  int s19914c9f9;
  virtual void  v5(); // _ZN8S19914C92v5Ev
  ~S19914C9(); // tgen
  S19914C9(); // tgen
};
//SIG(-1 S19914C9) C1{ BC2{ VBC3{ m FL Fi Fc} VBC4{ BC5{ v2 FD Fi:3 Fc:8 FD[2] FL} VBC3 Fc[10] Fi FC6{ VBC5 v3 FC3 FL FC3[7] Fp FL FC3 Fp Fc Fs Fi FC5} FL} VBC5 VBC6 Fp} BC7{ BC5 VBC3 BC4 BC6 VBC2 vd FC6 FC2 Fp Fi FC5 FC6} BC4 BC5 v1 FC4[2] FC5 Fi FC3 Fp[10] Fi[2] FL FD FL Fi}


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

static void Test_S19914C9()
{
  extern Class_Descriptor cd_S19914C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(349,984)];
    init_test(&cd_S19914C9, buf);
    S19914C9 *dp, &lv = *(dp=new (buf) S19914C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(5568,3932), "sizeof(S19914C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19914C9)");
    /*is_ambiguous_... S19914C9::S19914C8 */ AMB_check_base_class_offset(lv, (S3490C4*)(S19914C8*), ABISELECT(4640,3264), "S19914C9");
    /*is_ambiguous_... S19914C9::S19914C3 */ AMB_check_base_class_offset(lv, (S3490C4*)(S19914C3*), ABISELECT(4640,3264), "S19914C9");
    check_base_class_offset(lv, (S3490C4*)(S19914C7*), ABISELECT(4640,3264), "S19914C9");
    /*is_ambiguous_... S19914C7::S19914C3 */ AMB_check_base_class_offset(lv, (S3490C4*)(S19914C3*)(S19914C7*), ABISELECT(4640,3264), "S19914C9");
    /*is_ambiguous_... S19914C9::S19914C8 */ AMB_check_base_class_offset(lv, (S3490C4*)(S19914C8*), ABISELECT(4640,3264), "S19914C9");
    /*is_ambiguous_... S19914C9::S19914C3 */ AMB_check_base_class_offset(lv, (S3490C4*)(S19914C3*), ABISELECT(4640,3264), "S19914C9");
    /*is_ambiguous_... S19914C9::S19914C3 */ AMB_check_base_class_offset(lv, (S19914C2*)(S19914C3*), ABISELECT(4656,3280), "S19914C9");
    /*is_ambiguous_... S19914C9::S19914C8 */ AMB_check_base_class_offset(lv, (S19914C3*)(S19914C8*), ABISELECT(4656,3280), "S19914C9");
    /*is_ambiguous_... S19914C9::S19914C8 */ AMB_check_base_class_offset(lv, (S19914C3*)(S19914C8*), ABISELECT(4656,3280), "S19914C9");
    /*is_ambiguous_... S19914C9::S19914C8 */ AMB_check_base_class_offset(lv, (S19914C2*)(S19914C8*), ABISELECT(5168,3640), "S19914C9");
    /*is_ambiguous_... S19914C9::S19914C5 */ AMB_check_base_class_offset(lv, (S19914C2*)(S19914C5*), ABISELECT(5168,3640), "S19914C9");
    /*is_ambiguous_... S19914C7::S19914C5 */ AMB_check_base_class_offset(lv, (S19914C2*)(S19914C5*)(S19914C7*), ABISELECT(5168,3640), "S19914C9");
    /*is_ambiguous_... S19914C9::S19914C8 */ AMB_check_base_class_offset(lv, (S19914C2*)(S19914C8*), ABISELECT(5168,3640), "S19914C9");
    /*is_ambiguous_... S19914C9::S19914C8 */ AMB_check_base_class_offset(lv, (S19914C5*)(S19914C8*), ABISELECT(5264,3692), "S19914C9");
    /*is_ambiguous_... S19914C9::S19914C8 */ AMB_check_base_class_offset(lv, (S19914C5*)(S19914C8*), ABISELECT(5264,3692), "S19914C9");
    /*is_ambiguous_... S19914C9::S19914C8 */ AMB_check_base_class_offset(lv, (S19914C8*), 0, "S19914C9");
    /*is_ambiguous_... S19914C7::S19914C2 */ AMB_check_base_class_offset(lv, (S19914C2*)(S19914C7*), ABISELECT(16,8), "S19914C9");
    /*is_ambiguous_... S19914C7::S19914C3 */ AMB_check_base_class_offset(lv, (S19914C2*)(S19914C3*)(S19914C7*), ABISELECT(112,60), "S19914C9");
    /*is_ambiguous_... S19914C7::S19914C3 */ AMB_check_base_class_offset(lv, (S19914C3*)(S19914C7*), ABISELECT(112,60), "S19914C9");
    /*is_ambiguous_... S19914C7::S19914C5 */ AMB_check_base_class_offset(lv, (S19914C5*)(S19914C7*), ABISELECT(624,420), "S19914C9");
    check_base_class_offset(lv, (S19914C8*)(S19914C7*), ABISELECT(5552,3924), "S19914C9");
    check_base_class_offset(lv, (S19914C7*), ABISELECT(16,8), "S19914C9");
    /*is_ambiguous_... S19914C9::S19914C3 */ AMB_check_base_class_offset(lv, (S19914C2*)(S19914C3*), ABISELECT(2720,1948), "S19914C9");
    /*is_ambiguous_... S19914C9::S19914C3 */ AMB_check_base_class_offset(lv, (S19914C3*), ABISELECT(2720,1948), "S19914C9");
    /*is_ambiguous_... S19914C9::S19914C2 */ AMB_check_base_class_offset(lv, (S19914C2*), ABISELECT(3232,2308), "S19914C9");
    check_field_offset(lv, s19914c9f0, ABISELECT(3328,2360), "S19914C9.s19914c9f0");
    check_field_offset(lv, s19914c9f1, ABISELECT(4384,3112), "S19914C9.s19914c9f1");
    check_field_offset(lv, s19914c9f2, ABISELECT(4480,3164), "S19914C9.s19914c9f2");
    check_field_offset(lv, s19914c9f3, ABISELECT(4488,3168), "S19914C9.s19914c9f3");
    check_field_offset(lv, s19914c9f4, ABISELECT(4504,3184), "S19914C9.s19914c9f4");
    check_field_offset(lv, s19914c9f5, ABISELECT(4584,3224), "S19914C9.s19914c9f5");
    check_field_offset(lv, s19914c9f6, ABISELECT(4592,3232), "S19914C9.s19914c9f6");
    check_field_offset(lv, s19914c9f7, ABISELECT(4608,3240), "S19914C9.s19914c9f7");
    check_field_offset(lv, s19914c9f8, ABISELECT(4624,3252), "S19914C9.s19914c9f8");
    check_field_offset(lv, s19914c9f9, ABISELECT(4632,3260), "S19914C9.s19914c9f9");
    test_class_info(&lv, &cd_S19914C9);
    dp->~S19914C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19914C9(Test_S19914C9, "S19914C9", ABISELECT(5568,3932));

#else // __cplusplus

extern void _ZN8S19914C9C1Ev();
extern void _ZN8S19914C9D1Ev();
Name_Map name_map_S19914C9[] = {
  NSPAIR(_ZN8S19914C9C1Ev),
  NSPAIR(_ZN8S19914C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3490C4;
extern VTBL_ENTRY _ZTI7S3490C4[];
extern Class_Descriptor cd_S19914C2;
extern VTBL_ENTRY _ZTI8S19914C2[];
extern  VTBL_ENTRY _ZTV8S19914C2[];
extern Class_Descriptor cd_S19914C3;
extern VTBL_ENTRY _ZTI8S19914C3[];
extern  VTBL_ENTRY _ZTV8S19914C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19914C3[];
extern Class_Descriptor cd_S19914C2;
extern VTBL_ENTRY _ZTI8S19914C2[];
extern  VTBL_ENTRY _ZTV8S19914C2[];
extern Class_Descriptor cd_S19914C5;
extern VTBL_ENTRY _ZTI8S19914C5[];
extern  VTBL_ENTRY _ZTV8S19914C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19914C5[];
extern Class_Descriptor cd_S19914C8;
extern VTBL_ENTRY _ZTI8S19914C8[];
extern  VTBL_ENTRY _ZTV8S19914C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19914C8[];
extern Class_Descriptor cd_S19914C2;
extern VTBL_ENTRY _ZTI8S19914C2[];
extern  VTBL_ENTRY _ZTV8S19914C2[];
extern Class_Descriptor cd_S19914C2;
extern VTBL_ENTRY _ZTI8S19914C2[];
extern  VTBL_ENTRY _ZTV8S19914C2[];
extern Class_Descriptor cd_S19914C3;
extern VTBL_ENTRY _ZTI8S19914C3[];
extern  VTBL_ENTRY _ZTV8S19914C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19914C3[];
extern Class_Descriptor cd_S19914C5;
extern VTBL_ENTRY _ZTI8S19914C5[];
extern  VTBL_ENTRY _ZTV8S19914C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19914C5[];
extern Class_Descriptor cd_S19914C8;
extern VTBL_ENTRY _ZTI8S19914C8[];
extern  VTBL_ENTRY _ZTV8S19914C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19914C8[];
extern Class_Descriptor cd_S19914C7;
extern VTBL_ENTRY _ZTI8S19914C7[];
extern  VTBL_ENTRY _ZTV8S19914C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19914C7[];
extern Class_Descriptor cd_S19914C2;
extern VTBL_ENTRY _ZTI8S19914C2[];
extern  VTBL_ENTRY _ZTV8S19914C2[];
extern Class_Descriptor cd_S19914C3;
extern VTBL_ENTRY _ZTI8S19914C3[];
extern  VTBL_ENTRY _ZTV8S19914C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19914C3[];
extern Class_Descriptor cd_S19914C2;
extern VTBL_ENTRY _ZTI8S19914C2[];
extern  VTBL_ENTRY _ZTV8S19914C2[];
static Base_Class bases_S19914C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3490C4,    ABISELECT(4640,3264), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19914C2,    ABISELECT(4656,3280), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19914C3,    ABISELECT(4656,3280), //bcp->offset
    35, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S19914C2,    ABISELECT(5168,3640), //bcp->offset
    40, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19914C5,    ABISELECT(5264,3692), //bcp->offset
    44, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S19914C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19914C2,    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
    7, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19914C2,    ABISELECT(112,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19914C3,    ABISELECT(112,60), //bcp->offset
    20, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19914C5,    ABISELECT(624,420), //bcp->offset
    24, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19914C8,    ABISELECT(5552,3924), //bcp->offset
    49, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S19914C7,    ABISELECT(16,8), //bcp->offset
    10, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19914C2,    ABISELECT(2720,1948), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19914C3,    ABISELECT(2720,1948), //bcp->offset
    28, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19914C2,    ABISELECT(3232,2308), //bcp->offset
    32, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19914C9[];
extern void _ZN8S19914C92v5Ev();
extern void _ZN8S19914C9D1Ev();
extern void _ZN8S19914C9D0Ev();
extern void _ZN8S19914C22v1Ev();
extern void ABISELECT(_ZThn16_N8S19914C9D1Ev,_ZThn8_N8S19914C9D1Ev)();
extern void ABISELECT(_ZThn16_N8S19914C9D0Ev,_ZThn8_N8S19914C9D0Ev)();
extern void _ZN8S19914C22v1Ev();
extern void _ZN8S19914C52v2Ev();
extern void _ZN8S19914C22v1Ev();
extern void _ZN8S19914C22v1Ev();
extern void _ZN8S19914C22v1Ev();
extern void _ZN8S19914C22v1Ev();
extern void _ZN8S19914C52v2Ev();
static  VTBL_ENTRY vtc_S19914C9[] = {
  ABISELECT(5552,3924),
  ABISELECT(5264,3692),
  ABISELECT(5168,3640),
  ABISELECT(4656,3280),
  ABISELECT(4640,3264),
  0,
  (VTBL_ENTRY)&(_ZTI8S19914C9[0]),
  (VTBL_ENTRY)&_ZN8S19914C92v5Ev,
  (VTBL_ENTRY)&_ZN8S19914C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19914C9D0Ev,
  ABISELECT(5248,3684),
  ABISELECT(4640,3272),
  ABISELECT(5536,3916),
  ABISELECT(5152,3632),
  ABISELECT(4624,3256),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19914C9[0]),
  (VTBL_ENTRY)&_ZN8S19914C22v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S19914C9D1Ev,_ZThn8_N8S19914C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S19914C9D0Ev,_ZThn8_N8S19914C9D0Ev),
  ABISELECT(4528,3204),
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI8S19914C9[0]),
  (VTBL_ENTRY)&_ZN8S19914C22v1Ev,
  ABISELECT(4544,3220),
  ABISELECT(-624,-420),
  (VTBL_ENTRY)&(_ZTI8S19914C9[0]),
  (VTBL_ENTRY)&_ZN8S19914C52v2Ev,
  ABISELECT(1920,1316),
  ABISELECT(-2720,-1948),
  (VTBL_ENTRY)&(_ZTI8S19914C9[0]),
  (VTBL_ENTRY)&_ZN8S19914C22v1Ev,
  ABISELECT(-3232,-2308),
  (VTBL_ENTRY)&(_ZTI8S19914C9[0]),
  (VTBL_ENTRY)&_ZN8S19914C22v1Ev,
  0,
  -16,
  ABISELECT(-4656,-3280),
  (VTBL_ENTRY)&(_ZTI8S19914C9[0]),
  (VTBL_ENTRY)&_ZN8S19914C22v1Ev,
  0,
  ABISELECT(-5168,-3640),
  (VTBL_ENTRY)&(_ZTI8S19914C9[0]),
  (VTBL_ENTRY)&_ZN8S19914C22v1Ev,
  0,
  ABISELECT(-96,-52),
  ABISELECT(-5264,-3692),
  (VTBL_ENTRY)&(_ZTI8S19914C9[0]),
  (VTBL_ENTRY)&_ZN8S19914C52v2Ev,
  ABISELECT(-288,-232),
  ABISELECT(-384,-284),
  ABISELECT(-896,-644),
  ABISELECT(-912,-660),
  ABISELECT(-5552,-3924),
  (VTBL_ENTRY)&(_ZTI8S19914C9[0]),
};
extern VTBL_ENTRY _ZTV8S19914C9[];
static  VTBL_ENTRY _tg__ZTV8S19914C8__A__8S19914C9[] = {
  ABISELECT(5264,3692),
  ABISELECT(5168,3640),
  ABISELECT(4656,3280),
  ABISELECT(4640,3264),
  0,
  (VTBL_ENTRY)&(_ZTI8S19914C8[0]),
};
extern void _ZN8S19914C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19914C3__8S19914C8__A__8S19914C9[] = {
  0,
  -16,
  ABISELECT(-4656,-3280),
  (VTBL_ENTRY)&(_ZTI8S19914C8[0]),
  (VTBL_ENTRY)&_ZN8S19914C22v1Ev,
};
extern void _ZN8S19914C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19914C2__A1__8S19914C8__A__8S19914C9[] = {
  0,
  ABISELECT(-5168,-3640),
  (VTBL_ENTRY)&(_ZTI8S19914C8[0]),
  (VTBL_ENTRY)&_ZN8S19914C22v1Ev,
};
extern void _ZN8S19914C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19914C5__8S19914C8__A__8S19914C9[] = {
  0,
  ABISELECT(-96,-52),
  ABISELECT(-5264,-3692),
  (VTBL_ENTRY)&(_ZTI8S19914C8[0]),
  (VTBL_ENTRY)&_ZN8S19914C52v2Ev,
};
extern void _ZN8S19914C22v1Ev();
extern void _ZN8S19914C7D1Ev();
extern void _ZN8S19914C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19914C7__8S19914C9[] = {
  ABISELECT(5248,3684),
  ABISELECT(4640,3272),
  ABISELECT(5536,3916),
  ABISELECT(5152,3632),
  ABISELECT(4624,3256),
  0,
  (VTBL_ENTRY)&(_ZTI8S19914C7[0]),
  (VTBL_ENTRY)&_ZN8S19914C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19914C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19914C7D0Ev,
};
extern void _ZN8S19914C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19914C38S19914C7__A1__8S19914C9[] = {
  ABISELECT(4528,3204),
  0,
  (VTBL_ENTRY)&(_ZTI8S19914C3[0]),
  (VTBL_ENTRY)&_ZN8S19914C22v1Ev,
};
extern void _ZN8S19914C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19914C58S19914C7__A1__8S19914C9[] = {
  ABISELECT(4544,3220),
  0,
  (VTBL_ENTRY)&(_ZTI8S19914C5[0]),
  (VTBL_ENTRY)&_ZN8S19914C52v2Ev,
};
extern void _ZN8S19914C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19914C2__8S19914C58S19914C7__A1__8S19914C9[] = {
  0,
  ABISELECT(-4544,-3220),
  (VTBL_ENTRY)&(_ZTI8S19914C5[0]),
  (VTBL_ENTRY)&_ZN8S19914C22v1Ev,
};
extern void _ZN8S19914C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19914C3__A__8S19914C7__8S19914C9[] = {
  ABISELECT(4528,3204),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI8S19914C7[0]),
  (VTBL_ENTRY)&_ZN8S19914C22v1Ev,
};
extern void _ZN8S19914C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19914C5__A__8S19914C7__8S19914C9[] = {
  ABISELECT(4544,3220),
  ABISELECT(-608,-412),
  (VTBL_ENTRY)&(_ZTI8S19914C7[0]),
  (VTBL_ENTRY)&_ZN8S19914C52v2Ev,
};
extern void _ZN8S19914C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19914C2__A2__8S19914C7__8S19914C9[] = {
  0,
  ABISELECT(-5152,-3632),
  (VTBL_ENTRY)&(_ZTI8S19914C7[0]),
  (VTBL_ENTRY)&_ZN8S19914C22v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19914C8__8S19914C7__8S19914C9[] = {
  ABISELECT(-288,-232),
  ABISELECT(-384,-284),
  ABISELECT(-896,-644),
  ABISELECT(-912,-660),
  ABISELECT(-5536,-3916),
  (VTBL_ENTRY)&(_ZTI8S19914C7[0]),
};
extern void _ZN8S19914C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19914C3__A1__8S19914C7__8S19914C9[] = {
  0,
  -16,
  ABISELECT(-4640,-3272),
  (VTBL_ENTRY)&(_ZTI8S19914C7[0]),
  (VTBL_ENTRY)&_ZN8S19914C22v1Ev,
};
extern void _ZN8S19914C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19914C5__A1__8S19914C7__8S19914C9[] = {
  0,
  ABISELECT(-96,-52),
  ABISELECT(-5248,-3684),
  (VTBL_ENTRY)&(_ZTI8S19914C7[0]),
  (VTBL_ENTRY)&_ZN8S19914C52v2Ev,
};
extern void _ZN8S19914C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19914C3__A__8S19914C9[] = {
  ABISELECT(1920,1316),
  0,
  (VTBL_ENTRY)&(_ZTI8S19914C3[0]),
  (VTBL_ENTRY)&_ZN8S19914C22v1Ev,
};
extern void _ZN8S19914C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19914C3__8S19914C9[] = {
  -16,
  0,
  (VTBL_ENTRY)&(_ZTI8S19914C3[0]),
  (VTBL_ENTRY)&_ZN8S19914C22v1Ev,
};
extern void _ZN8S19914C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19914C5__8S19914C9[] = {
  ABISELECT(-96,-52),
  0,
  (VTBL_ENTRY)&(_ZTI8S19914C5[0]),
  (VTBL_ENTRY)&_ZN8S19914C52v2Ev,
};
extern void _ZN8S19914C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19914C2__8S19914C5__8S19914C9[] = {
  0,
  ABISELECT(96,52),
  (VTBL_ENTRY)&(_ZTI8S19914C5[0]),
  (VTBL_ENTRY)&_ZN8S19914C22v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19914C8__A1__8S19914C9[] = {
  ABISELECT(-288,-232),
  ABISELECT(-384,-284),
  ABISELECT(-896,-644),
  ABISELECT(-912,-660),
  0,
  (VTBL_ENTRY)&(_ZTI8S19914C8[0]),
};
extern void _ZN8S19914C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19914C3__8S19914C8__A1__8S19914C9[] = {
  0,
  -16,
  ABISELECT(896,644),
  (VTBL_ENTRY)&(_ZTI8S19914C8[0]),
  (VTBL_ENTRY)&_ZN8S19914C22v1Ev,
};
extern void _ZN8S19914C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19914C2__A1__8S19914C8__A1__8S19914C9[] = {
  0,
  ABISELECT(384,284),
  (VTBL_ENTRY)&(_ZTI8S19914C8[0]),
  (VTBL_ENTRY)&_ZN8S19914C22v1Ev,
};
extern void _ZN8S19914C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19914C5__8S19914C8__A1__8S19914C9[] = {
  0,
  ABISELECT(-96,-52),
  ABISELECT(288,232),
  (VTBL_ENTRY)&(_ZTI8S19914C8[0]),
  (VTBL_ENTRY)&_ZN8S19914C52v2Ev,
};
static  VTT_ENTRY vtt_S19914C9[] = {
  {&(_ZTV8S19914C9[7]),  7,55},
  {&(_tg__ZTV8S19914C8__A__8S19914C9[6]),  6,6},
  {&(_tg__ZTV8S19914C3__8S19914C8__A__8S19914C9[4]),  4,5},
  {&(_tg__ZTV8S19914C2__A1__8S19914C8__A__8S19914C9[3]),  3,4},
  {&(_tg__ZTV8S19914C5__8S19914C8__A__8S19914C9[4]),  4,5},
  {&(_tg__ZTV8S19914C7__8S19914C9[7]),  7,10},
  {&(_tg__ZTV8S19914C38S19914C7__A1__8S19914C9[3]),  3,4},
  {&(_tg__ZTV8S19914C58S19914C7__A1__8S19914C9[3]),  3,4},
  {&(_tg__ZTV8S19914C2__8S19914C58S19914C7__A1__8S19914C9[3]),  3,4},
  {&(_tg__ZTV8S19914C3__A__8S19914C7__8S19914C9[3]),  3,4},
  {&(_tg__ZTV8S19914C5__A__8S19914C7__8S19914C9[3]),  3,4},
  {&(_tg__ZTV8S19914C2__A2__8S19914C7__8S19914C9[3]),  3,4},
  {&(_tg__ZTV8S19914C8__8S19914C7__8S19914C9[6]),  6,6},
  {&(_tg__ZTV8S19914C3__A1__8S19914C7__8S19914C9[4]),  4,5},
  {&(_tg__ZTV8S19914C5__A1__8S19914C7__8S19914C9[4]),  4,5},
  {&(_tg__ZTV8S19914C3__A__8S19914C9[3]),  3,4},
  {&(_ZTV8S19914C9[39]),  39,55},
  {&(_ZTV8S19914C9[43]),  43,55},
  {&(_ZTV8S19914C9[48]),  48,55},
  {&(_ZTV8S19914C9[17]),  17,55},
  {&(_ZTV8S19914C9[23]),  23,55},
  {&(_ZTV8S19914C9[27]),  27,55},
  {&(_ZTV8S19914C9[55]),  55,55},
  {&(_ZTV8S19914C9[31]),  31,55},
  {&(_tg__ZTV8S19914C3__8S19914C9[3]),  3,4},
  {&(_tg__ZTV8S19914C5__8S19914C9[3]),  3,4},
  {&(_tg__ZTV8S19914C2__8S19914C5__8S19914C9[3]),  3,4},
  {&(_tg__ZTV8S19914C8__A1__8S19914C9[6]),  6,6},
  {&(_tg__ZTV8S19914C3__8S19914C8__A1__8S19914C9[4]),  4,5},
  {&(_tg__ZTV8S19914C2__A1__8S19914C8__A1__8S19914C9[3]),  3,4},
  {&(_tg__ZTV8S19914C5__8S19914C8__A1__8S19914C9[4]),  4,5},
};
extern VTBL_ENTRY _ZTI8S19914C9[];
extern  VTBL_ENTRY _ZTV8S19914C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19914C9[];
Class_Descriptor cd_S19914C9 = {  "S19914C9", // class name
  bases_S19914C9, 15,
  &(vtc_S19914C9[0]), // expected_vtbl_contents
  &(vtt_S19914C9[0]), // expected_vtt_contents
  ABISELECT(5568,3932), // object size
  NSPAIRA(_ZTI8S19914C9),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19914C9),55, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19914C9),31, //virtual table table var
  14, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19914C1  : virtual S19914C2 , virtual S19914C3 , S19914C6 , virtual S19914C9 {
  int s19914c1f0;
  void *s19914c1f1[6];
  __tsi64 s19914c1f2;
  ::S3490C4 s19914c1f3;
  void *s19914c1f4;
  virtual  ~S19914C1(); // _ZN8S19914C1D2Ev
  S19914C1(); // tgen
};
//SIG(1 S19914C1) C1{ VBC2{ v1 FD Fi:3 Fc:8 FD[2] FL} VBC3{ BC2 VBC4{ m FL Fi Fc} Fc[10] Fi FC5{ VBC2 v2 FC4 FL FC4[7] Fp FL FC4 Fp Fc Fs Fi FC2} FL} BC6{ BC7{ BC2 VBC4 BC3 BC5 VBC8{ VBC4 VBC3 VBC2 VBC5 Fp} vd FC5 FC8 Fp Fi FC2 FC5} vd v3 v4 Fp Fs:6 FC2 FD Fi FC4 FC5 Fp Fi Fp[2]} VBC9{ BC8 BC7 BC3 BC2 v5 FC3[2] FC2 Fi FC4 Fp[10] Fi[2] FL FD FL Fi} vd Fi Fp[6] FL FC4 Fp}


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

static void Test_S19914C1()
{
  extern Class_Descriptor cd_S19914C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(560,1581)];
    init_test(&cd_S19914C1, buf);
    S19914C1 *dp, &lv = *(dp=new (buf) S19914C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8944,6320), "sizeof(S19914C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19914C1)");
    /*is_ambiguous_... S19914C1::S19914C2 */ AMB_check_base_class_offset(lv, (S19914C2*), ABISELECT(3376,2388), "S19914C1");
    /*is_ambiguous_... S19914C7::S19914C5 */ AMB_check_base_class_offset(lv, (S19914C2*)(S19914C5*)(S19914C7*)(S19914C6*), ABISELECT(3376,2388), "S19914C1");
    /*is_ambiguous_... S19914C1::S19914C8 */ AMB_check_base_class_offset(lv, (S19914C2*)(S19914C8*), ABISELECT(3376,2388), "S19914C1");
    /*is_ambiguous_... S19914C1::S19914C5 */ AMB_check_base_class_offset(lv, (S19914C2*)(S19914C5*), ABISELECT(3376,2388), "S19914C1");
    /*is_ambiguous_... S19914C9::S19914C8 */ AMB_check_base_class_offset(lv, (S19914C2*)(S19914C8*)(S19914C9*), ABISELECT(3376,2388), "S19914C1");
    /*is_ambiguous_... S19914C7::S19914C5 */ AMB_check_base_class_offset(lv, (S19914C2*)(S19914C5*)(S19914C7*)(S19914C9*), ABISELECT(3376,2388), "S19914C1");
    /*is_ambiguous_... S19914C1::S19914C3 */ AMB_check_base_class_offset(lv, (S19914C2*)(S19914C3*), ABISELECT(3472,2440), "S19914C1");
    /*is_ambiguous_... S19914C1::S19914C3 */ AMB_check_base_class_offset(lv, (S3490C4*)(S19914C3*), ABISELECT(3976,2800), "S19914C1");
    check_base_class_offset(lv, (S3490C4*)(S19914C7*)(S19914C6*), ABISELECT(3976,2800), "S19914C1");
    /*is_ambiguous_... S19914C7::S19914C3 */ AMB_check_base_class_offset(lv, (S3490C4*)(S19914C3*)(S19914C7*)(S19914C6*), ABISELECT(3976,2800), "S19914C1");
    /*is_ambiguous_... S19914C1::S19914C8 */ AMB_check_base_class_offset(lv, (S3490C4*)(S19914C8*), ABISELECT(3976,2800), "S19914C1");
    /*is_ambiguous_... S19914C9::S19914C8 */ AMB_check_base_class_offset(lv, (S3490C4*)(S19914C8*)(S19914C9*), ABISELECT(3976,2800), "S19914C1");
    check_base_class_offset(lv, (S3490C4*)(S19914C7*)(S19914C9*), ABISELECT(3976,2800), "S19914C1");
    /*is_ambiguous_... S19914C7::S19914C3 */ AMB_check_base_class_offset(lv, (S3490C4*)(S19914C3*)(S19914C7*)(S19914C9*), ABISELECT(3976,2800), "S19914C1");
    /*is_ambiguous_... S19914C9::S19914C3 */ AMB_check_base_class_offset(lv, (S3490C4*)(S19914C3*)(S19914C9*), ABISELECT(3976,2800), "S19914C1");
    /*is_ambiguous_... S19914C1::S19914C3 */ AMB_check_base_class_offset(lv, (S19914C3*), ABISELECT(3472,2440), "S19914C1");
    /*is_ambiguous_... S19914C1::S19914C8 */ AMB_check_base_class_offset(lv, (S19914C3*)(S19914C8*), ABISELECT(3472,2440), "S19914C1");
    /*is_ambiguous_... S19914C9::S19914C8 */ AMB_check_base_class_offset(lv, (S19914C3*)(S19914C8*)(S19914C9*), ABISELECT(3472,2440), "S19914C1");
    /*is_ambiguous_... S19914C7::S19914C2 */ AMB_check_base_class_offset(lv, (S19914C2*)(S19914C7*)(S19914C6*), 0, "S19914C1");
    /*is_ambiguous_... S19914C7::S19914C3 */ AMB_check_base_class_offset(lv, (S19914C2*)(S19914C3*)(S19914C7*)(S19914C6*), ABISELECT(96,52), "S19914C1");
    /*is_ambiguous_... S19914C7::S19914C3 */ AMB_check_base_class_offset(lv, (S19914C3*)(S19914C7*)(S19914C6*), ABISELECT(96,52), "S19914C1");
    /*is_ambiguous_... S19914C7::S19914C5 */ AMB_check_base_class_offset(lv, (S19914C5*)(S19914C7*)(S19914C6*), ABISELECT(608,412), "S19914C1");
    /*is_ambiguous_... S19914C1::S19914C8 */ AMB_check_base_class_offset(lv, (S19914C5*)(S19914C8*), ABISELECT(4016,2824), "S19914C1");
    /*is_ambiguous_... S19914C9::S19914C8 */ AMB_check_base_class_offset(lv, (S19914C5*)(S19914C8*)(S19914C9*), ABISELECT(4016,2824), "S19914C1");
    check_base_class_offset(lv, (S19914C8*)(S19914C7*)(S19914C6*), ABISELECT(3992,2816), "S19914C1");
    check_base_class_offset(lv, (S19914C8*)(S19914C7*)(S19914C9*), ABISELECT(3992,2816), "S19914C1");
    check_base_class_offset(lv, (S19914C7*)(S19914C6*), 0, "S19914C1");
    check_base_class_offset(lv, (S19914C6*), 0, "S19914C1");
    /*is_ambiguous_... S19914C9::S19914C8 */ AMB_check_base_class_offset(lv, (S19914C8*)(S19914C9*), ABISELECT(4304,3056), "S19914C1");
    /*is_ambiguous_... S19914C7::S19914C2 */ AMB_check_base_class_offset(lv, (S19914C2*)(S19914C7*)(S19914C9*), ABISELECT(4320,3064), "S19914C1");
    /*is_ambiguous_... S19914C7::S19914C3 */ AMB_check_base_class_offset(lv, (S19914C2*)(S19914C3*)(S19914C7*)(S19914C9*), ABISELECT(4416,3116), "S19914C1");
    /*is_ambiguous_... S19914C7::S19914C3 */ AMB_check_base_class_offset(lv, (S19914C3*)(S19914C7*)(S19914C9*), ABISELECT(4416,3116), "S19914C1");
    /*is_ambiguous_... S19914C7::S19914C5 */ AMB_check_base_class_offset(lv, (S19914C5*)(S19914C7*)(S19914C9*), ABISELECT(4928,3476), "S19914C1");
    check_base_class_offset(lv, (S19914C7*)(S19914C9*), ABISELECT(4320,3064), "S19914C1");
    /*is_ambiguous_... S19914C9::S19914C3 */ AMB_check_base_class_offset(lv, (S19914C2*)(S19914C3*)(S19914C9*), ABISELECT(7024,5004), "S19914C1");
    /*is_ambiguous_... S19914C9::S19914C3 */ AMB_check_base_class_offset(lv, (S19914C3*)(S19914C9*), ABISELECT(7024,5004), "S19914C1");
    /*is_ambiguous_... S19914C9::S19914C2 */ AMB_check_base_class_offset(lv, (S19914C2*)(S19914C9*), ABISELECT(7536,5364), "S19914C1");
    check_base_class_offset(lv, (S19914C9*), ABISELECT(4304,3056), "S19914C1");
    check_field_offset(lv, s19914c1f0, ABISELECT(3280,2332), "S19914C1.s19914c1f0");
    check_field_offset(lv, s19914c1f1, ABISELECT(3288,2336), "S19914C1.s19914c1f1");
    check_field_offset(lv, s19914c1f2, ABISELECT(3336,2360), "S19914C1.s19914c1f2");
    check_field_offset(lv, s19914c1f3, ABISELECT(3344,2368), "S19914C1.s19914c1f3");
    check_field_offset(lv, s19914c1f4, ABISELECT(3360,2384), "S19914C1.s19914c1f4");
    test_class_info(&lv, &cd_S19914C1);
    dp->~S19914C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19914C1(Test_S19914C1, "S19914C1", ABISELECT(8944,6320));

#else // __cplusplus

extern void _ZN8S19914C1C1Ev();
extern void _ZN8S19914C1D2Ev();
Name_Map name_map_S19914C1[] = {
  NSPAIR(_ZN8S19914C1C1Ev),
  NSPAIR(_ZN8S19914C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19914C2;
extern VTBL_ENTRY _ZTI8S19914C2[];
extern  VTBL_ENTRY _ZTV8S19914C2[];
extern Class_Descriptor cd_S19914C2;
extern VTBL_ENTRY _ZTI8S19914C2[];
extern  VTBL_ENTRY _ZTV8S19914C2[];
extern Class_Descriptor cd_S3490C4;
extern VTBL_ENTRY _ZTI7S3490C4[];
extern Class_Descriptor cd_S19914C3;
extern VTBL_ENTRY _ZTI8S19914C3[];
extern  VTBL_ENTRY _ZTV8S19914C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19914C3[];
extern Class_Descriptor cd_S19914C2;
extern VTBL_ENTRY _ZTI8S19914C2[];
extern  VTBL_ENTRY _ZTV8S19914C2[];
extern Class_Descriptor cd_S19914C2;
extern VTBL_ENTRY _ZTI8S19914C2[];
extern  VTBL_ENTRY _ZTV8S19914C2[];
extern Class_Descriptor cd_S19914C3;
extern VTBL_ENTRY _ZTI8S19914C3[];
extern  VTBL_ENTRY _ZTV8S19914C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19914C3[];
extern Class_Descriptor cd_S19914C5;
extern VTBL_ENTRY _ZTI8S19914C5[];
extern  VTBL_ENTRY _ZTV8S19914C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19914C5[];
extern Class_Descriptor cd_S19914C5;
extern VTBL_ENTRY _ZTI8S19914C5[];
extern  VTBL_ENTRY _ZTV8S19914C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19914C5[];
extern Class_Descriptor cd_S19914C8;
extern VTBL_ENTRY _ZTI8S19914C8[];
extern  VTBL_ENTRY _ZTV8S19914C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19914C8[];
extern Class_Descriptor cd_S19914C7;
extern VTBL_ENTRY _ZTI8S19914C7[];
extern  VTBL_ENTRY _ZTV8S19914C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19914C7[];
extern Class_Descriptor cd_S19914C6;
extern VTBL_ENTRY _ZTI8S19914C6[];
extern  VTBL_ENTRY _ZTV8S19914C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19914C6[];
extern Class_Descriptor cd_S19914C8;
extern VTBL_ENTRY _ZTI8S19914C8[];
extern  VTBL_ENTRY _ZTV8S19914C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19914C8[];
extern Class_Descriptor cd_S19914C2;
extern VTBL_ENTRY _ZTI8S19914C2[];
extern  VTBL_ENTRY _ZTV8S19914C2[];
extern Class_Descriptor cd_S19914C2;
extern VTBL_ENTRY _ZTI8S19914C2[];
extern  VTBL_ENTRY _ZTV8S19914C2[];
extern Class_Descriptor cd_S19914C3;
extern VTBL_ENTRY _ZTI8S19914C3[];
extern  VTBL_ENTRY _ZTV8S19914C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19914C3[];
extern Class_Descriptor cd_S19914C5;
extern VTBL_ENTRY _ZTI8S19914C5[];
extern  VTBL_ENTRY _ZTV8S19914C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19914C5[];
extern Class_Descriptor cd_S19914C7;
extern VTBL_ENTRY _ZTI8S19914C7[];
extern  VTBL_ENTRY _ZTV8S19914C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19914C7[];
extern Class_Descriptor cd_S19914C2;
extern VTBL_ENTRY _ZTI8S19914C2[];
extern  VTBL_ENTRY _ZTV8S19914C2[];
extern Class_Descriptor cd_S19914C3;
extern VTBL_ENTRY _ZTI8S19914C3[];
extern  VTBL_ENTRY _ZTV8S19914C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19914C3[];
extern Class_Descriptor cd_S19914C2;
extern VTBL_ENTRY _ZTI8S19914C2[];
extern  VTBL_ENTRY _ZTV8S19914C2[];
extern Class_Descriptor cd_S19914C9;
extern VTBL_ENTRY _ZTI8S19914C9[];
extern  VTBL_ENTRY _ZTV8S19914C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19914C9[];
static Base_Class bases_S19914C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19914C2,    ABISELECT(3376,2388), //bcp->offset
    21, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19914C2,    ABISELECT(3472,2440), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3490C4,    ABISELECT(3976,2800), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19914C3,    ABISELECT(3472,2440), //bcp->offset
    25, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19914C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    10, //immediately_derived
  0, 0},
  {&cd_S19914C2,    ABISELECT(96,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19914C3,    ABISELECT(96,52), //bcp->offset
    13, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19914C5,    ABISELECT(608,412), //bcp->offset
    17, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19914C5,    ABISELECT(4016,2824), //bcp->offset
    36, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S19914C8,    ABISELECT(3992,2816), //bcp->offset
    30, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19914C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S19914C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19914C8,    ABISELECT(4304,3056), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S19914C2,    ABISELECT(4320,3064), //bcp->offset
    -1, //bcp->virtual_function_table_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
    17, //immediately_derived
  0, 0},
  {&cd_S19914C2,    ABISELECT(4416,3116), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19914C3,    ABISELECT(4416,3116), //bcp->offset
    65, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19914C5,    ABISELECT(4928,3476), //bcp->offset
    69, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19914C7,    ABISELECT(4320,3064), //bcp->offset
    55, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S19914C2,    ABISELECT(7024,5004), //bcp->offset
    -1, //bcp->virtual_function_table_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
    19, //immediately_derived
  0, 0},
  {&cd_S19914C3,    ABISELECT(7024,5004), //bcp->offset
    73, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    53, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S19914C2,    ABISELECT(7536,5364), //bcp->offset
    77, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S19914C9,    ABISELECT(4304,3056), //bcp->offset
    41, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19914C1[];
extern void _ZN8S19914C22v1Ev();
extern void _ZN8S19914C1D1Ev();
extern void _ZN8S19914C1D0Ev();
extern void _ZN8S19914C62v3Ev();
extern void _ZN8S19914C62v4Ev();
extern void _ZN8S19914C22v1Ev();
extern void _ZN8S19914C52v2Ev();
extern void _ZN8S19914C22v1Ev();
extern void _ZN8S19914C22v1Ev();
extern void _ZN8S19914C52v2Ev();
extern void _ZN8S19914C92v5Ev();
extern void ABISELECT(_ZTv0_n72_N8S19914C1D1Ev,_ZTv0_n36_N8S19914C1D1Ev)();
extern void ABISELECT(_ZThn4304_N8S19914C1D1Ev,_ZThn3056_N8S19914C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S19914C1D0Ev,_ZTv0_n36_N8S19914C1D0Ev)();
extern void ABISELECT(_ZThn4304_N8S19914C1D0Ev,_ZThn3056_N8S19914C1D0Ev)() __attribute__((weak));
extern void _ZN8S19914C22v1Ev();
extern void ABISELECT(_ZTvn16_n72_N8S19914C1D1Ev,_ZTvn8_n36_N8S19914C1D1Ev)();
extern void ABISELECT(_ZTvn16_n72_N8S19914C1D0Ev,_ZTvn8_n36_N8S19914C1D0Ev)();
extern void _ZN8S19914C22v1Ev();
extern void _ZN8S19914C52v2Ev();
extern void _ZN8S19914C22v1Ev();
extern void _ZN8S19914C22v1Ev();
static  VTBL_ENTRY vtc_S19914C1[] = {
  ABISELECT(4304,3056),
  ABISELECT(4016,2824),
  ABISELECT(3472,2440),
  ABISELECT(3992,2816),
  ABISELECT(3376,2388),
  ABISELECT(3976,2800),
  0,
  (VTBL_ENTRY)&(_ZTI8S19914C1[0]),
  (VTBL_ENTRY)&_ZN8S19914C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19914C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19914C1D0Ev,
  (VTBL_ENTRY)&_ZN8S19914C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19914C62v4Ev,
  ABISELECT(3880,2748),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI8S19914C1[0]),
  (VTBL_ENTRY)&_ZN8S19914C22v1Ev,
  ABISELECT(2768,1976),
  ABISELECT(-608,-412),
  (VTBL_ENTRY)&(_ZTI8S19914C1[0]),
  (VTBL_ENTRY)&_ZN8S19914C52v2Ev,
  0,
  ABISELECT(-3376,-2388),
  (VTBL_ENTRY)&(_ZTI8S19914C1[0]),
  (VTBL_ENTRY)&_ZN8S19914C22v1Ev,
  0,
  ABISELECT(504,360),
  ABISELECT(-3472,-2440),
  (VTBL_ENTRY)&(_ZTI8S19914C1[0]),
  (VTBL_ENTRY)&_ZN8S19914C22v1Ev,
  ABISELECT(24,8),
  ABISELECT(-616,-428),
  ABISELECT(-520,-376),
  -16,
  ABISELECT(-3992,-2816),
  (VTBL_ENTRY)&(_ZTI8S19914C1[0]),
  0,
  ABISELECT(-640,-436),
  ABISELECT(-4016,-2824),
  (VTBL_ENTRY)&(_ZTI8S19914C1[0]),
  (VTBL_ENTRY)&_ZN8S19914C52v2Ev,
  ABISELECT(624,420),
  ABISELECT(16,8),
  ABISELECT(-4304,-3056),
  0,
  ABISELECT(-312,-240),
  ABISELECT(-288,-232),
  ABISELECT(-928,-668),
  ABISELECT(-832,-616),
  ABISELECT(-328,-256),
  ABISELECT(-4304,-3056),
  (VTBL_ENTRY)&(_ZTI8S19914C1[0]),
  (VTBL_ENTRY)&_ZN8S19914C92v5Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19914C1D1Ev,_ZTv0_n36_N8S19914C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19914C1D0Ev,_ZTv0_n36_N8S19914C1D0Ev),
  ABISELECT(-304,-240),
  ABISELECT(-848,-624),
  ABISELECT(-328,-248),
  ABISELECT(-944,-676),
  ABISELECT(-344,-264),
  ABISELECT(-4320,-3064),
  (VTBL_ENTRY)&(_ZTI8S19914C1[0]),
  (VTBL_ENTRY)&_ZN8S19914C22v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n72_N8S19914C1D1Ev,_ZTvn8_n36_N8S19914C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n72_N8S19914C1D0Ev,_ZTvn8_n36_N8S19914C1D0Ev),
  ABISELECT(-440,-316),
  ABISELECT(-4416,-3116),
  (VTBL_ENTRY)&(_ZTI8S19914C1[0]),
  (VTBL_ENTRY)&_ZN8S19914C22v1Ev,
  ABISELECT(-1552,-1088),
  ABISELECT(-4928,-3476),
  (VTBL_ENTRY)&(_ZTI8S19914C1[0]),
  (VTBL_ENTRY)&_ZN8S19914C52v2Ev,
  ABISELECT(-3048,-2204),
  ABISELECT(-7024,-5004),
  (VTBL_ENTRY)&(_ZTI8S19914C1[0]),
  (VTBL_ENTRY)&_ZN8S19914C22v1Ev,
  ABISELECT(-7536,-5364),
  (VTBL_ENTRY)&(_ZTI8S19914C1[0]),
  (VTBL_ENTRY)&_ZN8S19914C22v1Ev,
};
extern VTBL_ENTRY _ZTV8S19914C1[];
extern void _ZN8S19914C22v1Ev();
extern void _ZN8S19914C6D1Ev();
extern void _ZN8S19914C6D0Ev();
extern void _ZN8S19914C62v3Ev();
extern void _ZN8S19914C62v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19914C6__8S19914C1[] = {
  ABISELECT(4016,2824),
  ABISELECT(3472,2440),
  ABISELECT(3992,2816),
  ABISELECT(3376,2388),
  ABISELECT(3976,2800),
  0,
  (VTBL_ENTRY)&(_ZTI8S19914C6[0]),
  (VTBL_ENTRY)&_ZN8S19914C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19914C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19914C6D0Ev,
  (VTBL_ENTRY)&_ZN8S19914C62v3Ev,
  (VTBL_ENTRY)&_ZN8S19914C62v4Ev,
};
extern void _ZN8S19914C22v1Ev();
extern void _ZN8S19914C7D1Ev();
extern void _ZN8S19914C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19914C78S19914C6__8S19914C1[] = {
  ABISELECT(4016,2824),
  ABISELECT(3472,2440),
  ABISELECT(3992,2816),
  ABISELECT(3376,2388),
  ABISELECT(3976,2800),
  0,
  (VTBL_ENTRY)&(_ZTI8S19914C7[0]),
  (VTBL_ENTRY)&_ZN8S19914C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19914C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19914C7D0Ev,
};
extern void _ZN8S19914C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19914C38S19914C78S19914C6__A1__8S19914C1[] = {
  ABISELECT(3880,2748),
  0,
  (VTBL_ENTRY)&(_ZTI8S19914C3[0]),
  (VTBL_ENTRY)&_ZN8S19914C22v1Ev,
};
extern void _ZN8S19914C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19914C58S19914C78S19914C6__8S19914C1[] = {
  ABISELECT(2768,1976),
  0,
  (VTBL_ENTRY)&(_ZTI8S19914C5[0]),
  (VTBL_ENTRY)&_ZN8S19914C52v2Ev,
};
extern void _ZN8S19914C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19914C2__8S19914C58S19914C78S19914C6__8S19914C1[] = {
  0,
  ABISELECT(-2768,-1976),
  (VTBL_ENTRY)&(_ZTI8S19914C5[0]),
  (VTBL_ENTRY)&_ZN8S19914C22v1Ev,
};
extern void _ZN8S19914C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19914C3__A__8S19914C78S19914C6__8S19914C1[] = {
  ABISELECT(3880,2748),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI8S19914C7[0]),
  (VTBL_ENTRY)&_ZN8S19914C22v1Ev,
};
extern void _ZN8S19914C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19914C5__A__8S19914C78S19914C6__8S19914C1[] = {
  ABISELECT(2768,1976),
  ABISELECT(-608,-412),
  (VTBL_ENTRY)&(_ZTI8S19914C7[0]),
  (VTBL_ENTRY)&_ZN8S19914C52v2Ev,
};
extern void _ZN8S19914C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19914C2__A2__8S19914C78S19914C6__8S19914C1[] = {
  0,
  ABISELECT(-3376,-2388),
  (VTBL_ENTRY)&(_ZTI8S19914C7[0]),
  (VTBL_ENTRY)&_ZN8S19914C22v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19914C8__8S19914C78S19914C6__8S19914C1[] = {
  ABISELECT(24,8),
  ABISELECT(-616,-428),
  ABISELECT(-520,-376),
  -16,
  ABISELECT(-3992,-2816),
  (VTBL_ENTRY)&(_ZTI8S19914C7[0]),
};
extern void _ZN8S19914C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19914C3__A1__8S19914C78S19914C6__8S19914C1[] = {
  0,
  ABISELECT(504,360),
  ABISELECT(-3472,-2440),
  (VTBL_ENTRY)&(_ZTI8S19914C7[0]),
  (VTBL_ENTRY)&_ZN8S19914C22v1Ev,
};
extern void _ZN8S19914C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19914C5__A1__8S19914C78S19914C6__8S19914C1[] = {
  0,
  ABISELECT(-640,-436),
  ABISELECT(-4016,-2824),
  (VTBL_ENTRY)&(_ZTI8S19914C7[0]),
  (VTBL_ENTRY)&_ZN8S19914C52v2Ev,
};
extern void _ZN8S19914C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19914C38S19914C7__8S19914C6__8S19914C1[] = {
  ABISELECT(3880,2748),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI8S19914C6[0]),
  (VTBL_ENTRY)&_ZN8S19914C22v1Ev,
};
extern void _ZN8S19914C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19914C58S19914C7__8S19914C6__8S19914C1[] = {
  ABISELECT(2768,1976),
  ABISELECT(-608,-412),
  (VTBL_ENTRY)&(_ZTI8S19914C6[0]),
  (VTBL_ENTRY)&_ZN8S19914C52v2Ev,
};
extern void _ZN8S19914C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19914C2__A2__8S19914C6__8S19914C1[] = {
  0,
  ABISELECT(-3376,-2388),
  (VTBL_ENTRY)&(_ZTI8S19914C6[0]),
  (VTBL_ENTRY)&_ZN8S19914C22v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19914C8__8S19914C6__8S19914C1[] = {
  ABISELECT(24,8),
  ABISELECT(-616,-428),
  ABISELECT(-520,-376),
  -16,
  ABISELECT(-3992,-2816),
  (VTBL_ENTRY)&(_ZTI8S19914C6[0]),
};
extern void _ZN8S19914C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19914C3__A1__8S19914C6__8S19914C1[] = {
  0,
  ABISELECT(504,360),
  ABISELECT(-3472,-2440),
  (VTBL_ENTRY)&(_ZTI8S19914C6[0]),
  (VTBL_ENTRY)&_ZN8S19914C22v1Ev,
};
extern void _ZN8S19914C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19914C5__A1__8S19914C6__8S19914C1[] = {
  0,
  ABISELECT(-640,-436),
  ABISELECT(-4016,-2824),
  (VTBL_ENTRY)&(_ZTI8S19914C6[0]),
  (VTBL_ENTRY)&_ZN8S19914C52v2Ev,
};
extern void _ZN8S19914C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19914C3__8S19914C1[] = {
  ABISELECT(504,360),
  0,
  (VTBL_ENTRY)&(_ZTI8S19914C3[0]),
  (VTBL_ENTRY)&_ZN8S19914C22v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19914C8__8S19914C1[] = {
  ABISELECT(24,8),
  ABISELECT(-616,-428),
  ABISELECT(-520,-376),
  -16,
  0,
  (VTBL_ENTRY)&(_ZTI8S19914C8[0]),
};
extern void _ZN8S19914C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19914C3__8S19914C8__8S19914C1[] = {
  0,
  ABISELECT(504,360),
  ABISELECT(520,376),
  (VTBL_ENTRY)&(_ZTI8S19914C8[0]),
  (VTBL_ENTRY)&_ZN8S19914C22v1Ev,
};
extern void _ZN8S19914C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19914C2__A1__8S19914C8__8S19914C1[] = {
  0,
  ABISELECT(616,428),
  (VTBL_ENTRY)&(_ZTI8S19914C8[0]),
  (VTBL_ENTRY)&_ZN8S19914C22v1Ev,
};
extern void _ZN8S19914C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19914C5__8S19914C8__8S19914C1[] = {
  0,
  ABISELECT(-640,-436),
  ABISELECT(-24,-8),
  (VTBL_ENTRY)&(_ZTI8S19914C8[0]),
  (VTBL_ENTRY)&_ZN8S19914C52v2Ev,
};
extern void _ZN8S19914C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19914C5__A1__8S19914C1[] = {
  ABISELECT(-640,-436),
  0,
  (VTBL_ENTRY)&(_ZTI8S19914C5[0]),
  (VTBL_ENTRY)&_ZN8S19914C52v2Ev,
};
extern void _ZN8S19914C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19914C2__8S19914C5__A1__8S19914C1[] = {
  0,
  ABISELECT(640,436),
  (VTBL_ENTRY)&(_ZTI8S19914C5[0]),
  (VTBL_ENTRY)&_ZN8S19914C22v1Ev,
};
extern void _ZN8S19914C92v5Ev();
extern void _ZN8S19914C9D1Ev();
extern void _ZN8S19914C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19914C9__8S19914C1[] = {
  ABISELECT(-312,-240),
  ABISELECT(-288,-232),
  ABISELECT(-928,-668),
  ABISELECT(-832,-616),
  ABISELECT(-328,-256),
  0,
  (VTBL_ENTRY)&(_ZTI8S19914C9[0]),
  (VTBL_ENTRY)&_ZN8S19914C92v5Ev,
  (VTBL_ENTRY)&_ZN8S19914C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19914C9D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19914C88S19914C9__A1__8S19914C1[] = {
  ABISELECT(-288,-232),
  ABISELECT(-928,-668),
  ABISELECT(-832,-616),
  ABISELECT(-328,-256),
  0,
  (VTBL_ENTRY)&(_ZTI8S19914C8[0]),
};
extern void _ZN8S19914C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19914C3__8S19914C88S19914C9__A1__8S19914C1[] = {
  0,
  ABISELECT(504,360),
  ABISELECT(832,616),
  (VTBL_ENTRY)&(_ZTI8S19914C8[0]),
  (VTBL_ENTRY)&_ZN8S19914C22v1Ev,
};
extern void _ZN8S19914C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19914C2__A1__8S19914C88S19914C9__A1__8S19914C1[] = {
  0,
  ABISELECT(928,668),
  (VTBL_ENTRY)&(_ZTI8S19914C8[0]),
  (VTBL_ENTRY)&_ZN8S19914C22v1Ev,
};
extern void _ZN8S19914C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19914C5__8S19914C88S19914C9__A1__8S19914C1[] = {
  0,
  ABISELECT(-640,-436),
  ABISELECT(288,232),
  (VTBL_ENTRY)&(_ZTI8S19914C8[0]),
  (VTBL_ENTRY)&_ZN8S19914C52v2Ev,
};
extern void _ZN8S19914C22v1Ev();
extern void _ZN8S19914C7D1Ev();
extern void _ZN8S19914C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19914C78S19914C9__A1__8S19914C1[] = {
  ABISELECT(-304,-240),
  ABISELECT(-848,-624),
  ABISELECT(-328,-248),
  ABISELECT(-944,-676),
  ABISELECT(-344,-264),
  0,
  (VTBL_ENTRY)&(_ZTI8S19914C7[0]),
  (VTBL_ENTRY)&_ZN8S19914C22v1Ev,
  (VTBL_ENTRY)&_ZN8S19914C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19914C7D0Ev,
};
extern void _ZN8S19914C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19914C38S19914C78S19914C9__A2__8S19914C1[] = {
  ABISELECT(-440,-316),
  0,
  (VTBL_ENTRY)&(_ZTI8S19914C3[0]),
  (VTBL_ENTRY)&_ZN8S19914C22v1Ev,
};
extern void _ZN8S19914C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19914C58S19914C78S19914C9__A2__8S19914C1[] = {
  ABISELECT(-1552,-1088),
  0,
  (VTBL_ENTRY)&(_ZTI8S19914C5[0]),
  (VTBL_ENTRY)&_ZN8S19914C52v2Ev,
};
extern void _ZN8S19914C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19914C2__8S19914C58S19914C78S19914C9__A2__8S19914C1[] = {
  0,
  ABISELECT(1552,1088),
  (VTBL_ENTRY)&(_ZTI8S19914C5[0]),
  (VTBL_ENTRY)&_ZN8S19914C22v1Ev,
};
extern void _ZN8S19914C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19914C3__A__8S19914C78S19914C9__A1__8S19914C1[] = {
  ABISELECT(-440,-316),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI8S19914C7[0]),
  (VTBL_ENTRY)&_ZN8S19914C22v1Ev,
};
extern void _ZN8S19914C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19914C5__A__8S19914C78S19914C9__A1__8S19914C1[] = {
  ABISELECT(-1552,-1088),
  ABISELECT(-608,-412),
  (VTBL_ENTRY)&(_ZTI8S19914C7[0]),
  (VTBL_ENTRY)&_ZN8S19914C52v2Ev,
};
extern void _ZN8S19914C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19914C2__A2__8S19914C78S19914C9__A1__8S19914C1[] = {
  0,
  ABISELECT(944,676),
  (VTBL_ENTRY)&(_ZTI8S19914C7[0]),
  (VTBL_ENTRY)&_ZN8S19914C22v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19914C8__8S19914C78S19914C9__A1__8S19914C1[] = {
  ABISELECT(24,8),
  ABISELECT(-616,-428),
  ABISELECT(-520,-376),
  -16,
  ABISELECT(328,248),
  (VTBL_ENTRY)&(_ZTI8S19914C7[0]),
};
extern void _ZN8S19914C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19914C3__A1__8S19914C78S19914C9__A1__8S19914C1[] = {
  0,
  ABISELECT(504,360),
  ABISELECT(848,624),
  (VTBL_ENTRY)&(_ZTI8S19914C7[0]),
  (VTBL_ENTRY)&_ZN8S19914C22v1Ev,
};
extern void _ZN8S19914C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19914C5__A1__8S19914C78S19914C9__A1__8S19914C1[] = {
  0,
  ABISELECT(-640,-436),
  ABISELECT(304,240),
  (VTBL_ENTRY)&(_ZTI8S19914C7[0]),
  (VTBL_ENTRY)&_ZN8S19914C52v2Ev,
};
extern void _ZN8S19914C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19914C38S19914C9__A3__8S19914C1[] = {
  ABISELECT(-3048,-2204),
  0,
  (VTBL_ENTRY)&(_ZTI8S19914C3[0]),
  (VTBL_ENTRY)&_ZN8S19914C22v1Ev,
};
extern void _ZN8S19914C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19914C3__8S19914C9__8S19914C1[] = {
  0,
  ABISELECT(504,360),
  ABISELECT(832,616),
  (VTBL_ENTRY)&(_ZTI8S19914C9[0]),
  (VTBL_ENTRY)&_ZN8S19914C22v1Ev,
};
extern void _ZN8S19914C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19914C2__A1__8S19914C9__8S19914C1[] = {
  0,
  ABISELECT(928,668),
  (VTBL_ENTRY)&(_ZTI8S19914C9[0]),
  (VTBL_ENTRY)&_ZN8S19914C22v1Ev,
};
extern void _ZN8S19914C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19914C5__8S19914C9__8S19914C1[] = {
  0,
  ABISELECT(-640,-436),
  ABISELECT(288,232),
  (VTBL_ENTRY)&(_ZTI8S19914C9[0]),
  (VTBL_ENTRY)&_ZN8S19914C52v2Ev,
};
extern void _ZN8S19914C22v1Ev();
extern void ABISELECT(_ZThn16_N8S19914C9D1Ev,_ZThn8_N8S19914C9D1Ev)();
extern void ABISELECT(_ZThn16_N8S19914C9D0Ev,_ZThn8_N8S19914C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19914C7__8S19914C9__8S19914C1[] = {
  ABISELECT(-304,-240),
  ABISELECT(-848,-624),
  ABISELECT(-328,-248),
  ABISELECT(-944,-676),
  ABISELECT(-344,-264),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19914C9[0]),
  (VTBL_ENTRY)&_ZN8S19914C22v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S19914C9D1Ev,_ZThn8_N8S19914C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S19914C9D0Ev,_ZThn8_N8S19914C9D0Ev),
};
extern void _ZN8S19914C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19914C38S19914C7__A1__8S19914C9__8S19914C1[] = {
  ABISELECT(-440,-316),
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI8S19914C9[0]),
  (VTBL_ENTRY)&_ZN8S19914C22v1Ev,
};
extern void _ZN8S19914C52v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19914C58S19914C7__A1__8S19914C9__8S19914C1[] = {
  ABISELECT(-1552,-1088),
  ABISELECT(-624,-420),
  (VTBL_ENTRY)&(_ZTI8S19914C9[0]),
  (VTBL_ENTRY)&_ZN8S19914C52v2Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19914C8__A1__8S19914C9__8S19914C1[] = {
  ABISELECT(24,8),
  ABISELECT(-616,-428),
  ABISELECT(-520,-376),
  -16,
  ABISELECT(312,240),
  (VTBL_ENTRY)&(_ZTI8S19914C9[0]),
};
extern void _ZN8S19914C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19914C3__A__8S19914C9__8S19914C1[] = {
  ABISELECT(-3048,-2204),
  ABISELECT(-2720,-1948),
  (VTBL_ENTRY)&(_ZTI8S19914C9[0]),
  (VTBL_ENTRY)&_ZN8S19914C22v1Ev,
};
static  VTT_ENTRY vtt_S19914C1[] = {
  {&(_ZTV8S19914C1[8]),  8,80},
  {&(_tg__ZTV8S19914C6__8S19914C1[7]),  7,12},
  {&(_tg__ZTV8S19914C78S19914C6__8S19914C1[7]),  7,10},
  {&(_tg__ZTV8S19914C38S19914C78S19914C6__A1__8S19914C1[3]),  3,4},
  {&(_tg__ZTV8S19914C58S19914C78S19914C6__8S19914C1[3]),  3,4},
  {&(_tg__ZTV8S19914C2__8S19914C58S19914C78S19914C6__8S19914C1[3]),  3,4},
  {&(_tg__ZTV8S19914C3__A__8S19914C78S19914C6__8S19914C1[3]),  3,4},
  {&(_tg__ZTV8S19914C5__A__8S19914C78S19914C6__8S19914C1[3]),  3,4},
  {&(_tg__ZTV8S19914C2__A2__8S19914C78S19914C6__8S19914C1[3]),  3,4},
  {&(_tg__ZTV8S19914C8__8S19914C78S19914C6__8S19914C1[6]),  6,6},
  {&(_tg__ZTV8S19914C3__A1__8S19914C78S19914C6__8S19914C1[4]),  4,5},
  {&(_tg__ZTV8S19914C5__A1__8S19914C78S19914C6__8S19914C1[4]),  4,5},
  {&(_tg__ZTV8S19914C38S19914C7__8S19914C6__8S19914C1[3]),  3,4},
  {&(_tg__ZTV8S19914C58S19914C7__8S19914C6__8S19914C1[3]),  3,4},
  {&(_tg__ZTV8S19914C2__A2__8S19914C6__8S19914C1[3]),  3,4},
  {&(_tg__ZTV8S19914C8__8S19914C6__8S19914C1[6]),  6,6},
  {&(_tg__ZTV8S19914C3__A1__8S19914C6__8S19914C1[4]),  4,5},
  {&(_tg__ZTV8S19914C5__A1__8S19914C6__8S19914C1[4]),  4,5},
  {&(_ZTV8S19914C1[24]),  24,80},
  {&(_ZTV8S19914C1[29]),  29,80},
  {&(_ZTV8S19914C1[16]),  16,80},
  {&(_ZTV8S19914C1[20]),  20,80},
  {&(_ZTV8S19914C1[36]),  36,80},
  {&(_ZTV8S19914C1[40]),  40,80},
  {&(_ZTV8S19914C1[52]),  52,80},
  {&(_ZTV8S19914C1[62]),  62,80},
  {&(_ZTV8S19914C1[68]),  68,80},
  {&(_ZTV8S19914C1[72]),  72,80},
  {&(_ZTV8S19914C1[76]),  76,80},
  {&(_ZTV8S19914C1[79]),  79,80},
  {&(_tg__ZTV8S19914C3__8S19914C1[3]),  3,4},
  {&(_tg__ZTV8S19914C8__8S19914C1[6]),  6,6},
  {&(_tg__ZTV8S19914C3__8S19914C8__8S19914C1[4]),  4,5},
  {&(_tg__ZTV8S19914C2__A1__8S19914C8__8S19914C1[3]),  3,4},
  {&(_tg__ZTV8S19914C5__8S19914C8__8S19914C1[4]),  4,5},
  {&(_tg__ZTV8S19914C5__A1__8S19914C1[3]),  3,4},
  {&(_tg__ZTV8S19914C2__8S19914C5__A1__8S19914C1[3]),  3,4},
  {&(_tg__ZTV8S19914C9__8S19914C1[7]),  7,10},
  {&(_tg__ZTV8S19914C88S19914C9__A1__8S19914C1[6]),  6,6},
  {&(_tg__ZTV8S19914C3__8S19914C88S19914C9__A1__8S19914C1[4]),  4,5},
  {&(_tg__ZTV8S19914C2__A1__8S19914C88S19914C9__A1__8S19914C1[3]),  3,4},
  {&(_tg__ZTV8S19914C5__8S19914C88S19914C9__A1__8S19914C1[4]),  4,5},
  {&(_tg__ZTV8S19914C78S19914C9__A1__8S19914C1[7]),  7,10},
  {&(_tg__ZTV8S19914C38S19914C78S19914C9__A2__8S19914C1[3]),  3,4},
  {&(_tg__ZTV8S19914C58S19914C78S19914C9__A2__8S19914C1[3]),  3,4},
  {&(_tg__ZTV8S19914C2__8S19914C58S19914C78S19914C9__A2__8S19914C1[3]),  3,4},
  {&(_tg__ZTV8S19914C3__A__8S19914C78S19914C9__A1__8S19914C1[3]),  3,4},
  {&(_tg__ZTV8S19914C5__A__8S19914C78S19914C9__A1__8S19914C1[3]),  3,4},
  {&(_tg__ZTV8S19914C2__A2__8S19914C78S19914C9__A1__8S19914C1[3]),  3,4},
  {&(_tg__ZTV8S19914C8__8S19914C78S19914C9__A1__8S19914C1[6]),  6,6},
  {&(_tg__ZTV8S19914C3__A1__8S19914C78S19914C9__A1__8S19914C1[4]),  4,5},
  {&(_tg__ZTV8S19914C5__A1__8S19914C78S19914C9__A1__8S19914C1[4]),  4,5},
  {&(_tg__ZTV8S19914C38S19914C9__A3__8S19914C1[3]),  3,4},
  {&(_tg__ZTV8S19914C3__8S19914C9__8S19914C1[4]),  4,5},
  {&(_tg__ZTV8S19914C2__A1__8S19914C9__8S19914C1[3]),  3,4},
  {&(_tg__ZTV8S19914C5__8S19914C9__8S19914C1[4]),  4,5},
  {&(_tg__ZTV8S19914C7__8S19914C9__8S19914C1[7]),  7,10},
  {&(_tg__ZTV8S19914C38S19914C7__A1__8S19914C9__8S19914C1[3]),  3,4},
  {&(_tg__ZTV8S19914C58S19914C7__A1__8S19914C9__8S19914C1[3]),  3,4},
  {&(_tg__ZTV8S19914C8__A1__8S19914C9__8S19914C1[6]),  6,6},
  {&(_tg__ZTV8S19914C3__A__8S19914C9__8S19914C1[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S19914C1[];
extern  VTBL_ENTRY _ZTV8S19914C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19914C1[];
static VTBL_ENTRY alt_thunk_names12[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19914C1D0Ev,_ZTv0_n36_N8S19914C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4304_N8S19914C1D0Ev,_ZThn3056_N8S19914C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19914C1D1Ev,_ZTv0_n36_N8S19914C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4304_N8S19914C1D1Ev,_ZThn3056_N8S19914C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19914C1 = {  "S19914C1", // class name
  bases_S19914C1, 22,
  &(vtc_S19914C1[0]), // expected_vtbl_contents
  &(vtt_S19914C1[0]), // expected_vtt_contents
  ABISELECT(8944,6320), // object size
  NSPAIRA(_ZTI8S19914C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19914C1),80, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19914C1),61, //virtual table table var
  21, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names12,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7539C3  {
  long double s7539c3f0;
  int s7539c3f1:3;
  char s7539c3f2:8;
  long double s7539c3f3[2];
  __tsi64 s7539c3f4;
  virtual void  v2(); // _ZN7S7539C32v2Ev
  ~S7539C3(); // tgen
  S7539C3(); // tgen
};
//SIG(-1 S7539C3) C1{ v1 FD Fi:3 Fc:8 FD[2] FL}


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

static void Test_S7539C3()
{
  extern Class_Descriptor cd_S7539C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7,14)];
    init_test(&cd_S7539C3, buf);
    S7539C3 *dp, &lv = *(dp=new (buf) S7539C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,52), "sizeof(S7539C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7539C3)");
    check_field_offset(lv, s7539c3f0, ABISELECT(16,4), "S7539C3.s7539c3f0");
    set_bf_and_test(lv, s7539c3f1, ABISELECT(32,16), 0, 3, 1, "S7539C3");
    set_bf_and_test(lv, s7539c3f1, ABISELECT(32,16), 0, 3, hide_sll(1LL<<2), "S7539C3");
    set_bf_and_test(lv, s7539c3f2, ABISELECT(33,17), 0, 8, 1, "S7539C3");
    set_bf_and_test(lv, s7539c3f2, ABISELECT(33,17), 0, 8, hide_sll(1LL<<7), "S7539C3");
    check_field_offset(lv, s7539c3f3, ABISELECT(48,20), "S7539C3.s7539c3f3");
    check_field_offset(lv, s7539c3f4, ABISELECT(80,44), "S7539C3.s7539c3f4");
    test_class_info(&lv, &cd_S7539C3);
    dp->~S7539C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7539C3(Test_S7539C3, "S7539C3", ABISELECT(96,52));

#else // __cplusplus

extern void _ZN7S7539C3C1Ev();
extern void _ZN7S7539C3D1Ev();
Name_Map name_map_S7539C3[] = {
  NSPAIR(_ZN7S7539C3C1Ev),
  NSPAIR(_ZN7S7539C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7539C3[];
extern void _ZN7S7539C32v2Ev();
static  VTBL_ENTRY vtc_S7539C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7539C3[0]),
  (VTBL_ENTRY)&_ZN7S7539C32v2Ev,
};
extern VTBL_ENTRY _ZTI7S7539C3[];
extern  VTBL_ENTRY _ZTV7S7539C3[];
Class_Descriptor cd_S7539C3 = {  "S7539C3", // class name
  0,0,//no base classes
  &(vtc_S7539C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,52), // object size
  NSPAIRA(_ZTI7S7539C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7539C3),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  S7539C2  : virtual S7539C3 {
  ::S3490C4 s7539c2f0;
  __tsi64 s7539c2f1;
  ::S3490C4 s7539c2f2[7];
  void *s7539c2f3;
  __tsi64 s7539c2f4;
  ::S3490C4 s7539c2f5;
  void *s7539c2f6;
  char s7539c2f7;
  short s7539c2f8;
  int s7539c2f9;
  ::S7539C3 s7539c2f10;
  virtual void  v3(); // _ZN7S7539C22v3Ev
  ~S7539C2(); // tgen
  S7539C2(); // tgen
};
//SIG(-1 S7539C2) C1{ VBC2{ v2 FD Fi:3 Fc:8 FD[2] FL} v1 FC3{ m FL Fi Fc} FL FC3[7] Fp FL FC3 Fp Fc Fs Fi FC2}


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

static void Test_S7539C2()
{
  extern Class_Descriptor cd_S7539C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(25,72)];
    init_test(&cd_S7539C2, buf);
    S7539C2 *dp, &lv = *(dp=new (buf) S7539C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(384,284), "sizeof(S7539C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7539C2)");
    check_base_class_offset(lv, (S7539C3*), ABISELECT(288,232), "S7539C2");
    check_field_offset(lv, s7539c2f0, ABISELECT(8,4), "S7539C2.s7539c2f0");
    check_field_offset(lv, s7539c2f1, ABISELECT(24,20), "S7539C2.s7539c2f1");
    check_field_offset(lv, s7539c2f2, ABISELECT(32,28), "S7539C2.s7539c2f2");
    check_field_offset(lv, s7539c2f3, ABISELECT(144,140), "S7539C2.s7539c2f3");
    check_field_offset(lv, s7539c2f4, ABISELECT(152,144), "S7539C2.s7539c2f4");
    check_field_offset(lv, s7539c2f5, ABISELECT(160,152), "S7539C2.s7539c2f5");
    check_field_offset(lv, s7539c2f6, ABISELECT(176,168), "S7539C2.s7539c2f6");
    check_field_offset(lv, s7539c2f7, ABISELECT(184,172), "S7539C2.s7539c2f7");
    check_field_offset(lv, s7539c2f8, ABISELECT(186,174), "S7539C2.s7539c2f8");
    check_field_offset(lv, s7539c2f9, ABISELECT(188,176), "S7539C2.s7539c2f9");
    check_field_offset(lv, s7539c2f10, ABISELECT(192,180), "S7539C2.s7539c2f10");
    test_class_info(&lv, &cd_S7539C2);
    dp->~S7539C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7539C2(Test_S7539C2, "S7539C2", ABISELECT(384,284));

#else // __cplusplus

extern void _ZN7S7539C2C1Ev();
extern void _ZN7S7539C2D1Ev();
Name_Map name_map_S7539C2[] = {
  NSPAIR(_ZN7S7539C2C1Ev),
  NSPAIR(_ZN7S7539C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7539C3;
extern VTBL_ENTRY _ZTI7S7539C3[];
extern  VTBL_ENTRY _ZTV7S7539C3[];
static Base_Class bases_S7539C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7539C3,    ABISELECT(288,232), //bcp->offset
    4, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7539C2[];
extern void _ZN7S7539C22v3Ev();
extern void _ZN7S7539C32v2Ev();
static  VTBL_ENTRY vtc_S7539C2[] = {
  ABISELECT(288,232),
  0,
  (VTBL_ENTRY)&(_ZTI7S7539C2[0]),
  (VTBL_ENTRY)&_ZN7S7539C22v3Ev,
  0,
  ABISELECT(-288,-232),
  (VTBL_ENTRY)&(_ZTI7S7539C2[0]),
  (VTBL_ENTRY)&_ZN7S7539C32v2Ev,
};
extern VTBL_ENTRY _ZTV7S7539C2[];
static  VTT_ENTRY vtt_S7539C2[] = {
  {&(_ZTV7S7539C2[3]),  3,8},
  {&(_ZTV7S7539C2[7]),  7,8},
};
extern VTBL_ENTRY _ZTI7S7539C2[];
extern  VTBL_ENTRY _ZTV7S7539C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7539C2[];
Class_Descriptor cd_S7539C2 = {  "S7539C2", // class name
  bases_S7539C2, 1,
  &(vtc_S7539C2[0]), // expected_vtbl_contents
  &(vtt_S7539C2[0]), // expected_vtt_contents
  ABISELECT(384,284), // object size
  NSPAIRA(_ZTI7S7539C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7539C2),8, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7539C2),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  S7539C6  : S7539C3 , virtual S3490C4 {
  char s7539c6f0[10];
  int s7539c6f1;
  ::S7539C2 s7539c6f2;
  __tsi64 s7539c6f3;
  ~S7539C6(); // tgen
  S7539C6(); // tgen
};
//SIG(-1 S7539C6) C1{ BC2{ v1 FD Fi:3 Fc:8 FD[2] FL} VBC3{ m FL Fi Fc} Fc[10] Fi FC4{ VBC2 v2 FC3 FL FC3[7] Fp FL FC3 Fp Fc Fs Fi FC2} FL}


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

static void Test_S7539C6()
{
  extern Class_Descriptor cd_S7539C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(34,95)];
    init_test(&cd_S7539C6, buf);
    S7539C6 *dp, &lv = *(dp=new (buf) S7539C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(528,376), "sizeof(S7539C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7539C6)");
    check_base_class_offset(lv, (S7539C3*), 0, "S7539C6");
    check_base_class_offset(lv, (S3490C4*), ABISELECT(504,360), "S7539C6");
    check_field_offset(lv, s7539c6f0, ABISELECT(88,52), "S7539C6.s7539c6f0");
    check_field_offset(lv, s7539c6f1, ABISELECT(100,64), "S7539C6.s7539c6f1");
    check_field_offset(lv, s7539c6f2, ABISELECT(112,68), "S7539C6.s7539c6f2");
    check_field_offset(lv, s7539c6f3, ABISELECT(496,352), "S7539C6.s7539c6f3");
    test_class_info(&lv, &cd_S7539C6);
    dp->~S7539C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7539C6(Test_S7539C6, "S7539C6", ABISELECT(528,376));

#else // __cplusplus

extern void _ZN7S7539C6C1Ev();
extern void _ZN7S7539C6D1Ev();
Name_Map name_map_S7539C6[] = {
  NSPAIR(_ZN7S7539C6C1Ev),
  NSPAIR(_ZN7S7539C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7539C3;
extern VTBL_ENTRY _ZTI7S7539C3[];
extern  VTBL_ENTRY _ZTV7S7539C3[];
extern Class_Descriptor cd_S3490C4;
extern VTBL_ENTRY _ZTI7S3490C4[];
static Base_Class bases_S7539C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7539C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S3490C4,    ABISELECT(504,360), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S7539C6[];
extern void _ZN7S7539C32v2Ev();
static  VTBL_ENTRY vtc_S7539C6[] = {
  ABISELECT(504,360),
  0,
  (VTBL_ENTRY)&(_ZTI7S7539C6[0]),
  (VTBL_ENTRY)&_ZN7S7539C32v2Ev,
};
extern VTBL_ENTRY _ZTV7S7539C6[];
static  VTT_ENTRY vtt_S7539C6[] = {
  {&(_ZTV7S7539C6[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S7539C6[];
extern  VTBL_ENTRY _ZTV7S7539C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7539C6[];
Class_Descriptor cd_S7539C6 = {  "S7539C6", // class name
  bases_S7539C6, 2,
  &(vtc_S7539C6[0]), // expected_vtbl_contents
  &(vtt_S7539C6[0]), // expected_vtt_contents
  ABISELECT(528,376), // object size
  NSPAIRA(_ZTI7S7539C6),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7539C6),4, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7539C6),1, //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  S7539C8  : virtual S3490C4 , virtual S7539C6 , virtual S7539C3 , virtual S7539C2 {
  void *s7539c8f0;
  ~S7539C8(); // tgen
  S7539C8(); // tgen
};
//SIG(-1 S7539C8) C1{ VBC2{ m FL Fi Fc} VBC3{ BC4{ v1 FD Fi:3 Fc:8 FD[2] FL} VBC2 Fc[10] Fi FC5{ VBC4 v2 FC2 FL FC2[7] Fp FL FC2 Fp Fc Fs Fi FC4} FL} VBC4 VBC5 Fp}


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

static void Test_S7539C8()
{
  extern Class_Descriptor cd_S7539C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(59,168)];
    init_test(&cd_S7539C8, buf);
    S7539C8 *dp, &lv = *(dp=new (buf) S7539C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(928,668), "sizeof(S7539C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7539C8)");
    check_base_class_offset(lv, (S3490C4*), ABISELECT(16,8), "S7539C8");
    check_base_class_offset(lv, (S3490C4*)(S7539C6*), ABISELECT(16,8), "S7539C8");
    check_base_class_offset(lv, (S7539C3*)(S7539C6*), ABISELECT(32,24), "S7539C8");
    check_base_class_offset(lv, (S7539C6*), ABISELECT(32,24), "S7539C8");
    /*is_ambiguous_... S7539C8::S7539C3 */ AMB_check_base_class_offset(lv, (S7539C3*), ABISELECT(544,384), "S7539C8");
    check_base_class_offset(lv, (S7539C3*)(S7539C2*), ABISELECT(544,384), "S7539C8");
    check_base_class_offset(lv, (S7539C2*), ABISELECT(640,436), "S7539C8");
    check_field_offset(lv, s7539c8f0, ABISELECT(8,4), "S7539C8.s7539c8f0");
    test_class_info(&lv, &cd_S7539C8);
    dp->~S7539C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7539C8(Test_S7539C8, "S7539C8", ABISELECT(928,668));

#else // __cplusplus

extern void _ZN7S7539C8C1Ev();
extern void _ZN7S7539C8D1Ev();
Name_Map name_map_S7539C8[] = {
  NSPAIR(_ZN7S7539C8C1Ev),
  NSPAIR(_ZN7S7539C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3490C4;
extern VTBL_ENTRY _ZTI7S3490C4[];
extern Class_Descriptor cd_S7539C3;
extern VTBL_ENTRY _ZTI7S7539C3[];
extern  VTBL_ENTRY _ZTV7S7539C3[];
extern Class_Descriptor cd_S7539C6;
extern VTBL_ENTRY _ZTI7S7539C6[];
extern  VTBL_ENTRY _ZTV7S7539C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7539C6[];
extern Class_Descriptor cd_S7539C3;
extern VTBL_ENTRY _ZTI7S7539C3[];
extern  VTBL_ENTRY _ZTV7S7539C3[];
extern Class_Descriptor cd_S7539C2;
extern VTBL_ENTRY _ZTI7S7539C2[];
extern  VTBL_ENTRY _ZTV7S7539C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7539C2[];
static Base_Class bases_S7539C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3490C4,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7539C3,    ABISELECT(32,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7539C6,    ABISELECT(32,24), //bcp->offset
    6, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7539C3,    ABISELECT(544,384), //bcp->offset
    11, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7539C2,    ABISELECT(640,436), //bcp->offset
    15, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7539C8[];
extern void _ZN7S7539C32v2Ev();
extern void _ZN7S7539C32v2Ev();
extern void _ZN7S7539C22v3Ev();
static  VTBL_ENTRY vtc_S7539C8[] = {
  ABISELECT(640,436),
  ABISELECT(544,384),
  ABISELECT(32,24),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7539C8[0]),
  0,
  -16,
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI7S7539C8[0]),
  (VTBL_ENTRY)&_ZN7S7539C32v2Ev,
  0,
  ABISELECT(-544,-384),
  (VTBL_ENTRY)&(_ZTI7S7539C8[0]),
  (VTBL_ENTRY)&_ZN7S7539C32v2Ev,
  0,
  ABISELECT(-96,-52),
  ABISELECT(-640,-436),
  (VTBL_ENTRY)&(_ZTI7S7539C8[0]),
  (VTBL_ENTRY)&_ZN7S7539C22v3Ev,
};
extern VTBL_ENTRY _ZTV7S7539C8[];
extern void _ZN7S7539C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7539C6__7S7539C8[] = {
  -16,
  0,
  (VTBL_ENTRY)&(_ZTI7S7539C6[0]),
  (VTBL_ENTRY)&_ZN7S7539C32v2Ev,
};
extern void _ZN7S7539C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7539C2__7S7539C8[] = {
  ABISELECT(-96,-52),
  0,
  (VTBL_ENTRY)&(_ZTI7S7539C2[0]),
  (VTBL_ENTRY)&_ZN7S7539C22v3Ev,
};
extern void _ZN7S7539C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7539C3__7S7539C2__7S7539C8[] = {
  0,
  ABISELECT(96,52),
  (VTBL_ENTRY)&(_ZTI7S7539C2[0]),
  (VTBL_ENTRY)&_ZN7S7539C32v2Ev,
};
static  VTT_ENTRY vtt_S7539C8[] = {
  {&(_ZTV7S7539C8[6]),  6,20},
  {&(_ZTV7S7539C8[10]),  10,20},
  {&(_ZTV7S7539C8[14]),  14,20},
  {&(_ZTV7S7539C8[19]),  19,20},
  {&(_tg__ZTV7S7539C6__7S7539C8[3]),  3,4},
  {&(_tg__ZTV7S7539C2__7S7539C8[3]),  3,4},
  {&(_tg__ZTV7S7539C3__7S7539C2__7S7539C8[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S7539C8[];
extern  VTBL_ENTRY _ZTV7S7539C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7539C8[];
Class_Descriptor cd_S7539C8 = {  "S7539C8", // class name
  bases_S7539C8, 5,
  &(vtc_S7539C8[0]), // expected_vtbl_contents
  &(vtt_S7539C8[0]), // expected_vtt_contents
  ABISELECT(928,668), // object size
  NSPAIRA(_ZTI7S7539C8),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S7539C8),20, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7539C8),7, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7539C9  : S7539C3 , virtual S3490C4 , S7539C6 , S7539C2 , virtual S7539C8 {
  ::S7539C2 s7539c9f0;
  ::S7539C8 s7539c9f1;
  void *s7539c9f2;
  int s7539c9f3;
  ::S7539C3 s7539c9f4;
  ::S7539C2 s7539c9f5;
  virtual  ~S7539C9(); // _ZN7S7539C9D2Ev
  S7539C9(); // tgen
};
//SIG(-1 S7539C9) C1{ BC2{ v1 FD Fi:3 Fc:8 FD[2] FL} VBC3{ m FL Fi Fc} BC4{ BC2 VBC3 Fc[10] Fi FC5{ VBC2 v2 FC3 FL FC3[7] Fp FL FC3 Fp Fc Fs Fi FC2} FL} BC5 VBC6{ VBC3 VBC4 VBC2 VBC5 Fp} vd FC5 FC6 Fp Fi FC2 FC5}


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

static void Test_S7539C9()
{
  extern Class_Descriptor cd_S7539C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(228,653)];
    init_test(&cd_S7539C9, buf);
    S7539C9 *dp, &lv = *(dp=new (buf) S7539C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(3632,2608), "sizeof(S7539C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7539C9)");
    /*is_ambiguous_... S7539C9::S7539C3 */ AMB_check_base_class_offset(lv, (S7539C3*), 0, "S7539C9");
    check_base_class_offset(lv, (S3490C4*), ABISELECT(2704,1940), "S7539C9");
    /*is_ambiguous_... S7539C9::S7539C6 */ AMB_check_base_class_offset(lv, (S3490C4*)(S7539C6*), ABISELECT(2704,1940), "S7539C9");
    check_base_class_offset(lv, (S3490C4*)(S7539C8*), ABISELECT(2704,1940), "S7539C9");
    /*is_ambiguous_... S7539C9::S7539C6 */ AMB_check_base_class_offset(lv, (S3490C4*)(S7539C6*), ABISELECT(2704,1940), "S7539C9");
    /*is_ambiguous_... S7539C9::S7539C6 */ AMB_check_base_class_offset(lv, (S7539C3*)(S7539C6*), ABISELECT(96,52), "S7539C9");
    /*is_ambiguous_... S7539C9::S7539C6 */ AMB_check_base_class_offset(lv, (S7539C6*), ABISELECT(96,52), "S7539C9");
    /*is_ambiguous_... S7539C9::S7539C2 */ AMB_check_base_class_offset(lv, (S7539C3*)(S7539C2*), ABISELECT(2720,1956), "S7539C9");
    /*is_ambiguous_... S7539C8::S7539C3 */ AMB_check_base_class_offset(lv, (S7539C3*)(S7539C8*), ABISELECT(2720,1956), "S7539C9");
    /*is_ambiguous_... S7539C9::S7539C2 */ AMB_check_base_class_offset(lv, (S7539C3*)(S7539C2*), ABISELECT(2720,1956), "S7539C9");
    /*is_ambiguous_... S7539C9::S7539C2 */ AMB_check_base_class_offset(lv, (S7539C2*), ABISELECT(608,412), "S7539C9");
    /*is_ambiguous_... S7539C9::S7539C6 */ AMB_check_base_class_offset(lv, (S7539C3*)(S7539C6*), ABISELECT(2832,2016), "S7539C9");
    check_base_class_offset(lv, (S7539C6*)(S7539C8*), ABISELECT(2832,2016), "S7539C9");
    check_base_class_offset(lv, (S7539C2*)(S7539C8*), ABISELECT(3344,2376), "S7539C9");
    check_base_class_offset(lv, (S7539C8*), ABISELECT(2808,2008), "S7539C9");
    check_field_offset(lv, s7539c9f0, ABISELECT(896,644), "S7539C9.s7539c9f0");
    check_field_offset(lv, s7539c9f1, ABISELECT(1280,928), "S7539C9.s7539c9f1");
    check_field_offset(lv, s7539c9f2, ABISELECT(2208,1596), "S7539C9.s7539c9f2");
    check_field_offset(lv, s7539c9f3, ABISELECT(2216,1600), "S7539C9.s7539c9f3");
    check_field_offset(lv, s7539c9f4, ABISELECT(2224,1604), "S7539C9.s7539c9f4");
    check_field_offset(lv, s7539c9f5, ABISELECT(2320,1656), "S7539C9.s7539c9f5");
    test_class_info(&lv, &cd_S7539C9);
    dp->~S7539C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7539C9(Test_S7539C9, "S7539C9", ABISELECT(3632,2608));

#else // __cplusplus

extern void _ZN7S7539C9C1Ev();
extern void _ZN7S7539C9D2Ev();
Name_Map name_map_S7539C9[] = {
  NSPAIR(_ZN7S7539C9C1Ev),
  NSPAIR(_ZN7S7539C9D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7539C3;
extern VTBL_ENTRY _ZTI7S7539C3[];
extern  VTBL_ENTRY _ZTV7S7539C3[];
extern Class_Descriptor cd_S3490C4;
extern VTBL_ENTRY _ZTI7S3490C4[];
extern Class_Descriptor cd_S7539C3;
extern VTBL_ENTRY _ZTI7S7539C3[];
extern  VTBL_ENTRY _ZTV7S7539C3[];
extern Class_Descriptor cd_S7539C6;
extern VTBL_ENTRY _ZTI7S7539C6[];
extern  VTBL_ENTRY _ZTV7S7539C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7539C6[];
extern Class_Descriptor cd_S7539C3;
extern VTBL_ENTRY _ZTI7S7539C3[];
extern  VTBL_ENTRY _ZTV7S7539C3[];
extern Class_Descriptor cd_S7539C2;
extern VTBL_ENTRY _ZTI7S7539C2[];
extern  VTBL_ENTRY _ZTV7S7539C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7539C2[];
extern Class_Descriptor cd_S7539C3;
extern VTBL_ENTRY _ZTI7S7539C3[];
extern  VTBL_ENTRY _ZTV7S7539C3[];
extern Class_Descriptor cd_S7539C6;
extern VTBL_ENTRY _ZTI7S7539C6[];
extern  VTBL_ENTRY _ZTV7S7539C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7539C6[];
extern Class_Descriptor cd_S7539C2;
extern VTBL_ENTRY _ZTI7S7539C2[];
extern  VTBL_ENTRY _ZTV7S7539C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7539C2[];
extern Class_Descriptor cd_S7539C8;
extern VTBL_ENTRY _ZTI7S7539C8[];
extern  VTBL_ENTRY _ZTV7S7539C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7539C8[];
static Base_Class bases_S7539C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7539C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S3490C4,    ABISELECT(2704,1940), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7539C3,    ABISELECT(96,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7539C6,    ABISELECT(96,52), //bcp->offset
    10, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7539C3,    ABISELECT(2720,1956), //bcp->offset
    18, //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
    5, //immediately_derived
  0, 1},
  {&cd_S7539C2,    ABISELECT(608,412), //bcp->offset
    14, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7539C3,    ABISELECT(2832,2016), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7539C6,    ABISELECT(2832,2016), //bcp->offset
    28, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S7539C2,    ABISELECT(3344,2376), //bcp->offset
    33, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S7539C8,    ABISELECT(2808,2008), //bcp->offset
    22, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7539C9[];
extern void _ZN7S7539C32v2Ev();
extern void _ZN7S7539C9D1Ev();
extern void _ZN7S7539C9D0Ev();
extern void _ZN7S7539C32v2Ev();
extern void _ZN7S7539C22v3Ev();
extern void _ZN7S7539C32v2Ev();
extern void _ZN7S7539C32v2Ev();
extern void _ZN7S7539C22v3Ev();
static  VTBL_ENTRY vtc_S7539C9[] = {
  ABISELECT(3344,2376),
  ABISELECT(2832,2016),
  ABISELECT(2808,2008),
  ABISELECT(2720,1956),
  ABISELECT(2704,1940),
  0,
  (VTBL_ENTRY)&(_ZTI7S7539C9[0]),
  (VTBL_ENTRY)&_ZN7S7539C32v2Ev,
  (VTBL_ENTRY)&_ZN7S7539C9D1Ev,
  (VTBL_ENTRY)&_ZN7S7539C9D0Ev,
  ABISELECT(2608,1888),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI7S7539C9[0]),
  (VTBL_ENTRY)&_ZN7S7539C32v2Ev,
  ABISELECT(2112,1544),
  ABISELECT(-608,-412),
  (VTBL_ENTRY)&(_ZTI7S7539C9[0]),
  (VTBL_ENTRY)&_ZN7S7539C22v3Ev,
  0,
  ABISELECT(-2720,-1956),
  (VTBL_ENTRY)&(_ZTI7S7539C9[0]),
  (VTBL_ENTRY)&_ZN7S7539C32v2Ev,
  ABISELECT(536,368),
  ABISELECT(-88,-52),
  ABISELECT(24,8),
  ABISELECT(-104,-68),
  ABISELECT(-2808,-2008),
  (VTBL_ENTRY)&(_ZTI7S7539C9[0]),
  0,
  ABISELECT(-128,-76),
  ABISELECT(-2832,-2016),
  (VTBL_ENTRY)&(_ZTI7S7539C9[0]),
  (VTBL_ENTRY)&_ZN7S7539C32v2Ev,
  0,
  ABISELECT(-624,-420),
  ABISELECT(-3344,-2376),
  (VTBL_ENTRY)&(_ZTI7S7539C9[0]),
  (VTBL_ENTRY)&_ZN7S7539C22v3Ev,
};
extern VTBL_ENTRY _ZTV7S7539C9[];
extern void _ZN7S7539C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7539C6__A__7S7539C9[] = {
  ABISELECT(2608,1888),
  0,
  (VTBL_ENTRY)&(_ZTI7S7539C6[0]),
  (VTBL_ENTRY)&_ZN7S7539C32v2Ev,
};
extern void _ZN7S7539C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7539C2__A__7S7539C9[] = {
  ABISELECT(2112,1544),
  0,
  (VTBL_ENTRY)&(_ZTI7S7539C2[0]),
  (VTBL_ENTRY)&_ZN7S7539C22v3Ev,
};
extern void _ZN7S7539C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7539C3__7S7539C2__A__7S7539C9[] = {
  0,
  ABISELECT(-2112,-1544),
  (VTBL_ENTRY)&(_ZTI7S7539C2[0]),
  (VTBL_ENTRY)&_ZN7S7539C32v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7539C8__7S7539C9[] = {
  ABISELECT(536,368),
  ABISELECT(-88,-52),
  ABISELECT(24,8),
  ABISELECT(-104,-68),
  0,
  (VTBL_ENTRY)&(_ZTI7S7539C8[0]),
};
extern void _ZN7S7539C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7539C6__7S7539C8__7S7539C9[] = {
  0,
  ABISELECT(-128,-76),
  ABISELECT(-24,-8),
  (VTBL_ENTRY)&(_ZTI7S7539C8[0]),
  (VTBL_ENTRY)&_ZN7S7539C32v2Ev,
};
extern void _ZN7S7539C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7539C3__A1__7S7539C8__7S7539C9[] = {
  0,
  ABISELECT(88,52),
  (VTBL_ENTRY)&(_ZTI7S7539C8[0]),
  (VTBL_ENTRY)&_ZN7S7539C32v2Ev,
};
extern void _ZN7S7539C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7539C2__7S7539C8__7S7539C9[] = {
  0,
  ABISELECT(-624,-420),
  ABISELECT(-536,-368),
  (VTBL_ENTRY)&(_ZTI7S7539C8[0]),
  (VTBL_ENTRY)&_ZN7S7539C22v3Ev,
};
extern void _ZN7S7539C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7539C6__A1__7S7539C9[] = {
  ABISELECT(-128,-76),
  0,
  (VTBL_ENTRY)&(_ZTI7S7539C6[0]),
  (VTBL_ENTRY)&_ZN7S7539C32v2Ev,
};
extern void _ZN7S7539C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7539C2__A1__7S7539C9[] = {
  ABISELECT(-624,-420),
  0,
  (VTBL_ENTRY)&(_ZTI7S7539C2[0]),
  (VTBL_ENTRY)&_ZN7S7539C22v3Ev,
};
extern void _ZN7S7539C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7539C3__7S7539C2__A1__7S7539C9[] = {
  0,
  ABISELECT(624,420),
  (VTBL_ENTRY)&(_ZTI7S7539C2[0]),
  (VTBL_ENTRY)&_ZN7S7539C32v2Ev,
};
static  VTT_ENTRY vtt_S7539C9[] = {
  {&(_ZTV7S7539C9[7]),  7,38},
  {&(_tg__ZTV7S7539C6__A__7S7539C9[3]),  3,4},
  {&(_tg__ZTV7S7539C2__A__7S7539C9[3]),  3,4},
  {&(_tg__ZTV7S7539C3__7S7539C2__A__7S7539C9[3]),  3,4},
  {&(_ZTV7S7539C9[13]),  13,38},
  {&(_ZTV7S7539C9[17]),  17,38},
  {&(_ZTV7S7539C9[21]),  21,38},
  {&(_ZTV7S7539C9[28]),  28,38},
  {&(_ZTV7S7539C9[32]),  32,38},
  {&(_ZTV7S7539C9[37]),  37,38},
  {&(_tg__ZTV7S7539C8__7S7539C9[6]),  6,6},
  {&(_tg__ZTV7S7539C6__7S7539C8__7S7539C9[4]),  4,5},
  {&(_tg__ZTV7S7539C3__A1__7S7539C8__7S7539C9[3]),  3,4},
  {&(_tg__ZTV7S7539C2__7S7539C8__7S7539C9[4]),  4,5},
  {&(_tg__ZTV7S7539C6__A1__7S7539C9[3]),  3,4},
  {&(_tg__ZTV7S7539C2__A1__7S7539C9[3]),  3,4},
  {&(_tg__ZTV7S7539C3__7S7539C2__A1__7S7539C9[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S7539C9[];
extern  VTBL_ENTRY _ZTV7S7539C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7539C9[];
Class_Descriptor cd_S7539C9 = {  "S7539C9", // class name
  bases_S7539C9, 10,
  &(vtc_S7539C9[0]), // expected_vtbl_contents
  &(vtt_S7539C9[0]), // expected_vtt_contents
  ABISELECT(3632,2608), // object size
  NSPAIRA(_ZTI7S7539C9),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S7539C9),38, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7539C9),17, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7539C10  : S7539C9 {
  void *s7539c10f0;
  short s7539c10f1:6;
  ::S7539C3 s7539c10f2;
  long double s7539c10f3;
  int s7539c10f4;
  ::S3490C4 s7539c10f5;
  ::S7539C2 s7539c10f6;
  void *s7539c10f7;
  int s7539c10f8;
  void *s7539c10f9[2];
  virtual  ~S7539C10(); // _ZN8S7539C10D2Ev
  virtual void  v5(); // _ZN8S7539C102v5Ev
  virtual void  v6(); // _ZN8S7539C102v6Ev
  S7539C10(); // tgen
};
//SIG(-1 S7539C10) C1{ BC2{ BC3{ v3 FD Fi:3 Fc:8 FD[2] FL} VBC4{ m FL Fi Fc} BC5{ BC3 VBC4 Fc[10] Fi FC6{ VBC3 v4 FC4 FL FC4[7] Fp FL FC4 Fp Fc Fs Fi FC3} FL} BC6 VBC7{ VBC4 VBC5 VBC3 VBC6 Fp} vd FC6 FC7 Fp Fi FC3 FC6} vd v1 v2 Fp Fs:6 FC3 FD Fi FC4 FC6 Fp Fi Fp[2]}


 S7539C10 ::~S7539C10(){ note_dtor("S7539C10", this);}
void  S7539C10 ::v5(){vfunc_called(this, "_ZN8S7539C102v5Ev");}
void  S7539C10 ::v6(){vfunc_called(this, "_ZN8S7539C102v6Ev");}
S7539C10 ::S7539C10(){ note_ctor("S7539C10", this);} // tgen

static void Test_S7539C10()
{
  extern Class_Descriptor cd_S7539C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(264,751)];
    init_test(&cd_S7539C10, buf);
    S7539C10 *dp, &lv = *(dp=new (buf) S7539C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(4208,3000), "sizeof(S7539C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7539C10)");
    /*is_ambiguous_... S7539C9::S7539C3 */ AMB_check_base_class_offset(lv, (S7539C3*)(S7539C9*), 0, "S7539C10");
    check_base_class_offset(lv, (S3490C4*)(S7539C9*), ABISELECT(3280,2332), "S7539C10");
    /*is_ambiguous_... S7539C9::S7539C6 */ AMB_check_base_class_offset(lv, (S3490C4*)(S7539C6*)(S7539C9*), ABISELECT(3280,2332), "S7539C10");
    check_base_class_offset(lv, (S3490C4*)(S7539C8*), ABISELECT(3280,2332), "S7539C10");
    /*is_ambiguous_... S7539C10::S7539C6 */ AMB_check_base_class_offset(lv, (S3490C4*)(S7539C6*), ABISELECT(3280,2332), "S7539C10");
    /*is_ambiguous_... S7539C9::S7539C6 */ AMB_check_base_class_offset(lv, (S7539C3*)(S7539C6*)(S7539C9*), ABISELECT(96,52), "S7539C10");
    /*is_ambiguous_... S7539C9::S7539C6 */ AMB_check_base_class_offset(lv, (S7539C6*)(S7539C9*), ABISELECT(96,52), "S7539C10");
    /*is_ambiguous_... S7539C9::S7539C2 */ AMB_check_base_class_offset(lv, (S7539C3*)(S7539C2*)(S7539C9*), ABISELECT(3296,2348), "S7539C10");
    /*is_ambiguous_... S7539C8::S7539C3 */ AMB_check_base_class_offset(lv, (S7539C3*)(S7539C8*), ABISELECT(3296,2348), "S7539C10");
    /*is_ambiguous_... S7539C10::S7539C2 */ AMB_check_base_class_offset(lv, (S7539C3*)(S7539C2*), ABISELECT(3296,2348), "S7539C10");
    /*is_ambiguous_... S7539C9::S7539C2 */ AMB_check_base_class_offset(lv, (S7539C2*)(S7539C9*), ABISELECT(608,412), "S7539C10");
    /*is_ambiguous_... S7539C10::S7539C6 */ AMB_check_base_class_offset(lv, (S7539C3*)(S7539C6*), ABISELECT(3408,2408), "S7539C10");
    check_base_class_offset(lv, (S7539C6*)(S7539C8*), ABISELECT(3408,2408), "S7539C10");
    check_base_class_offset(lv, (S7539C2*)(S7539C8*), ABISELECT(3920,2768), "S7539C10");
    check_base_class_offset(lv, (S7539C8*)(S7539C9*), ABISELECT(3384,2400), "S7539C10");
    check_base_class_offset(lv, (S7539C9*), 0, "S7539C10");
    check_field_offset(lv, s7539c10f0, ABISELECT(2704,1940), "S7539C10.s7539c10f0");
    set_bf_and_test(lv, s7539c10f1, ABISELECT(2712,1944), 0, 6, 1, "S7539C10");
    set_bf_and_test(lv, s7539c10f1, ABISELECT(2712,1944), 0, 6, hide_sll(1LL<<5), "S7539C10");
    check_field_offset(lv, s7539c10f2, ABISELECT(2720,1948), "S7539C10.s7539c10f2");
    check_field_offset(lv, s7539c10f3, ABISELECT(2816,2000), "S7539C10.s7539c10f3");
    check_field_offset(lv, s7539c10f4, ABISELECT(2832,2012), "S7539C10.s7539c10f4");
    check_field_offset(lv, s7539c10f5, ABISELECT(2840,2016), "S7539C10.s7539c10f5");
    check_field_offset(lv, s7539c10f6, ABISELECT(2864,2032), "S7539C10.s7539c10f6");
    check_field_offset(lv, s7539c10f7, ABISELECT(3248,2316), "S7539C10.s7539c10f7");
    check_field_offset(lv, s7539c10f8, ABISELECT(3256,2320), "S7539C10.s7539c10f8");
    check_field_offset(lv, s7539c10f9, ABISELECT(3264,2324), "S7539C10.s7539c10f9");
    test_class_info(&lv, &cd_S7539C10);
    dp->~S7539C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7539C10(Test_S7539C10, "S7539C10", ABISELECT(4208,3000));

#else // __cplusplus

extern void _ZN8S7539C10C1Ev();
extern void _ZN8S7539C10D2Ev();
Name_Map name_map_S7539C10[] = {
  NSPAIR(_ZN8S7539C10C1Ev),
  NSPAIR(_ZN8S7539C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7539C3;
extern VTBL_ENTRY _ZTI7S7539C3[];
extern  VTBL_ENTRY _ZTV7S7539C3[];
extern Class_Descriptor cd_S3490C4;
extern VTBL_ENTRY _ZTI7S3490C4[];
extern Class_Descriptor cd_S7539C3;
extern VTBL_ENTRY _ZTI7S7539C3[];
extern  VTBL_ENTRY _ZTV7S7539C3[];
extern Class_Descriptor cd_S7539C6;
extern VTBL_ENTRY _ZTI7S7539C6[];
extern  VTBL_ENTRY _ZTV7S7539C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7539C6[];
extern Class_Descriptor cd_S7539C3;
extern VTBL_ENTRY _ZTI7S7539C3[];
extern  VTBL_ENTRY _ZTV7S7539C3[];
extern Class_Descriptor cd_S7539C2;
extern VTBL_ENTRY _ZTI7S7539C2[];
extern  VTBL_ENTRY _ZTV7S7539C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7539C2[];
extern Class_Descriptor cd_S7539C3;
extern VTBL_ENTRY _ZTI7S7539C3[];
extern  VTBL_ENTRY _ZTV7S7539C3[];
extern Class_Descriptor cd_S7539C6;
extern VTBL_ENTRY _ZTI7S7539C6[];
extern  VTBL_ENTRY _ZTV7S7539C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7539C6[];
extern Class_Descriptor cd_S7539C2;
extern VTBL_ENTRY _ZTI7S7539C2[];
extern  VTBL_ENTRY _ZTV7S7539C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7539C2[];
extern Class_Descriptor cd_S7539C8;
extern VTBL_ENTRY _ZTI7S7539C8[];
extern  VTBL_ENTRY _ZTV7S7539C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7539C8[];
extern Class_Descriptor cd_S7539C9;
extern VTBL_ENTRY _ZTI7S7539C9[];
extern  VTBL_ENTRY _ZTV7S7539C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7539C9[];
static Base_Class bases_S7539C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7539C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S3490C4,    ABISELECT(3280,2332), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7539C3,    ABISELECT(96,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7539C6,    ABISELECT(96,52), //bcp->offset
    12, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7539C3,    ABISELECT(3296,2348), //bcp->offset
    20, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S7539C2,    ABISELECT(608,412), //bcp->offset
    16, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7539C3,    ABISELECT(3408,2408), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7539C6,    ABISELECT(3408,2408), //bcp->offset
    30, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S7539C2,    ABISELECT(3920,2768), //bcp->offset
    35, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S7539C8,    ABISELECT(3384,2400), //bcp->offset
    24, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S7539C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7539C10[];
extern void _ZN7S7539C32v2Ev();
extern void _ZN8S7539C10D1Ev();
extern void _ZN8S7539C10D0Ev();
extern void _ZN8S7539C102v5Ev();
extern void _ZN8S7539C102v6Ev();
extern void _ZN7S7539C32v2Ev();
extern void _ZN7S7539C22v3Ev();
extern void _ZN7S7539C32v2Ev();
extern void _ZN7S7539C32v2Ev();
extern void _ZN7S7539C22v3Ev();
static  VTBL_ENTRY vtc_S7539C10[] = {
  ABISELECT(3920,2768),
  ABISELECT(3408,2408),
  ABISELECT(3384,2400),
  ABISELECT(3296,2348),
  ABISELECT(3280,2332),
  0,
  (VTBL_ENTRY)&(_ZTI8S7539C10[0]),
  (VTBL_ENTRY)&_ZN7S7539C32v2Ev,
  (VTBL_ENTRY)&_ZN8S7539C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7539C10D0Ev,
  (VTBL_ENTRY)&_ZN8S7539C102v5Ev,
  (VTBL_ENTRY)&_ZN8S7539C102v6Ev,
  ABISELECT(3184,2280),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI8S7539C10[0]),
  (VTBL_ENTRY)&_ZN7S7539C32v2Ev,
  ABISELECT(2688,1936),
  ABISELECT(-608,-412),
  (VTBL_ENTRY)&(_ZTI8S7539C10[0]),
  (VTBL_ENTRY)&_ZN7S7539C22v3Ev,
  0,
  ABISELECT(-3296,-2348),
  (VTBL_ENTRY)&(_ZTI8S7539C10[0]),
  (VTBL_ENTRY)&_ZN7S7539C32v2Ev,
  ABISELECT(536,368),
  ABISELECT(-88,-52),
  ABISELECT(24,8),
  ABISELECT(-104,-68),
  ABISELECT(-3384,-2400),
  (VTBL_ENTRY)&(_ZTI8S7539C10[0]),
  0,
  ABISELECT(-128,-76),
  ABISELECT(-3408,-2408),
  (VTBL_ENTRY)&(_ZTI8S7539C10[0]),
  (VTBL_ENTRY)&_ZN7S7539C32v2Ev,
  0,
  ABISELECT(-624,-420),
  ABISELECT(-3920,-2768),
  (VTBL_ENTRY)&(_ZTI8S7539C10[0]),
  (VTBL_ENTRY)&_ZN7S7539C22v3Ev,
};
extern VTBL_ENTRY _ZTV8S7539C10[];
extern void _ZN7S7539C32v2Ev();
extern void _ZN7S7539C9D1Ev();
extern void _ZN7S7539C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7539C9__8S7539C10[] = {
  ABISELECT(3920,2768),
  ABISELECT(3408,2408),
  ABISELECT(3384,2400),
  ABISELECT(3296,2348),
  ABISELECT(3280,2332),
  0,
  (VTBL_ENTRY)&(_ZTI7S7539C9[0]),
  (VTBL_ENTRY)&_ZN7S7539C32v2Ev,
  (VTBL_ENTRY)&_ZN7S7539C9D1Ev,
  (VTBL_ENTRY)&_ZN7S7539C9D0Ev,
};
extern void _ZN7S7539C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7539C67S7539C9__8S7539C10[] = {
  ABISELECT(3184,2280),
  0,
  (VTBL_ENTRY)&(_ZTI7S7539C6[0]),
  (VTBL_ENTRY)&_ZN7S7539C32v2Ev,
};
extern void _ZN7S7539C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7539C27S7539C9__8S7539C10[] = {
  ABISELECT(2688,1936),
  0,
  (VTBL_ENTRY)&(_ZTI7S7539C2[0]),
  (VTBL_ENTRY)&_ZN7S7539C22v3Ev,
};
extern void _ZN7S7539C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7539C3__7S7539C27S7539C9__8S7539C10[] = {
  0,
  ABISELECT(-2688,-1936),
  (VTBL_ENTRY)&(_ZTI7S7539C2[0]),
  (VTBL_ENTRY)&_ZN7S7539C32v2Ev,
};
extern void _ZN7S7539C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7539C6__A__7S7539C9__8S7539C10[] = {
  ABISELECT(3184,2280),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI7S7539C9[0]),
  (VTBL_ENTRY)&_ZN7S7539C32v2Ev,
};
extern void _ZN7S7539C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7539C2__A__7S7539C9__8S7539C10[] = {
  ABISELECT(2688,1936),
  ABISELECT(-608,-412),
  (VTBL_ENTRY)&(_ZTI7S7539C9[0]),
  (VTBL_ENTRY)&_ZN7S7539C22v3Ev,
};
extern void _ZN7S7539C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7539C3__A2__7S7539C9__8S7539C10[] = {
  0,
  ABISELECT(-3296,-2348),
  (VTBL_ENTRY)&(_ZTI7S7539C9[0]),
  (VTBL_ENTRY)&_ZN7S7539C32v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7539C8__7S7539C9__8S7539C10[] = {
  ABISELECT(536,368),
  ABISELECT(-88,-52),
  ABISELECT(24,8),
  ABISELECT(-104,-68),
  ABISELECT(-3384,-2400),
  (VTBL_ENTRY)&(_ZTI7S7539C9[0]),
};
extern void _ZN7S7539C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7539C6__A1__7S7539C9__8S7539C10[] = {
  0,
  ABISELECT(-128,-76),
  ABISELECT(-3408,-2408),
  (VTBL_ENTRY)&(_ZTI7S7539C9[0]),
  (VTBL_ENTRY)&_ZN7S7539C32v2Ev,
};
extern void _ZN7S7539C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7539C2__A1__7S7539C9__8S7539C10[] = {
  0,
  ABISELECT(-624,-420),
  ABISELECT(-3920,-2768),
  (VTBL_ENTRY)&(_ZTI7S7539C9[0]),
  (VTBL_ENTRY)&_ZN7S7539C22v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7539C8__8S7539C10[] = {
  ABISELECT(536,368),
  ABISELECT(-88,-52),
  ABISELECT(24,8),
  ABISELECT(-104,-68),
  0,
  (VTBL_ENTRY)&(_ZTI7S7539C8[0]),
};
extern void _ZN7S7539C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7539C6__7S7539C8__8S7539C10[] = {
  0,
  ABISELECT(-128,-76),
  ABISELECT(-24,-8),
  (VTBL_ENTRY)&(_ZTI7S7539C8[0]),
  (VTBL_ENTRY)&_ZN7S7539C32v2Ev,
};
extern void _ZN7S7539C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7539C3__A1__7S7539C8__8S7539C10[] = {
  0,
  ABISELECT(88,52),
  (VTBL_ENTRY)&(_ZTI7S7539C8[0]),
  (VTBL_ENTRY)&_ZN7S7539C32v2Ev,
};
extern void _ZN7S7539C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7539C2__7S7539C8__8S7539C10[] = {
  0,
  ABISELECT(-624,-420),
  ABISELECT(-536,-368),
  (VTBL_ENTRY)&(_ZTI7S7539C8[0]),
  (VTBL_ENTRY)&_ZN7S7539C22v3Ev,
};
extern void _ZN7S7539C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7539C6__A1__8S7539C10[] = {
  ABISELECT(-128,-76),
  0,
  (VTBL_ENTRY)&(_ZTI7S7539C6[0]),
  (VTBL_ENTRY)&_ZN7S7539C32v2Ev,
};
extern void _ZN7S7539C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7539C2__A1__8S7539C10[] = {
  ABISELECT(-624,-420),
  0,
  (VTBL_ENTRY)&(_ZTI7S7539C2[0]),
  (VTBL_ENTRY)&_ZN7S7539C22v3Ev,
};
extern void _ZN7S7539C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7539C3__7S7539C2__A1__8S7539C10[] = {
  0,
  ABISELECT(624,420),
  (VTBL_ENTRY)&(_ZTI7S7539C2[0]),
  (VTBL_ENTRY)&_ZN7S7539C32v2Ev,
};
static  VTT_ENTRY vtt_S7539C10[] = {
  {&(_ZTV8S7539C10[7]),  7,40},
  {&(_tg__ZTV7S7539C9__8S7539C10[7]),  7,10},
  {&(_tg__ZTV7S7539C67S7539C9__8S7539C10[3]),  3,4},
  {&(_tg__ZTV7S7539C27S7539C9__8S7539C10[3]),  3,4},
  {&(_tg__ZTV7S7539C3__7S7539C27S7539C9__8S7539C10[3]),  3,4},
  {&(_tg__ZTV7S7539C6__A__7S7539C9__8S7539C10[3]),  3,4},
  {&(_tg__ZTV7S7539C2__A__7S7539C9__8S7539C10[3]),  3,4},
  {&(_tg__ZTV7S7539C3__A2__7S7539C9__8S7539C10[3]),  3,4},
  {&(_tg__ZTV7S7539C8__7S7539C9__8S7539C10[6]),  6,6},
  {&(_tg__ZTV7S7539C6__A1__7S7539C9__8S7539C10[4]),  4,5},
  {&(_tg__ZTV7S7539C2__A1__7S7539C9__8S7539C10[4]),  4,5},
  {&(_ZTV8S7539C10[15]),  15,40},
  {&(_ZTV8S7539C10[19]),  19,40},
  {&(_ZTV8S7539C10[23]),  23,40},
  {&(_ZTV8S7539C10[30]),  30,40},
  {&(_ZTV8S7539C10[34]),  34,40},
  {&(_ZTV8S7539C10[39]),  39,40},
  {&(_tg__ZTV7S7539C8__8S7539C10[6]),  6,6},
  {&(_tg__ZTV7S7539C6__7S7539C8__8S7539C10[4]),  4,5},
  {&(_tg__ZTV7S7539C3__A1__7S7539C8__8S7539C10[3]),  3,4},
  {&(_tg__ZTV7S7539C2__7S7539C8__8S7539C10[4]),  4,5},
  {&(_tg__ZTV7S7539C6__A1__8S7539C10[3]),  3,4},
  {&(_tg__ZTV7S7539C2__A1__8S7539C10[3]),  3,4},
  {&(_tg__ZTV7S7539C3__7S7539C2__A1__8S7539C10[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S7539C10[];
extern  VTBL_ENTRY _ZTV8S7539C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7539C10[];
Class_Descriptor cd_S7539C10 = {  "S7539C10", // class name
  bases_S7539C10, 11,
  &(vtc_S7539C10[0]), // expected_vtbl_contents
  &(vtt_S7539C10[0]), // expected_vtt_contents
  ABISELECT(4208,3000), // object size
  NSPAIRA(_ZTI8S7539C10),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S7539C10),40, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7539C10),24, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7539C7  : virtual S7539C8 , S7539C9 , S7539C10 {
  int s7539c7f0;
  char s7539c7f1;
  void *s7539c7f2;
  long s7539c7f3;
  virtual void  v7(); // _ZN7S7539C72v7Ev
  ~S7539C7(); // tgen
  S7539C7(); // tgen
};
//SIG(-1 S7539C7) C1{ VBC2{ VBC3{ m FL Fi Fc} VBC4{ BC5{ v2 FD Fi:3 Fc:8 FD[2] FL} VBC3 Fc[10] Fi FC6{ VBC5 v3 FC3 FL FC3[7] Fp FL FC3 Fp Fc Fs Fi FC5} FL} VBC5 VBC6 Fp} BC7{ BC5 VBC3 BC4 BC6 VBC2 vd FC6 FC2 Fp Fi FC5 FC6} BC8{ BC7 vd v4 v5 Fp Fs:6 FC5 FD Fi FC3 FC6 Fp Fi Fp[2]} v1 Fi Fc Fp Fl}


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

static void Test_S7539C7()
{
  extern Class_Descriptor cd_S7539C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(435,1240)];
    init_test(&cd_S7539C7, buf);
    S7539C7 *dp, &lv = *(dp=new (buf) S7539C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(6944,4956), "sizeof(S7539C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7539C7)");
    check_base_class_offset(lv, (S3490C4*)(S7539C8*), ABISELECT(6024,4296), "S7539C7");
    /*is_ambiguous_... S7539C7::S7539C6 */ AMB_check_base_class_offset(lv, (S3490C4*)(S7539C6*), ABISELECT(6024,4296), "S7539C7");
    /*is_ambiguous_... S7539C7::S7539C9 */ AMB_check_base_class_offset(lv, (S3490C4*)(S7539C9*), ABISELECT(6024,4296), "S7539C7");
    /*is_ambiguous_... S7539C7::S7539C9 */ AMB_check_base_class_offset(lv, (S3490C4*)(S7539C6*)(S7539C9*), ABISELECT(6024,4296), "S7539C7");
    check_base_class_offset(lv, (S3490C4*)(S7539C9*)(S7539C10*), ABISELECT(6024,4296), "S7539C7");
    /*is_ambiguous_... S7539C9::S7539C6 */ AMB_check_base_class_offset(lv, (S3490C4*)(S7539C6*)(S7539C9*)(S7539C10*), ABISELECT(6024,4296), "S7539C7");
    /*is_ambiguous_... S7539C7::S7539C6 */ AMB_check_base_class_offset(lv, (S7539C3*)(S7539C6*), ABISELECT(6048,4312), "S7539C7");
    check_base_class_offset(lv, (S7539C6*)(S7539C8*), ABISELECT(6048,4312), "S7539C7");
    /*is_ambiguous_... S7539C8::S7539C3 */ AMB_check_base_class_offset(lv, (S7539C3*)(S7539C8*), ABISELECT(6560,4672), "S7539C7");
    /*is_ambiguous_... S7539C7::S7539C2 */ AMB_check_base_class_offset(lv, (S7539C3*)(S7539C2*), ABISELECT(6560,4672), "S7539C7");
    /*is_ambiguous_... S7539C7::S7539C9 */ AMB_check_base_class_offset(lv, (S7539C3*)(S7539C2*)(S7539C9*), ABISELECT(6560,4672), "S7539C7");
    /*is_ambiguous_... S7539C9::S7539C2 */ AMB_check_base_class_offset(lv, (S7539C3*)(S7539C2*)(S7539C9*)(S7539C10*), ABISELECT(6560,4672), "S7539C7");
    check_base_class_offset(lv, (S7539C2*)(S7539C8*), ABISELECT(6656,4724), "S7539C7");
    check_base_class_offset(lv, (S7539C8*), ABISELECT(6008,4288), "S7539C7");
    /*is_ambiguous_... S7539C7::S7539C9 */ AMB_check_base_class_offset(lv, (S7539C8*)(S7539C9*), ABISELECT(6008,4288), "S7539C7");
    check_base_class_offset(lv, (S7539C8*)(S7539C9*)(S7539C10*), ABISELECT(6008,4288), "S7539C7");
    /*is_ambiguous_... S7539C7::S7539C9 */ AMB_check_base_class_offset(lv, (S7539C3*)(S7539C9*), 0, "S7539C7");
    /*is_ambiguous_... S7539C7::S7539C9 */ AMB_check_base_class_offset(lv, (S7539C3*)(S7539C6*)(S7539C9*), ABISELECT(96,52), "S7539C7");
    /*is_ambiguous_... S7539C7::S7539C9 */ AMB_check_base_class_offset(lv, (S7539C6*)(S7539C9*), ABISELECT(96,52), "S7539C7");
    /*is_ambiguous_... S7539C7::S7539C9 */ AMB_check_base_class_offset(lv, (S7539C2*)(S7539C9*), ABISELECT(608,412), "S7539C7");
    /*is_ambiguous_... S7539C7::S7539C9 */ AMB_check_base_class_offset(lv, (S7539C9*), 0, "S7539C7");
    /*is_ambiguous_... S7539C9::S7539C3 */ AMB_check_base_class_offset(lv, (S7539C3*)(S7539C9*)(S7539C10*), ABISELECT(2704,1940), "S7539C7");
    /*is_ambiguous_... S7539C9::S7539C6 */ AMB_check_base_class_offset(lv, (S7539C3*)(S7539C6*)(S7539C9*)(S7539C10*), ABISELECT(2800,1992), "S7539C7");
    /*is_ambiguous_... S7539C9::S7539C6 */ AMB_check_base_class_offset(lv, (S7539C6*)(S7539C9*)(S7539C10*), ABISELECT(2800,1992), "S7539C7");
    /*is_ambiguous_... S7539C9::S7539C2 */ AMB_check_base_class_offset(lv, (S7539C2*)(S7539C9*)(S7539C10*), ABISELECT(3312,2352), "S7539C7");
    check_base_class_offset(lv, (S7539C9*)(S7539C10*), ABISELECT(2704,1940), "S7539C7");
    check_base_class_offset(lv, (S7539C10*), ABISELECT(2704,1940), "S7539C7");
    check_field_offset(lv, s7539c7f0, ABISELECT(5984,4272), "S7539C7.s7539c7f0");
    check_field_offset(lv, s7539c7f1, ABISELECT(5988,4276), "S7539C7.s7539c7f1");
    check_field_offset(lv, s7539c7f2, ABISELECT(5992,4280), "S7539C7.s7539c7f2");
    check_field_offset(lv, s7539c7f3, ABISELECT(6000,4284), "S7539C7.s7539c7f3");
    test_class_info(&lv, &cd_S7539C7);
    dp->~S7539C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7539C7(Test_S7539C7, "S7539C7", ABISELECT(6944,4956));

#else // __cplusplus

extern void _ZN7S7539C7C1Ev();
extern void _ZN7S7539C7D1Ev();
Name_Map name_map_S7539C7[] = {
  NSPAIR(_ZN7S7539C7C1Ev),
  NSPAIR(_ZN7S7539C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3490C4;
extern VTBL_ENTRY _ZTI7S3490C4[];
extern Class_Descriptor cd_S7539C3;
extern VTBL_ENTRY _ZTI7S7539C3[];
extern  VTBL_ENTRY _ZTV7S7539C3[];
extern Class_Descriptor cd_S7539C6;
extern VTBL_ENTRY _ZTI7S7539C6[];
extern  VTBL_ENTRY _ZTV7S7539C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7539C6[];
extern Class_Descriptor cd_S7539C3;
extern VTBL_ENTRY _ZTI7S7539C3[];
extern  VTBL_ENTRY _ZTV7S7539C3[];
extern Class_Descriptor cd_S7539C2;
extern VTBL_ENTRY _ZTI7S7539C2[];
extern  VTBL_ENTRY _ZTV7S7539C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7539C2[];
extern Class_Descriptor cd_S7539C8;
extern VTBL_ENTRY _ZTI7S7539C8[];
extern  VTBL_ENTRY _ZTV7S7539C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7539C8[];
extern Class_Descriptor cd_S7539C3;
extern VTBL_ENTRY _ZTI7S7539C3[];
extern  VTBL_ENTRY _ZTV7S7539C3[];
extern Class_Descriptor cd_S7539C3;
extern VTBL_ENTRY _ZTI7S7539C3[];
extern  VTBL_ENTRY _ZTV7S7539C3[];
extern Class_Descriptor cd_S7539C6;
extern VTBL_ENTRY _ZTI7S7539C6[];
extern  VTBL_ENTRY _ZTV7S7539C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7539C6[];
extern Class_Descriptor cd_S7539C2;
extern VTBL_ENTRY _ZTI7S7539C2[];
extern  VTBL_ENTRY _ZTV7S7539C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7539C2[];
extern Class_Descriptor cd_S7539C9;
extern VTBL_ENTRY _ZTI7S7539C9[];
extern  VTBL_ENTRY _ZTV7S7539C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7539C9[];
extern Class_Descriptor cd_S7539C3;
extern VTBL_ENTRY _ZTI7S7539C3[];
extern  VTBL_ENTRY _ZTV7S7539C3[];
extern Class_Descriptor cd_S7539C3;
extern VTBL_ENTRY _ZTI7S7539C3[];
extern  VTBL_ENTRY _ZTV7S7539C3[];
extern Class_Descriptor cd_S7539C6;
extern VTBL_ENTRY _ZTI7S7539C6[];
extern  VTBL_ENTRY _ZTV7S7539C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7539C6[];
extern Class_Descriptor cd_S7539C2;
extern VTBL_ENTRY _ZTI7S7539C2[];
extern  VTBL_ENTRY _ZTV7S7539C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7539C2[];
extern Class_Descriptor cd_S7539C9;
extern VTBL_ENTRY _ZTI7S7539C9[];
extern  VTBL_ENTRY _ZTV7S7539C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7539C9[];
extern Class_Descriptor cd_S7539C10;
extern VTBL_ENTRY _ZTI8S7539C10[];
extern  VTBL_ENTRY _ZTV8S7539C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7539C10[];
static Base_Class bases_S7539C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3490C4,    ABISELECT(6024,4296), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7539C3,    ABISELECT(6048,4312), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7539C6,    ABISELECT(6048,4312), //bcp->offset
    45, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S7539C3,    ABISELECT(6560,4672), //bcp->offset
    50, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7539C2,    ABISELECT(6656,4724), //bcp->offset
    54, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S7539C8,    ABISELECT(6008,4288), //bcp->offset
    39, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7539C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7539C3,    ABISELECT(96,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7539C6,    ABISELECT(96,52), //bcp->offset
    11, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7539C2,    ABISELECT(608,412), //bcp->offset
    15, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    34, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7539C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7539C3,    ABISELECT(2704,1940), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S7539C3,    ABISELECT(2800,1992), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7539C6,    ABISELECT(2800,1992), //bcp->offset
    31, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    36, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S7539C2,    ABISELECT(3312,2352), //bcp->offset
    35, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    37, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S7539C9,    ABISELECT(2704,1940), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7539C10,    ABISELECT(2704,1940), //bcp->offset
    19, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    35, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7539C7[];
extern void _ZN7S7539C32v2Ev();
extern void _ZN7S7539C7D1Ev();
extern void _ZN7S7539C7D0Ev();
extern void _ZN7S7539C72v7Ev();
extern void _ZN7S7539C32v2Ev();
extern void _ZN7S7539C22v3Ev();
extern void _ZN7S7539C32v2Ev();
extern void ABISELECT(_ZThn2704_N7S7539C7D1Ev,_ZThn1940_N7S7539C7D1Ev)();
extern void ABISELECT(_ZThn2704_N7S7539C7D0Ev,_ZThn1940_N7S7539C7D0Ev)();
extern void _ZN8S7539C102v5Ev();
extern void _ZN8S7539C102v6Ev();
extern void _ZN7S7539C32v2Ev();
extern void _ZN7S7539C22v3Ev();
extern void _ZN7S7539C32v2Ev();
extern void _ZN7S7539C32v2Ev();
extern void _ZN7S7539C22v3Ev();
static  VTBL_ENTRY vtc_S7539C7[] = {
  ABISELECT(6656,4724),
  ABISELECT(6048,4312),
  ABISELECT(6008,4288),
  ABISELECT(6560,4672),
  ABISELECT(6024,4296),
  0,
  (VTBL_ENTRY)&(_ZTI7S7539C7[0]),
  (VTBL_ENTRY)&_ZN7S7539C32v2Ev,
  (VTBL_ENTRY)&_ZN7S7539C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7539C7D0Ev,
  (VTBL_ENTRY)&_ZN7S7539C72v7Ev,
  ABISELECT(5928,4244),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI7S7539C7[0]),
  (VTBL_ENTRY)&_ZN7S7539C32v2Ev,
  ABISELECT(5952,4260),
  ABISELECT(-608,-412),
  (VTBL_ENTRY)&(_ZTI7S7539C7[0]),
  (VTBL_ENTRY)&_ZN7S7539C22v3Ev,
  ABISELECT(3952,2784),
  ABISELECT(3344,2372),
  ABISELECT(3304,2348),
  ABISELECT(3856,2732),
  ABISELECT(3320,2356),
  ABISELECT(-2704,-1940),
  (VTBL_ENTRY)&(_ZTI7S7539C7[0]),
  (VTBL_ENTRY)&_ZN7S7539C32v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn2704_N7S7539C7D1Ev,_ZThn1940_N7S7539C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2704_N7S7539C7D0Ev,_ZThn1940_N7S7539C7D0Ev),
  (VTBL_ENTRY)&_ZN8S7539C102v5Ev,
  (VTBL_ENTRY)&_ZN8S7539C102v6Ev,
  ABISELECT(3224,2304),
  ABISELECT(-2800,-1992),
  (VTBL_ENTRY)&(_ZTI7S7539C7[0]),
  (VTBL_ENTRY)&_ZN7S7539C32v2Ev,
  ABISELECT(3248,2320),
  ABISELECT(-3312,-2352),
  (VTBL_ENTRY)&(_ZTI7S7539C7[0]),
  (VTBL_ENTRY)&_ZN7S7539C22v3Ev,
  ABISELECT(648,436),
  ABISELECT(552,384),
  ABISELECT(40,24),
  ABISELECT(16,8),
  ABISELECT(-6008,-4288),
  (VTBL_ENTRY)&(_ZTI7S7539C7[0]),
  0,
  ABISELECT(-24,-16),
  ABISELECT(-6048,-4312),
  (VTBL_ENTRY)&(_ZTI7S7539C7[0]),
  (VTBL_ENTRY)&_ZN7S7539C32v2Ev,
  0,
  ABISELECT(-6560,-4672),
  (VTBL_ENTRY)&(_ZTI7S7539C7[0]),
  (VTBL_ENTRY)&_ZN7S7539C32v2Ev,
  0,
  ABISELECT(-96,-52),
  ABISELECT(-6656,-4724),
  (VTBL_ENTRY)&(_ZTI7S7539C7[0]),
  (VTBL_ENTRY)&_ZN7S7539C22v3Ev,
};
extern VTBL_ENTRY _ZTV7S7539C7[];
extern void _ZN7S7539C32v2Ev();
extern void _ZN7S7539C9D1Ev();
extern void _ZN7S7539C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7539C9__7S7539C7[] = {
  ABISELECT(6656,4724),
  ABISELECT(6048,4312),
  ABISELECT(6008,4288),
  ABISELECT(6560,4672),
  ABISELECT(6024,4296),
  0,
  (VTBL_ENTRY)&(_ZTI7S7539C9[0]),
  (VTBL_ENTRY)&_ZN7S7539C32v2Ev,
  (VTBL_ENTRY)&_ZN7S7539C9D1Ev,
  (VTBL_ENTRY)&_ZN7S7539C9D0Ev,
};
extern void _ZN7S7539C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7539C67S7539C9__A1__7S7539C7[] = {
  ABISELECT(5928,4244),
  0,
  (VTBL_ENTRY)&(_ZTI7S7539C6[0]),
  (VTBL_ENTRY)&_ZN7S7539C32v2Ev,
};
extern void _ZN7S7539C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7539C27S7539C9__A1__7S7539C7[] = {
  ABISELECT(5952,4260),
  0,
  (VTBL_ENTRY)&(_ZTI7S7539C2[0]),
  (VTBL_ENTRY)&_ZN7S7539C22v3Ev,
};
extern void _ZN7S7539C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7539C3__7S7539C27S7539C9__A1__7S7539C7[] = {
  0,
  ABISELECT(-5952,-4260),
  (VTBL_ENTRY)&(_ZTI7S7539C2[0]),
  (VTBL_ENTRY)&_ZN7S7539C32v2Ev,
};
extern void _ZN7S7539C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7539C6__A__7S7539C9__7S7539C7[] = {
  ABISELECT(5928,4244),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI7S7539C9[0]),
  (VTBL_ENTRY)&_ZN7S7539C32v2Ev,
};
extern void _ZN7S7539C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7539C2__A__7S7539C9__7S7539C7[] = {
  ABISELECT(5952,4260),
  ABISELECT(-608,-412),
  (VTBL_ENTRY)&(_ZTI7S7539C9[0]),
  (VTBL_ENTRY)&_ZN7S7539C22v3Ev,
};
extern void _ZN7S7539C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7539C3__A2__7S7539C9__7S7539C7[] = {
  0,
  ABISELECT(-6560,-4672),
  (VTBL_ENTRY)&(_ZTI7S7539C9[0]),
  (VTBL_ENTRY)&_ZN7S7539C32v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7539C8__7S7539C9__7S7539C7[] = {
  ABISELECT(648,436),
  ABISELECT(552,384),
  ABISELECT(40,24),
  ABISELECT(16,8),
  ABISELECT(-6008,-4288),
  (VTBL_ENTRY)&(_ZTI7S7539C9[0]),
};
extern void _ZN7S7539C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7539C6__A1__7S7539C9__7S7539C7[] = {
  0,
  ABISELECT(-24,-16),
  ABISELECT(-6048,-4312),
  (VTBL_ENTRY)&(_ZTI7S7539C9[0]),
  (VTBL_ENTRY)&_ZN7S7539C32v2Ev,
};
extern void _ZN7S7539C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7539C2__A1__7S7539C9__7S7539C7[] = {
  0,
  ABISELECT(-96,-52),
  ABISELECT(-6656,-4724),
  (VTBL_ENTRY)&(_ZTI7S7539C9[0]),
  (VTBL_ENTRY)&_ZN7S7539C22v3Ev,
};
extern void _ZN7S7539C32v2Ev();
extern void _ZN8S7539C10D1Ev();
extern void _ZN8S7539C10D0Ev();
extern void _ZN8S7539C102v5Ev();
extern void _ZN8S7539C102v6Ev();
static  VTBL_ENTRY _tg__ZTV8S7539C10__7S7539C7[] = {
  ABISELECT(3952,2784),
  ABISELECT(3344,2372),
  ABISELECT(3304,2348),
  ABISELECT(3856,2732),
  ABISELECT(3320,2356),
  0,
  (VTBL_ENTRY)&(_ZTI8S7539C10[0]),
  (VTBL_ENTRY)&_ZN7S7539C32v2Ev,
  (VTBL_ENTRY)&_ZN8S7539C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7539C10D0Ev,
  (VTBL_ENTRY)&_ZN8S7539C102v5Ev,
  (VTBL_ENTRY)&_ZN8S7539C102v6Ev,
};
extern void _ZN7S7539C32v2Ev();
extern void _ZN7S7539C9D1Ev();
extern void _ZN7S7539C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7539C98S7539C10__A1__7S7539C7[] = {
  ABISELECT(3952,2784),
  ABISELECT(3344,2372),
  ABISELECT(3304,2348),
  ABISELECT(3856,2732),
  ABISELECT(3320,2356),
  0,
  (VTBL_ENTRY)&(_ZTI7S7539C9[0]),
  (VTBL_ENTRY)&_ZN7S7539C32v2Ev,
  (VTBL_ENTRY)&_ZN7S7539C9D1Ev,
  (VTBL_ENTRY)&_ZN7S7539C9D0Ev,
};
extern void _ZN7S7539C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7539C67S7539C98S7539C10__A2__7S7539C7[] = {
  ABISELECT(3224,2304),
  0,
  (VTBL_ENTRY)&(_ZTI7S7539C6[0]),
  (VTBL_ENTRY)&_ZN7S7539C32v2Ev,
};
extern void _ZN7S7539C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7539C27S7539C98S7539C10__A2__7S7539C7[] = {
  ABISELECT(3248,2320),
  0,
  (VTBL_ENTRY)&(_ZTI7S7539C2[0]),
  (VTBL_ENTRY)&_ZN7S7539C22v3Ev,
};
extern void _ZN7S7539C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7539C3__7S7539C27S7539C98S7539C10__A2__7S7539C7[] = {
  0,
  ABISELECT(-3248,-2320),
  (VTBL_ENTRY)&(_ZTI7S7539C2[0]),
  (VTBL_ENTRY)&_ZN7S7539C32v2Ev,
};
extern void _ZN7S7539C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7539C6__A__7S7539C98S7539C10__A1__7S7539C7[] = {
  ABISELECT(3224,2304),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI7S7539C9[0]),
  (VTBL_ENTRY)&_ZN7S7539C32v2Ev,
};
extern void _ZN7S7539C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7539C2__A__7S7539C98S7539C10__A1__7S7539C7[] = {
  ABISELECT(3248,2320),
  ABISELECT(-608,-412),
  (VTBL_ENTRY)&(_ZTI7S7539C9[0]),
  (VTBL_ENTRY)&_ZN7S7539C22v3Ev,
};
extern void _ZN7S7539C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7539C3__A2__7S7539C98S7539C10__A1__7S7539C7[] = {
  0,
  ABISELECT(-3856,-2732),
  (VTBL_ENTRY)&(_ZTI7S7539C9[0]),
  (VTBL_ENTRY)&_ZN7S7539C32v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7539C8__7S7539C98S7539C10__A1__7S7539C7[] = {
  ABISELECT(648,436),
  ABISELECT(552,384),
  ABISELECT(40,24),
  ABISELECT(16,8),
  ABISELECT(-3304,-2348),
  (VTBL_ENTRY)&(_ZTI7S7539C9[0]),
};
extern void _ZN7S7539C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7539C6__A1__7S7539C98S7539C10__A1__7S7539C7[] = {
  0,
  ABISELECT(-24,-16),
  ABISELECT(-3344,-2372),
  (VTBL_ENTRY)&(_ZTI7S7539C9[0]),
  (VTBL_ENTRY)&_ZN7S7539C32v2Ev,
};
extern void _ZN7S7539C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7539C2__A1__7S7539C98S7539C10__A1__7S7539C7[] = {
  0,
  ABISELECT(-96,-52),
  ABISELECT(-3952,-2784),
  (VTBL_ENTRY)&(_ZTI7S7539C9[0]),
  (VTBL_ENTRY)&_ZN7S7539C22v3Ev,
};
extern void _ZN7S7539C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7539C67S7539C9__8S7539C10__7S7539C7[] = {
  ABISELECT(3224,2304),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI8S7539C10[0]),
  (VTBL_ENTRY)&_ZN7S7539C32v2Ev,
};
extern void _ZN7S7539C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7539C27S7539C9__8S7539C10__7S7539C7[] = {
  ABISELECT(3248,2320),
  ABISELECT(-608,-412),
  (VTBL_ENTRY)&(_ZTI8S7539C10[0]),
  (VTBL_ENTRY)&_ZN7S7539C22v3Ev,
};
extern void _ZN7S7539C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7539C3__A2__8S7539C10__7S7539C7[] = {
  0,
  ABISELECT(-3856,-2732),
  (VTBL_ENTRY)&(_ZTI8S7539C10[0]),
  (VTBL_ENTRY)&_ZN7S7539C32v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7539C8__8S7539C10__7S7539C7[] = {
  ABISELECT(648,436),
  ABISELECT(552,384),
  ABISELECT(40,24),
  ABISELECT(16,8),
  ABISELECT(-3304,-2348),
  (VTBL_ENTRY)&(_ZTI8S7539C10[0]),
};
extern void _ZN7S7539C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7539C6__A1__8S7539C10__7S7539C7[] = {
  0,
  ABISELECT(-24,-16),
  ABISELECT(-3344,-2372),
  (VTBL_ENTRY)&(_ZTI8S7539C10[0]),
  (VTBL_ENTRY)&_ZN7S7539C32v2Ev,
};
extern void _ZN7S7539C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7539C2__A1__8S7539C10__7S7539C7[] = {
  0,
  ABISELECT(-96,-52),
  ABISELECT(-3952,-2784),
  (VTBL_ENTRY)&(_ZTI8S7539C10[0]),
  (VTBL_ENTRY)&_ZN7S7539C22v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7539C8__7S7539C7[] = {
  ABISELECT(648,436),
  ABISELECT(552,384),
  ABISELECT(40,24),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7539C8[0]),
};
extern void _ZN7S7539C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7539C6__7S7539C8__7S7539C7[] = {
  0,
  ABISELECT(-24,-16),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S7539C8[0]),
  (VTBL_ENTRY)&_ZN7S7539C32v2Ev,
};
extern void _ZN7S7539C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7539C3__A1__7S7539C8__7S7539C7[] = {
  0,
  ABISELECT(-552,-384),
  (VTBL_ENTRY)&(_ZTI7S7539C8[0]),
  (VTBL_ENTRY)&_ZN7S7539C32v2Ev,
};
extern void _ZN7S7539C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7539C2__7S7539C8__7S7539C7[] = {
  0,
  ABISELECT(-96,-52),
  ABISELECT(-648,-436),
  (VTBL_ENTRY)&(_ZTI7S7539C8[0]),
  (VTBL_ENTRY)&_ZN7S7539C22v3Ev,
};
extern void _ZN7S7539C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7539C6__7S7539C7[] = {
  ABISELECT(-24,-16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7539C6[0]),
  (VTBL_ENTRY)&_ZN7S7539C32v2Ev,
};
extern void _ZN7S7539C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7539C2__7S7539C7[] = {
  ABISELECT(-96,-52),
  0,
  (VTBL_ENTRY)&(_ZTI7S7539C2[0]),
  (VTBL_ENTRY)&_ZN7S7539C22v3Ev,
};
extern void _ZN7S7539C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7539C3__7S7539C2__7S7539C7[] = {
  0,
  ABISELECT(96,52),
  (VTBL_ENTRY)&(_ZTI7S7539C2[0]),
  (VTBL_ENTRY)&_ZN7S7539C32v2Ev,
};
static  VTT_ENTRY vtt_S7539C7[] = {
  {&(_ZTV7S7539C7[7]),  7,59},
  {&(_tg__ZTV7S7539C9__7S7539C7[7]),  7,10},
  {&(_tg__ZTV7S7539C67S7539C9__A1__7S7539C7[3]),  3,4},
  {&(_tg__ZTV7S7539C27S7539C9__A1__7S7539C7[3]),  3,4},
  {&(_tg__ZTV7S7539C3__7S7539C27S7539C9__A1__7S7539C7[3]),  3,4},
  {&(_tg__ZTV7S7539C6__A__7S7539C9__7S7539C7[3]),  3,4},
  {&(_tg__ZTV7S7539C2__A__7S7539C9__7S7539C7[3]),  3,4},
  {&(_tg__ZTV7S7539C3__A2__7S7539C9__7S7539C7[3]),  3,4},
  {&(_tg__ZTV7S7539C8__7S7539C9__7S7539C7[6]),  6,6},
  {&(_tg__ZTV7S7539C6__A1__7S7539C9__7S7539C7[4]),  4,5},
  {&(_tg__ZTV7S7539C2__A1__7S7539C9__7S7539C7[4]),  4,5},
  {&(_tg__ZTV8S7539C10__7S7539C7[7]),  7,12},
  {&(_tg__ZTV7S7539C98S7539C10__A1__7S7539C7[7]),  7,10},
  {&(_tg__ZTV7S7539C67S7539C98S7539C10__A2__7S7539C7[3]),  3,4},
  {&(_tg__ZTV7S7539C27S7539C98S7539C10__A2__7S7539C7[3]),  3,4},
  {&(_tg__ZTV7S7539C3__7S7539C27S7539C98S7539C10__A2__7S7539C7[3]),  3,4},
  {&(_tg__ZTV7S7539C6__A__7S7539C98S7539C10__A1__7S7539C7[3]),  3,4},
  {&(_tg__ZTV7S7539C2__A__7S7539C98S7539C10__A1__7S7539C7[3]),  3,4},
  {&(_tg__ZTV7S7539C3__A2__7S7539C98S7539C10__A1__7S7539C7[3]),  3,4},
  {&(_tg__ZTV7S7539C8__7S7539C98S7539C10__A1__7S7539C7[6]),  6,6},
  {&(_tg__ZTV7S7539C6__A1__7S7539C98S7539C10__A1__7S7539C7[4]),  4,5},
  {&(_tg__ZTV7S7539C2__A1__7S7539C98S7539C10__A1__7S7539C7[4]),  4,5},
  {&(_tg__ZTV7S7539C67S7539C9__8S7539C10__7S7539C7[3]),  3,4},
  {&(_tg__ZTV7S7539C27S7539C9__8S7539C10__7S7539C7[3]),  3,4},
  {&(_tg__ZTV7S7539C3__A2__8S7539C10__7S7539C7[3]),  3,4},
  {&(_tg__ZTV7S7539C8__8S7539C10__7S7539C7[6]),  6,6},
  {&(_tg__ZTV7S7539C6__A1__8S7539C10__7S7539C7[4]),  4,5},
  {&(_tg__ZTV7S7539C2__A1__8S7539C10__7S7539C7[4]),  4,5},
  {&(_ZTV7S7539C7[45]),  45,59},
  {&(_ZTV7S7539C7[49]),  49,59},
  {&(_ZTV7S7539C7[53]),  53,59},
  {&(_ZTV7S7539C7[58]),  58,59},
  {&(_ZTV7S7539C7[14]),  14,59},
  {&(_ZTV7S7539C7[18]),  18,59},
  {&(_ZTV7S7539C7[26]),  26,59},
  {&(_ZTV7S7539C7[34]),  34,59},
  {&(_ZTV7S7539C7[38]),  38,59},
  {&(_tg__ZTV7S7539C8__7S7539C7[6]),  6,6},
  {&(_tg__ZTV7S7539C6__7S7539C8__7S7539C7[4]),  4,5},
  {&(_tg__ZTV7S7539C3__A1__7S7539C8__7S7539C7[3]),  3,4},
  {&(_tg__ZTV7S7539C2__7S7539C8__7S7539C7[4]),  4,5},
  {&(_tg__ZTV7S7539C6__7S7539C7[3]),  3,4},
  {&(_tg__ZTV7S7539C2__7S7539C7[3]),  3,4},
  {&(_tg__ZTV7S7539C3__7S7539C2__7S7539C7[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S7539C7[];
extern  VTBL_ENTRY _ZTV7S7539C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7539C7[];
Class_Descriptor cd_S7539C7 = {  "S7539C7", // class name
  bases_S7539C7, 17,
  &(vtc_S7539C7[0]), // expected_vtbl_contents
  &(vtt_S7539C7[0]), // expected_vtt_contents
  ABISELECT(6944,4956), // object size
  NSPAIRA(_ZTI7S7539C7),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7539C7),59, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7539C7),44, //virtual table table var
  16, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7539C5  : virtual S7539C3 , virtual S7539C6 , virtual S7539C7 {
  void *s7539c5f0;
  __tsi64 s7539c5f1;
  char s7539c5f2[9];
  long double s7539c5f3;
  int s7539c5f4;
  long s7539c5f5;
  virtual  ~S7539C5(); // _ZN7S7539C5D2Ev
  virtual void  v4(); // _ZN7S7539C52v4Ev
  S7539C5(); // tgen
};
//SIG(-1 S7539C5) C1{ VBC2{ v2 FD Fi:3 Fc:8 FD[2] FL} VBC3{ BC2 VBC4{ m FL Fi Fc} Fc[10] Fi FC5{ VBC2 v3 FC4 FL FC4[7] Fp FL FC4 Fp Fc Fs Fi FC2} FL} VBC6{ VBC7{ VBC4 VBC3 VBC2 VBC5 Fp} BC8{ BC2 VBC4 BC3 BC5 VBC7 vd FC5 FC7 Fp Fi FC2 FC5} BC9{ BC8 vd v4 v5 Fp Fs:6 FC2 FD Fi FC4 FC5 Fp Fi Fp[2]} v6 Fi Fc Fp Fl} vd v1 Fp FL Fc[9] FD Fi Fl}


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

static void Test_S7539C5()
{
  extern Class_Descriptor cd_S7539C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(440,1252)];
    init_test(&cd_S7539C5, buf);
    S7539C5 *dp, &lv = *(dp=new (buf) S7539C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(7024,5004), "sizeof(S7539C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7539C5)");
    /*is_ambiguous_... S7539C5::S7539C3 */ AMB_check_base_class_offset(lv, (S7539C3*), ABISELECT(80,48), "S7539C5");
    /*is_ambiguous_... S7539C8::S7539C3 */ AMB_check_base_class_offset(lv, (S7539C3*)(S7539C8*), ABISELECT(80,48), "S7539C5");
    /*is_ambiguous_... S7539C5::S7539C2 */ AMB_check_base_class_offset(lv, (S7539C3*)(S7539C2*), ABISELECT(80,48), "S7539C5");
    /*is_ambiguous_... S7539C7::S7539C9 */ AMB_check_base_class_offset(lv, (S7539C3*)(S7539C2*)(S7539C9*)(S7539C7*), ABISELECT(80,48), "S7539C5");
    /*is_ambiguous_... S7539C9::S7539C2 */ AMB_check_base_class_offset(lv, (S7539C3*)(S7539C2*)(S7539C9*)(S7539C10*)(S7539C7*), ABISELECT(80,48), "S7539C5");
    /*is_ambiguous_... S7539C5::S7539C6 */ AMB_check_base_class_offset(lv, (S7539C3*)(S7539C6*), ABISELECT(176,100), "S7539C5");
    /*is_ambiguous_... S7539C5::S7539C6 */ AMB_check_base_class_offset(lv, (S3490C4*)(S7539C6*), ABISELECT(680,460), "S7539C5");
    check_base_class_offset(lv, (S3490C4*)(S7539C8*), ABISELECT(680,460), "S7539C5");
    /*is_ambiguous_... S7539C7::S7539C9 */ AMB_check_base_class_offset(lv, (S3490C4*)(S7539C9*)(S7539C7*), ABISELECT(680,460), "S7539C5");
    /*is_ambiguous_... S7539C7::S7539C9 */ AMB_check_base_class_offset(lv, (S3490C4*)(S7539C6*)(S7539C9*)(S7539C7*), ABISELECT(680,460), "S7539C5");
    check_base_class_offset(lv, (S3490C4*)(S7539C9*)(S7539C10*)(S7539C7*), ABISELECT(680,460), "S7539C5");
    /*is_ambiguous_... S7539C9::S7539C6 */ AMB_check_base_class_offset(lv, (S3490C4*)(S7539C6*)(S7539C9*)(S7539C10*)(S7539C7*), ABISELECT(680,460), "S7539C5");
    /*is_ambiguous_... S7539C5::S7539C6 */ AMB_check_base_class_offset(lv, (S7539C6*), ABISELECT(176,100), "S7539C5");
    check_base_class_offset(lv, (S7539C6*)(S7539C8*), ABISELECT(176,100), "S7539C5");
    check_base_class_offset(lv, (S7539C2*)(S7539C8*), ABISELECT(6736,4772), "S7539C5");
    check_base_class_offset(lv, (S7539C8*)(S7539C7*), ABISELECT(6712,4764), "S7539C5");
    /*is_ambiguous_... S7539C7::S7539C9 */ AMB_check_base_class_offset(lv, (S7539C8*)(S7539C9*)(S7539C7*), ABISELECT(6712,4764), "S7539C5");
    check_base_class_offset(lv, (S7539C8*)(S7539C9*)(S7539C10*)(S7539C7*), ABISELECT(6712,4764), "S7539C5");
    /*is_ambiguous_... S7539C7::S7539C9 */ AMB_check_base_class_offset(lv, (S7539C3*)(S7539C9*)(S7539C7*), ABISELECT(704,476), "S7539C5");
    /*is_ambiguous_... S7539C7::S7539C9 */ AMB_check_base_class_offset(lv, (S7539C3*)(S7539C6*)(S7539C9*)(S7539C7*), ABISELECT(800,528), "S7539C5");
    /*is_ambiguous_... S7539C7::S7539C9 */ AMB_check_base_class_offset(lv, (S7539C6*)(S7539C9*)(S7539C7*), ABISELECT(800,528), "S7539C5");
    /*is_ambiguous_... S7539C7::S7539C9 */ AMB_check_base_class_offset(lv, (S7539C2*)(S7539C9*)(S7539C7*), ABISELECT(1312,888), "S7539C5");
    /*is_ambiguous_... S7539C7::S7539C9 */ AMB_check_base_class_offset(lv, (S7539C9*)(S7539C7*), ABISELECT(704,476), "S7539C5");
    /*is_ambiguous_... S7539C9::S7539C3 */ AMB_check_base_class_offset(lv, (S7539C3*)(S7539C9*)(S7539C10*)(S7539C7*), ABISELECT(3408,2416), "S7539C5");
    /*is_ambiguous_... S7539C9::S7539C6 */ AMB_check_base_class_offset(lv, (S7539C3*)(S7539C6*)(S7539C9*)(S7539C10*)(S7539C7*), ABISELECT(3504,2468), "S7539C5");
    /*is_ambiguous_... S7539C9::S7539C6 */ AMB_check_base_class_offset(lv, (S7539C6*)(S7539C9*)(S7539C10*)(S7539C7*), ABISELECT(3504,2468), "S7539C5");
    /*is_ambiguous_... S7539C9::S7539C2 */ AMB_check_base_class_offset(lv, (S7539C2*)(S7539C9*)(S7539C10*)(S7539C7*), ABISELECT(4016,2828), "S7539C5");
    check_base_class_offset(lv, (S7539C9*)(S7539C10*)(S7539C7*), ABISELECT(3408,2416), "S7539C5");
    check_base_class_offset(lv, (S7539C10*)(S7539C7*), ABISELECT(3408,2416), "S7539C5");
    check_base_class_offset(lv, (S7539C7*), ABISELECT(704,476), "S7539C5");
    check_field_offset(lv, s7539c5f0, ABISELECT(8,4), "S7539C5.s7539c5f0");
    check_field_offset(lv, s7539c5f1, ABISELECT(16,8), "S7539C5.s7539c5f1");
    check_field_offset(lv, s7539c5f2, ABISELECT(24,16), "S7539C5.s7539c5f2");
    check_field_offset(lv, s7539c5f3, ABISELECT(48,28), "S7539C5.s7539c5f3");
    check_field_offset(lv, s7539c5f4, ABISELECT(64,40), "S7539C5.s7539c5f4");
    check_field_offset(lv, s7539c5f5, ABISELECT(72,44), "S7539C5.s7539c5f5");
    test_class_info(&lv, &cd_S7539C5);
    dp->~S7539C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7539C5(Test_S7539C5, "S7539C5", ABISELECT(7024,5004));

#else // __cplusplus

extern void _ZN7S7539C5C1Ev();
extern void _ZN7S7539C5D2Ev();
Name_Map name_map_S7539C5[] = {
  NSPAIR(_ZN7S7539C5C1Ev),
  NSPAIR(_ZN7S7539C5D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7539C3;
extern VTBL_ENTRY _ZTI7S7539C3[];
extern  VTBL_ENTRY _ZTV7S7539C3[];
extern Class_Descriptor cd_S7539C3;
extern VTBL_ENTRY _ZTI7S7539C3[];
extern  VTBL_ENTRY _ZTV7S7539C3[];
extern Class_Descriptor cd_S3490C4;
extern VTBL_ENTRY _ZTI7S3490C4[];
extern Class_Descriptor cd_S7539C6;
extern VTBL_ENTRY _ZTI7S7539C6[];
extern  VTBL_ENTRY _ZTV7S7539C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7539C6[];
extern Class_Descriptor cd_S7539C2;
extern VTBL_ENTRY _ZTI7S7539C2[];
extern  VTBL_ENTRY _ZTV7S7539C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7539C2[];
extern Class_Descriptor cd_S7539C8;
extern VTBL_ENTRY _ZTI7S7539C8[];
extern  VTBL_ENTRY _ZTV7S7539C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7539C8[];
extern Class_Descriptor cd_S7539C3;
extern VTBL_ENTRY _ZTI7S7539C3[];
extern  VTBL_ENTRY _ZTV7S7539C3[];
extern Class_Descriptor cd_S7539C3;
extern VTBL_ENTRY _ZTI7S7539C3[];
extern  VTBL_ENTRY _ZTV7S7539C3[];
extern Class_Descriptor cd_S7539C6;
extern VTBL_ENTRY _ZTI7S7539C6[];
extern  VTBL_ENTRY _ZTV7S7539C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7539C6[];
extern Class_Descriptor cd_S7539C2;
extern VTBL_ENTRY _ZTI7S7539C2[];
extern  VTBL_ENTRY _ZTV7S7539C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7539C2[];
extern Class_Descriptor cd_S7539C9;
extern VTBL_ENTRY _ZTI7S7539C9[];
extern  VTBL_ENTRY _ZTV7S7539C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7539C9[];
extern Class_Descriptor cd_S7539C3;
extern VTBL_ENTRY _ZTI7S7539C3[];
extern  VTBL_ENTRY _ZTV7S7539C3[];
extern Class_Descriptor cd_S7539C3;
extern VTBL_ENTRY _ZTI7S7539C3[];
extern  VTBL_ENTRY _ZTV7S7539C3[];
extern Class_Descriptor cd_S7539C6;
extern VTBL_ENTRY _ZTI7S7539C6[];
extern  VTBL_ENTRY _ZTV7S7539C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7539C6[];
extern Class_Descriptor cd_S7539C2;
extern VTBL_ENTRY _ZTI7S7539C2[];
extern  VTBL_ENTRY _ZTV7S7539C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7539C2[];
extern Class_Descriptor cd_S7539C9;
extern VTBL_ENTRY _ZTI7S7539C9[];
extern  VTBL_ENTRY _ZTV7S7539C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7539C9[];
extern Class_Descriptor cd_S7539C10;
extern VTBL_ENTRY _ZTI8S7539C10[];
extern  VTBL_ENTRY _ZTV8S7539C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7539C10[];
extern Class_Descriptor cd_S7539C7;
extern VTBL_ENTRY _ZTI7S7539C7[];
extern  VTBL_ENTRY _ZTV7S7539C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7539C7[];
static Base_Class bases_S7539C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7539C3,    ABISELECT(80,48), //bcp->offset
    11, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7539C3,    ABISELECT(176,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3490C4,    ABISELECT(680,460), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7539C6,    ABISELECT(176,100), //bcp->offset
    15, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7539C2,    ABISELECT(6736,4772), //bcp->offset
    71, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    54, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S7539C8,    ABISELECT(6712,4764), //bcp->offset
    65, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    50, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S7539C3,    ABISELECT(704,476), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7539C3,    ABISELECT(800,528), //bcp->offset
    -1, //bcp->virtual_function_table_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_S7539C6,    ABISELECT(800,528), //bcp->offset
    37, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7539C2,    ABISELECT(1312,888), //bcp->offset
    41, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7539C9,    ABISELECT(704,476), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S7539C3,    ABISELECT(3408,2416), //bcp->offset
    -1, //bcp->virtual_function_table_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
    15, //immediately_derived
  0, 0},
  {&cd_S7539C3,    ABISELECT(3504,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
    12, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7539C6,    ABISELECT(3504,2468), //bcp->offset
    57, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S7539C2,    ABISELECT(4016,2828), //bcp->offset
    61, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S7539C9,    ABISELECT(3408,2416), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S7539C10,    ABISELECT(3408,2416), //bcp->offset
    45, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S7539C7,    ABISELECT(704,476), //bcp->offset
    20, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7539C5[];
extern void _ZN7S7539C5D1Ev();
extern void _ZN7S7539C5D0Ev();
extern void _ZN7S7539C52v4Ev();
extern void _ZN7S7539C32v2Ev();
extern void _ZN7S7539C32v2Ev();
extern void _ZN7S7539C32v2Ev();
extern void ABISELECT(_ZTv0_n72_N7S7539C5D1Ev,_ZTv0_n36_N7S7539C5D1Ev)();
extern void ABISELECT(_ZThn704_N7S7539C5D1Ev,_ZThn476_N7S7539C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S7539C5D0Ev,_ZTv0_n36_N7S7539C5D0Ev)();
extern void ABISELECT(_ZThn704_N7S7539C5D0Ev,_ZThn476_N7S7539C5D0Ev)() __attribute__((weak));
extern void _ZN7S7539C72v7Ev();
extern void _ZN7S7539C32v2Ev();
extern void _ZN7S7539C22v3Ev();
extern void _ZN7S7539C32v2Ev();
extern void ABISELECT(_ZTvn2704_n72_N7S7539C5D1Ev,_ZTvn1940_n36_N7S7539C5D1Ev)();
extern void ABISELECT(_ZTvn2704_n72_N7S7539C5D0Ev,_ZTvn1940_n36_N7S7539C5D0Ev)();
extern void _ZN8S7539C102v5Ev();
extern void _ZN8S7539C102v6Ev();
extern void _ZN7S7539C32v2Ev();
extern void _ZN7S7539C22v3Ev();
extern void _ZN7S7539C22v3Ev();
static  VTBL_ENTRY vtc_S7539C5[] = {
  ABISELECT(6736,4772),
  ABISELECT(6712,4764),
  ABISELECT(704,476),
  ABISELECT(680,460),
  ABISELECT(176,100),
  ABISELECT(80,48),
  0,
  (VTBL_ENTRY)&(_ZTI7S7539C5[0]),
  (VTBL_ENTRY)&_ZN7S7539C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7539C5D0Ev,
  (VTBL_ENTRY)&_ZN7S7539C52v4Ev,
  0,
  ABISELECT(-80,-48),
  (VTBL_ENTRY)&(_ZTI7S7539C5[0]),
  (VTBL_ENTRY)&_ZN7S7539C32v2Ev,
  0,
  ABISELECT(504,360),
  ABISELECT(-176,-100),
  (VTBL_ENTRY)&(_ZTI7S7539C5[0]),
  (VTBL_ENTRY)&_ZN7S7539C32v2Ev,
  ABISELECT(2704,1940),
  ABISELECT(2704,1940),
  0,
  ABISELECT(608,412),
  ABISELECT(-704,-476),
  0,
  ABISELECT(6032,4296),
  ABISELECT(-528,-376),
  ABISELECT(6008,4288),
  ABISELECT(-624,-428),
  ABISELECT(-24,-16),
  ABISELECT(-704,-476),
  (VTBL_ENTRY)&(_ZTI7S7539C5[0]),
  (VTBL_ENTRY)&_ZN7S7539C32v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S7539C5D1Ev,_ZTv0_n36_N7S7539C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S7539C5D0Ev,_ZTv0_n36_N7S7539C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7539C72v7Ev,
  ABISELECT(-120,-68),
  ABISELECT(-800,-528),
  (VTBL_ENTRY)&(_ZTI7S7539C5[0]),
  (VTBL_ENTRY)&_ZN7S7539C32v2Ev,
  ABISELECT(-1232,-840),
  ABISELECT(-1312,-888),
  (VTBL_ENTRY)&(_ZTI7S7539C5[0]),
  (VTBL_ENTRY)&_ZN7S7539C22v3Ev,
  ABISELECT(3328,2356),
  ABISELECT(-3232,-2316),
  ABISELECT(3304,2348),
  ABISELECT(-3328,-2368),
  ABISELECT(-2728,-1956),
  ABISELECT(-3408,-2416),
  (VTBL_ENTRY)&(_ZTI7S7539C5[0]),
  (VTBL_ENTRY)&_ZN7S7539C32v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTvn2704_n72_N7S7539C5D1Ev,_ZTvn1940_n36_N7S7539C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn2704_n72_N7S7539C5D0Ev,_ZTvn1940_n36_N7S7539C5D0Ev),
  (VTBL_ENTRY)&_ZN8S7539C102v5Ev,
  (VTBL_ENTRY)&_ZN8S7539C102v6Ev,
  ABISELECT(-2824,-2008),
  ABISELECT(-3504,-2468),
  (VTBL_ENTRY)&(_ZTI7S7539C5[0]),
  (VTBL_ENTRY)&_ZN7S7539C32v2Ev,
  ABISELECT(-3936,-2780),
  ABISELECT(-4016,-2828),
  (VTBL_ENTRY)&(_ZTI7S7539C5[0]),
  (VTBL_ENTRY)&_ZN7S7539C22v3Ev,
  ABISELECT(24,8),
  ABISELECT(-6632,-4716),
  ABISELECT(-6536,-4664),
  ABISELECT(-6032,-4304),
  ABISELECT(-6712,-4764),
  (VTBL_ENTRY)&(_ZTI7S7539C5[0]),
  0,
  ABISELECT(-6656,-4724),
  ABISELECT(-6736,-4772),
  (VTBL_ENTRY)&(_ZTI7S7539C5[0]),
  (VTBL_ENTRY)&_ZN7S7539C22v3Ev,
};
extern VTBL_ENTRY _ZTV7S7539C5[];
extern void _ZN7S7539C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7539C6__7S7539C5[] = {
  ABISELECT(504,360),
  0,
  (VTBL_ENTRY)&(_ZTI7S7539C6[0]),
  (VTBL_ENTRY)&_ZN7S7539C32v2Ev,
};
extern void _ZN7S7539C32v2Ev();
extern void _ZN7S7539C7D1Ev();
extern void _ZN7S7539C7D0Ev();
extern void _ZN7S7539C72v7Ev();
static  VTBL_ENTRY _tg__ZTV7S7539C7__7S7539C5[] = {
  ABISELECT(6032,4296),
  ABISELECT(-528,-376),
  ABISELECT(6008,4288),
  ABISELECT(-624,-428),
  ABISELECT(-24,-16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7539C7[0]),
  (VTBL_ENTRY)&_ZN7S7539C32v2Ev,
  (VTBL_ENTRY)&_ZN7S7539C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7539C7D0Ev,
  (VTBL_ENTRY)&_ZN7S7539C72v7Ev,
};
extern void _ZN7S7539C32v2Ev();
extern void _ZN7S7539C9D1Ev();
extern void _ZN7S7539C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7539C97S7539C7__7S7539C5[] = {
  ABISELECT(6032,4296),
  ABISELECT(-528,-376),
  ABISELECT(6008,4288),
  ABISELECT(-624,-428),
  ABISELECT(-24,-16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7539C9[0]),
  (VTBL_ENTRY)&_ZN7S7539C32v2Ev,
  (VTBL_ENTRY)&_ZN7S7539C9D1Ev,
  (VTBL_ENTRY)&_ZN7S7539C9D0Ev,
};
extern void _ZN7S7539C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7539C67S7539C97S7539C7__A1__7S7539C5[] = {
  ABISELECT(-120,-68),
  0,
  (VTBL_ENTRY)&(_ZTI7S7539C6[0]),
  (VTBL_ENTRY)&_ZN7S7539C32v2Ev,
};
extern void _ZN7S7539C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7539C27S7539C97S7539C7__A1__7S7539C5[] = {
  ABISELECT(-1232,-840),
  0,
  (VTBL_ENTRY)&(_ZTI7S7539C2[0]),
  (VTBL_ENTRY)&_ZN7S7539C22v3Ev,
};
extern void _ZN7S7539C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7539C3__7S7539C27S7539C97S7539C7__A1__7S7539C5[] = {
  0,
  ABISELECT(1232,840),
  (VTBL_ENTRY)&(_ZTI7S7539C2[0]),
  (VTBL_ENTRY)&_ZN7S7539C32v2Ev,
};
extern void _ZN7S7539C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7539C6__A__7S7539C97S7539C7__7S7539C5[] = {
  ABISELECT(-120,-68),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI7S7539C9[0]),
  (VTBL_ENTRY)&_ZN7S7539C32v2Ev,
};
extern void _ZN7S7539C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7539C2__A__7S7539C97S7539C7__7S7539C5[] = {
  ABISELECT(-1232,-840),
  ABISELECT(-608,-412),
  (VTBL_ENTRY)&(_ZTI7S7539C9[0]),
  (VTBL_ENTRY)&_ZN7S7539C22v3Ev,
};
extern void _ZN7S7539C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7539C3__A2__7S7539C97S7539C7__7S7539C5[] = {
  0,
  ABISELECT(624,428),
  (VTBL_ENTRY)&(_ZTI7S7539C9[0]),
  (VTBL_ENTRY)&_ZN7S7539C32v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7539C8__7S7539C97S7539C7__7S7539C5[] = {
  ABISELECT(24,8),
  ABISELECT(-6632,-4716),
  ABISELECT(-6536,-4664),
  ABISELECT(-6032,-4304),
  ABISELECT(-6008,-4288),
  (VTBL_ENTRY)&(_ZTI7S7539C9[0]),
};
extern void _ZN7S7539C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7539C6__A1__7S7539C97S7539C7__7S7539C5[] = {
  0,
  ABISELECT(504,360),
  ABISELECT(528,376),
  (VTBL_ENTRY)&(_ZTI7S7539C9[0]),
  (VTBL_ENTRY)&_ZN7S7539C32v2Ev,
};
extern void _ZN7S7539C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7539C2__A1__7S7539C97S7539C7__7S7539C5[] = {
  0,
  ABISELECT(-6656,-4724),
  ABISELECT(-6032,-4296),
  (VTBL_ENTRY)&(_ZTI7S7539C9[0]),
  (VTBL_ENTRY)&_ZN7S7539C22v3Ev,
};
extern void _ZN7S7539C32v2Ev();
extern void _ZN8S7539C10D1Ev();
extern void _ZN8S7539C10D0Ev();
extern void _ZN8S7539C102v5Ev();
extern void _ZN8S7539C102v6Ev();
static  VTBL_ENTRY _tg__ZTV8S7539C107S7539C7__7S7539C5[] = {
  ABISELECT(3328,2356),
  ABISELECT(-3232,-2316),
  ABISELECT(3304,2348),
  ABISELECT(-3328,-2368),
  ABISELECT(-2728,-1956),
  0,
  (VTBL_ENTRY)&(_ZTI8S7539C10[0]),
  (VTBL_ENTRY)&_ZN7S7539C32v2Ev,
  (VTBL_ENTRY)&_ZN8S7539C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7539C10D0Ev,
  (VTBL_ENTRY)&_ZN8S7539C102v5Ev,
  (VTBL_ENTRY)&_ZN8S7539C102v6Ev,
};
extern void _ZN7S7539C32v2Ev();
extern void _ZN7S7539C9D1Ev();
extern void _ZN7S7539C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7539C98S7539C107S7539C7__A1__7S7539C5[] = {
  ABISELECT(3328,2356),
  ABISELECT(-3232,-2316),
  ABISELECT(3304,2348),
  ABISELECT(-3328,-2368),
  ABISELECT(-2728,-1956),
  0,
  (VTBL_ENTRY)&(_ZTI7S7539C9[0]),
  (VTBL_ENTRY)&_ZN7S7539C32v2Ev,
  (VTBL_ENTRY)&_ZN7S7539C9D1Ev,
  (VTBL_ENTRY)&_ZN7S7539C9D0Ev,
};
extern void _ZN7S7539C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7539C67S7539C98S7539C107S7539C7__A2__7S7539C5[] = {
  ABISELECT(-2824,-2008),
  0,
  (VTBL_ENTRY)&(_ZTI7S7539C6[0]),
  (VTBL_ENTRY)&_ZN7S7539C32v2Ev,
};
extern void _ZN7S7539C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7539C27S7539C98S7539C107S7539C7__A2__7S7539C5[] = {
  ABISELECT(-3936,-2780),
  0,
  (VTBL_ENTRY)&(_ZTI7S7539C2[0]),
  (VTBL_ENTRY)&_ZN7S7539C22v3Ev,
};
extern void _ZN7S7539C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7539C3__7S7539C27S7539C98S7539C107S7539C7__A2__7S7539C5[] = {
  0,
  ABISELECT(3936,2780),
  (VTBL_ENTRY)&(_ZTI7S7539C2[0]),
  (VTBL_ENTRY)&_ZN7S7539C32v2Ev,
};
extern void _ZN7S7539C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7539C6__A__7S7539C98S7539C107S7539C7__A1__7S7539C5[] = {
  ABISELECT(-2824,-2008),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI7S7539C9[0]),
  (VTBL_ENTRY)&_ZN7S7539C32v2Ev,
};
extern void _ZN7S7539C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7539C2__A__7S7539C98S7539C107S7539C7__A1__7S7539C5[] = {
  ABISELECT(-3936,-2780),
  ABISELECT(-608,-412),
  (VTBL_ENTRY)&(_ZTI7S7539C9[0]),
  (VTBL_ENTRY)&_ZN7S7539C22v3Ev,
};
extern void _ZN7S7539C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7539C3__A2__7S7539C98S7539C107S7539C7__A1__7S7539C5[] = {
  0,
  ABISELECT(3328,2368),
  (VTBL_ENTRY)&(_ZTI7S7539C9[0]),
  (VTBL_ENTRY)&_ZN7S7539C32v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7539C8__7S7539C98S7539C107S7539C7__A1__7S7539C5[] = {
  ABISELECT(24,8),
  ABISELECT(-6632,-4716),
  ABISELECT(-6536,-4664),
  ABISELECT(-6032,-4304),
  ABISELECT(-3304,-2348),
  (VTBL_ENTRY)&(_ZTI7S7539C9[0]),
};
extern void _ZN7S7539C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7539C6__A1__7S7539C98S7539C107S7539C7__A1__7S7539C5[] = {
  0,
  ABISELECT(504,360),
  ABISELECT(3232,2316),
  (VTBL_ENTRY)&(_ZTI7S7539C9[0]),
  (VTBL_ENTRY)&_ZN7S7539C32v2Ev,
};
extern void _ZN7S7539C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7539C2__A1__7S7539C98S7539C107S7539C7__A1__7S7539C5[] = {
  0,
  ABISELECT(-6656,-4724),
  ABISELECT(-3328,-2356),
  (VTBL_ENTRY)&(_ZTI7S7539C9[0]),
  (VTBL_ENTRY)&_ZN7S7539C22v3Ev,
};
extern void _ZN7S7539C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7539C67S7539C9__8S7539C107S7539C7__7S7539C5[] = {
  ABISELECT(-2824,-2008),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI8S7539C10[0]),
  (VTBL_ENTRY)&_ZN7S7539C32v2Ev,
};
extern void _ZN7S7539C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7539C27S7539C9__8S7539C107S7539C7__7S7539C5[] = {
  ABISELECT(-3936,-2780),
  ABISELECT(-608,-412),
  (VTBL_ENTRY)&(_ZTI8S7539C10[0]),
  (VTBL_ENTRY)&_ZN7S7539C22v3Ev,
};
extern void _ZN7S7539C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7539C3__A2__8S7539C107S7539C7__7S7539C5[] = {
  0,
  ABISELECT(3328,2368),
  (VTBL_ENTRY)&(_ZTI8S7539C10[0]),
  (VTBL_ENTRY)&_ZN7S7539C32v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7539C8__8S7539C107S7539C7__7S7539C5[] = {
  ABISELECT(24,8),
  ABISELECT(-6632,-4716),
  ABISELECT(-6536,-4664),
  ABISELECT(-6032,-4304),
  ABISELECT(-3304,-2348),
  (VTBL_ENTRY)&(_ZTI8S7539C10[0]),
};
extern void _ZN7S7539C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7539C6__A1__8S7539C107S7539C7__7S7539C5[] = {
  0,
  ABISELECT(504,360),
  ABISELECT(3232,2316),
  (VTBL_ENTRY)&(_ZTI8S7539C10[0]),
  (VTBL_ENTRY)&_ZN7S7539C32v2Ev,
};
extern void _ZN7S7539C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7539C2__A1__8S7539C107S7539C7__7S7539C5[] = {
  0,
  ABISELECT(-6656,-4724),
  ABISELECT(-3328,-2356),
  (VTBL_ENTRY)&(_ZTI8S7539C10[0]),
  (VTBL_ENTRY)&_ZN7S7539C22v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7539C8__7S7539C7__7S7539C5[] = {
  ABISELECT(24,8),
  ABISELECT(-6632,-4716),
  ABISELECT(-6536,-4664),
  ABISELECT(-6032,-4304),
  ABISELECT(-6008,-4288),
  (VTBL_ENTRY)&(_ZTI7S7539C7[0]),
};
extern void _ZN7S7539C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7539C6__7S7539C7__7S7539C5[] = {
  0,
  ABISELECT(504,360),
  ABISELECT(528,376),
  (VTBL_ENTRY)&(_ZTI7S7539C7[0]),
  (VTBL_ENTRY)&_ZN7S7539C32v2Ev,
};
extern void _ZN7S7539C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7539C3__A1__7S7539C7__7S7539C5[] = {
  0,
  ABISELECT(624,428),
  (VTBL_ENTRY)&(_ZTI7S7539C7[0]),
  (VTBL_ENTRY)&_ZN7S7539C32v2Ev,
};
extern void _ZN7S7539C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7539C2__7S7539C7__7S7539C5[] = {
  0,
  ABISELECT(-6656,-4724),
  ABISELECT(-6032,-4296),
  (VTBL_ENTRY)&(_ZTI7S7539C7[0]),
  (VTBL_ENTRY)&_ZN7S7539C22v3Ev,
};
extern void _ZN7S7539C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7539C67S7539C9__A1__7S7539C7__7S7539C5[] = {
  ABISELECT(-120,-68),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI7S7539C7[0]),
  (VTBL_ENTRY)&_ZN7S7539C32v2Ev,
};
extern void _ZN7S7539C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7539C27S7539C9__A1__7S7539C7__7S7539C5[] = {
  ABISELECT(-1232,-840),
  ABISELECT(-608,-412),
  (VTBL_ENTRY)&(_ZTI7S7539C7[0]),
  (VTBL_ENTRY)&_ZN7S7539C22v3Ev,
};
extern void _ZN7S7539C32v2Ev();
extern void ABISELECT(_ZThn2704_N7S7539C7D1Ev,_ZThn1940_N7S7539C7D1Ev)();
extern void ABISELECT(_ZThn2704_N7S7539C7D0Ev,_ZThn1940_N7S7539C7D0Ev)();
extern void _ZN8S7539C102v5Ev();
extern void _ZN8S7539C102v6Ev();
static  VTBL_ENTRY _tg__ZTV8S7539C10__7S7539C7__7S7539C5[] = {
  ABISELECT(3328,2356),
  ABISELECT(-3232,-2316),
  ABISELECT(3304,2348),
  ABISELECT(-3328,-2368),
  ABISELECT(-2728,-1956),
  ABISELECT(-2704,-1940),
  (VTBL_ENTRY)&(_ZTI7S7539C7[0]),
  (VTBL_ENTRY)&_ZN7S7539C32v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn2704_N7S7539C7D1Ev,_ZThn1940_N7S7539C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2704_N7S7539C7D0Ev,_ZThn1940_N7S7539C7D0Ev),
  (VTBL_ENTRY)&_ZN8S7539C102v5Ev,
  (VTBL_ENTRY)&_ZN8S7539C102v6Ev,
};
extern void _ZN7S7539C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7539C67S7539C98S7539C10__A2__7S7539C7__7S7539C5[] = {
  ABISELECT(-2824,-2008),
  ABISELECT(-2800,-1992),
  (VTBL_ENTRY)&(_ZTI7S7539C7[0]),
  (VTBL_ENTRY)&_ZN7S7539C32v2Ev,
};
extern void _ZN7S7539C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7539C27S7539C98S7539C10__A2__7S7539C7__7S7539C5[] = {
  ABISELECT(-3936,-2780),
  ABISELECT(-3312,-2352),
  (VTBL_ENTRY)&(_ZTI7S7539C7[0]),
  (VTBL_ENTRY)&_ZN7S7539C22v3Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7539C8__7S7539C5[] = {
  ABISELECT(24,8),
  ABISELECT(-6632,-4716),
  ABISELECT(-6536,-4664),
  ABISELECT(-6032,-4304),
  0,
  (VTBL_ENTRY)&(_ZTI7S7539C8[0]),
};
extern void _ZN7S7539C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7539C6__7S7539C8__7S7539C5[] = {
  0,
  ABISELECT(504,360),
  ABISELECT(6536,4664),
  (VTBL_ENTRY)&(_ZTI7S7539C8[0]),
  (VTBL_ENTRY)&_ZN7S7539C32v2Ev,
};
extern void _ZN7S7539C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7539C3__A1__7S7539C8__7S7539C5[] = {
  0,
  ABISELECT(6632,4716),
  (VTBL_ENTRY)&(_ZTI7S7539C8[0]),
  (VTBL_ENTRY)&_ZN7S7539C32v2Ev,
};
extern void _ZN7S7539C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7539C2__7S7539C8__7S7539C5[] = {
  0,
  ABISELECT(-6656,-4724),
  ABISELECT(-24,-8),
  (VTBL_ENTRY)&(_ZTI7S7539C8[0]),
  (VTBL_ENTRY)&_ZN7S7539C22v3Ev,
};
extern void _ZN7S7539C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7539C2__7S7539C5[] = {
  ABISELECT(-6656,-4724),
  0,
  (VTBL_ENTRY)&(_ZTI7S7539C2[0]),
  (VTBL_ENTRY)&_ZN7S7539C22v3Ev,
};
extern void _ZN7S7539C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7539C3__7S7539C2__7S7539C5[] = {
  0,
  ABISELECT(6656,4724),
  (VTBL_ENTRY)&(_ZTI7S7539C2[0]),
  (VTBL_ENTRY)&_ZN7S7539C32v2Ev,
};
static  VTT_ENTRY vtt_S7539C5[] = {
  {&(_ZTV7S7539C5[8]),  8,76},
  {&(_ZTV7S7539C5[14]),  14,76},
  {&(_ZTV7S7539C5[19]),  19,76},
  {&(_ZTV7S7539C5[33]),  33,76},
  {&(_ZTV7S7539C5[71]),  71,76},
  {&(_ZTV7S7539C5[75]),  75,76},
  {&(_ZTV7S7539C5[40]),  40,76},
  {&(_ZTV7S7539C5[44]),  44,76},
  {&(_ZTV7S7539C5[52]),  52,76},
  {&(_ZTV7S7539C5[60]),  60,76},
  {&(_ZTV7S7539C5[64]),  64,76},
  {&(_tg__ZTV7S7539C6__7S7539C5[3]),  3,4},
  {&(_tg__ZTV7S7539C7__7S7539C5[7]),  7,11},
  {&(_tg__ZTV7S7539C97S7539C7__7S7539C5[7]),  7,10},
  {&(_tg__ZTV7S7539C67S7539C97S7539C7__A1__7S7539C5[3]),  3,4},
  {&(_tg__ZTV7S7539C27S7539C97S7539C7__A1__7S7539C5[3]),  3,4},
  {&(_tg__ZTV7S7539C3__7S7539C27S7539C97S7539C7__A1__7S7539C5[3]),  3,4},
  {&(_tg__ZTV7S7539C6__A__7S7539C97S7539C7__7S7539C5[3]),  3,4},
  {&(_tg__ZTV7S7539C2__A__7S7539C97S7539C7__7S7539C5[3]),  3,4},
  {&(_tg__ZTV7S7539C3__A2__7S7539C97S7539C7__7S7539C5[3]),  3,4},
  {&(_tg__ZTV7S7539C8__7S7539C97S7539C7__7S7539C5[6]),  6,6},
  {&(_tg__ZTV7S7539C6__A1__7S7539C97S7539C7__7S7539C5[4]),  4,5},
  {&(_tg__ZTV7S7539C2__A1__7S7539C97S7539C7__7S7539C5[4]),  4,5},
  {&(_tg__ZTV8S7539C107S7539C7__7S7539C5[7]),  7,12},
  {&(_tg__ZTV7S7539C98S7539C107S7539C7__A1__7S7539C5[7]),  7,10},
  {&(_tg__ZTV7S7539C67S7539C98S7539C107S7539C7__A2__7S7539C5[3]),  3,4},
  {&(_tg__ZTV7S7539C27S7539C98S7539C107S7539C7__A2__7S7539C5[3]),  3,4},
  {&(_tg__ZTV7S7539C3__7S7539C27S7539C98S7539C107S7539C7__A2__7S7539C5[3]),  3,4},
  {&(_tg__ZTV7S7539C6__A__7S7539C98S7539C107S7539C7__A1__7S7539C5[3]),  3,4},
  {&(_tg__ZTV7S7539C2__A__7S7539C98S7539C107S7539C7__A1__7S7539C5[3]),  3,4},
  {&(_tg__ZTV7S7539C3__A2__7S7539C98S7539C107S7539C7__A1__7S7539C5[3]),  3,4},
  {&(_tg__ZTV7S7539C8__7S7539C98S7539C107S7539C7__A1__7S7539C5[6]),  6,6},
  {&(_tg__ZTV7S7539C6__A1__7S7539C98S7539C107S7539C7__A1__7S7539C5[4]),  4,5},
  {&(_tg__ZTV7S7539C2__A1__7S7539C98S7539C107S7539C7__A1__7S7539C5[4]),  4,5},
  {&(_tg__ZTV7S7539C67S7539C9__8S7539C107S7539C7__7S7539C5[3]),  3,4},
  {&(_tg__ZTV7S7539C27S7539C9__8S7539C107S7539C7__7S7539C5[3]),  3,4},
  {&(_tg__ZTV7S7539C3__A2__8S7539C107S7539C7__7S7539C5[3]),  3,4},
  {&(_tg__ZTV7S7539C8__8S7539C107S7539C7__7S7539C5[6]),  6,6},
  {&(_tg__ZTV7S7539C6__A1__8S7539C107S7539C7__7S7539C5[4]),  4,5},
  {&(_tg__ZTV7S7539C2__A1__8S7539C107S7539C7__7S7539C5[4]),  4,5},
  {&(_tg__ZTV7S7539C8__7S7539C7__7S7539C5[6]),  6,6},
  {&(_tg__ZTV7S7539C6__7S7539C7__7S7539C5[4]),  4,5},
  {&(_tg__ZTV7S7539C3__A1__7S7539C7__7S7539C5[3]),  3,4},
  {&(_tg__ZTV7S7539C2__7S7539C7__7S7539C5[4]),  4,5},
  {&(_tg__ZTV7S7539C67S7539C9__A1__7S7539C7__7S7539C5[3]),  3,4},
  {&(_tg__ZTV7S7539C27S7539C9__A1__7S7539C7__7S7539C5[3]),  3,4},
  {&(_tg__ZTV8S7539C10__7S7539C7__7S7539C5[7]),  7,12},
  {&(_tg__ZTV7S7539C67S7539C98S7539C10__A2__7S7539C7__7S7539C5[3]),  3,4},
  {&(_tg__ZTV7S7539C27S7539C98S7539C10__A2__7S7539C7__7S7539C5[3]),  3,4},
  {&(_tg__ZTV7S7539C8__7S7539C5[6]),  6,6},
  {&(_tg__ZTV7S7539C6__7S7539C8__7S7539C5[4]),  4,5},
  {&(_tg__ZTV7S7539C3__A1__7S7539C8__7S7539C5[3]),  3,4},
  {&(_tg__ZTV7S7539C2__7S7539C8__7S7539C5[4]),  4,5},
  {&(_tg__ZTV7S7539C2__7S7539C5[3]),  3,4},
  {&(_tg__ZTV7S7539C3__7S7539C2__7S7539C5[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S7539C5[];
extern  VTBL_ENTRY _ZTV7S7539C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7539C5[];
static VTBL_ENTRY alt_thunk_names13[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S7539C5D0Ev,_ZTv0_n36_N7S7539C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn704_N7S7539C5D0Ev,_ZThn476_N7S7539C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S7539C5D1Ev,_ZTv0_n36_N7S7539C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn704_N7S7539C5D1Ev,_ZThn476_N7S7539C5D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7539C5 = {  "S7539C5", // class name
  bases_S7539C5, 18,
  &(vtc_S7539C5[0]), // expected_vtbl_contents
  &(vtt_S7539C5[0]), // expected_vtt_contents
  ABISELECT(7024,5004), // object size
  NSPAIRA(_ZTI7S7539C5),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7539C5),76, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7539C5),55, //virtual table table var
  17, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names13,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7539C1  : S7539C2 {
  int s7539c1f0:12;
  int s7539c1f1[7];
  void *s7539c1f2;
  ::S7539C5 s7539c1f3;
  int s7539c1f4;
  virtual void  v1(); // _ZN7S7539C12v1Ev
  ~S7539C1(); // tgen
  S7539C1(); // tgen
};
//SIG(1 S7539C1) C1{ BC2{ VBC3{ v2 FD Fi:3 Fc:8 FD[2] FL} v3 FC4{ m FL Fi Fc} FL FC4[7] Fp FL FC4 Fp Fc Fs Fi FC3} v1 Fi:12 Fi[7] Fp FC5{ VBC3 VBC6{ BC3 VBC4 Fc[10] Fi FC2 FL} VBC7{ VBC8{ VBC4 VBC6 VBC3 VBC2 Fp} BC9{ BC3 VBC4 BC6 BC2 VBC8 vd FC2 FC8 Fp Fi FC3 FC2} BC10{ BC9 vd v5 v6 Fp Fs:6 FC3 FD Fi FC4 FC2 Fp Fi Fp[2]} v7 Fi Fc Fp Fl} vd v4 Fp FL Fc[9] FD Fi Fl} Fi}


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

static void Test_S7539C1()
{
  extern Class_Descriptor cd_S7539C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(468,1333)];
    init_test(&cd_S7539C1, buf);
    S7539C1 *dp, &lv = *(dp=new (buf) S7539C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(7472,5328), "sizeof(S7539C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7539C1)");
    check_base_class_offset(lv, (S7539C3*)(S7539C2*), ABISELECT(7376,5276), "S7539C1");
    check_base_class_offset(lv, (S7539C2*), 0, "S7539C1");
    set_bf_and_test(lv, s7539c1f0, ABISELECT(288,232), 0, 12, 1, "S7539C1");
    set_bf_and_test(lv, s7539c1f0, ABISELECT(288,232), 0, 12, hide_sll(1LL<<11), "S7539C1");
    check_field_offset(lv, s7539c1f1, ABISELECT(292,236), "S7539C1.s7539c1f1");
    check_field_offset(lv, s7539c1f2, ABISELECT(320,264), "S7539C1.s7539c1f2");
    check_field_offset(lv, s7539c1f3, ABISELECT(336,268), "S7539C1.s7539c1f3");
    check_field_offset(lv, s7539c1f4, ABISELECT(7360,5272), "S7539C1.s7539c1f4");
    test_class_info(&lv, &cd_S7539C1);
    dp->~S7539C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7539C1(Test_S7539C1, "S7539C1", ABISELECT(7472,5328));

#else // __cplusplus

extern void _ZN7S7539C1C1Ev();
extern void _ZN7S7539C1D1Ev();
Name_Map name_map_S7539C1[] = {
  NSPAIR(_ZN7S7539C1C1Ev),
  NSPAIR(_ZN7S7539C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7539C3;
extern VTBL_ENTRY _ZTI7S7539C3[];
extern  VTBL_ENTRY _ZTV7S7539C3[];
extern Class_Descriptor cd_S7539C2;
extern VTBL_ENTRY _ZTI7S7539C2[];
extern  VTBL_ENTRY _ZTV7S7539C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7539C2[];
static Base_Class bases_S7539C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7539C3,    ABISELECT(7376,5276), //bcp->offset
    5, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7539C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7539C1[];
extern void _ZN7S7539C22v3Ev();
extern void _ZN7S7539C12v1Ev();
extern void _ZN7S7539C32v2Ev();
static  VTBL_ENTRY vtc_S7539C1[] = {
  ABISELECT(7376,5276),
  0,
  (VTBL_ENTRY)&(_ZTI7S7539C1[0]),
  (VTBL_ENTRY)&_ZN7S7539C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7539C12v1Ev,
  0,
  ABISELECT(-7376,-5276),
  (VTBL_ENTRY)&(_ZTI7S7539C1[0]),
  (VTBL_ENTRY)&_ZN7S7539C32v2Ev,
};
extern VTBL_ENTRY _ZTV7S7539C1[];
extern void _ZN7S7539C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7539C2__7S7539C1[] = {
  ABISELECT(7376,5276),
  0,
  (VTBL_ENTRY)&(_ZTI7S7539C2[0]),
  (VTBL_ENTRY)&_ZN7S7539C22v3Ev,
};
extern void _ZN7S7539C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7539C3__7S7539C2__7S7539C1[] = {
  0,
  ABISELECT(-7376,-5276),
  (VTBL_ENTRY)&(_ZTI7S7539C2[0]),
  (VTBL_ENTRY)&_ZN7S7539C32v2Ev,
};
static  VTT_ENTRY vtt_S7539C1[] = {
  {&(_ZTV7S7539C1[3]),  3,9},
  {&(_tg__ZTV7S7539C2__7S7539C1[3]),  3,4},
  {&(_tg__ZTV7S7539C3__7S7539C2__7S7539C1[3]),  3,4},
  {&(_ZTV7S7539C1[8]),  8,9},
};
extern VTBL_ENTRY _ZTI7S7539C1[];
extern  VTBL_ENTRY _ZTV7S7539C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7539C1[];
Class_Descriptor cd_S7539C1 = {  "S7539C1", // class name
  bases_S7539C1, 2,
  &(vtc_S7539C1[0]), // expected_vtbl_contents
  &(vtt_S7539C1[0]), // expected_vtt_contents
  ABISELECT(7472,5328), // object size
  NSPAIRA(_ZTI7S7539C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7539C1),9, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7539C1),4, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6506C2  {
  ::S2120C13_nt s6506c2f0;
  ::S2120C13_nt s6506c2f1;
  void *s6506c2f2;
  int s6506c2f3;
  ::S601C8 s6506c2f4;
  int s6506c2f5:2;
  int s6506c2f6:2;
  unsigned char s6506c2f7:1;
  unsigned char s6506c2f8:1;
  ::S601C53 s6506c2f9;
  ::S601C11 s6506c2f10[2];
  virtual  ~S6506C2(); // _ZN7S6506C2D1Ev
  virtual void  v16(); // _ZN7S6506C23v16Ev
  virtual void  v17(); // _ZN7S6506C23v17Ev
  virtual void  v18(); // _ZN7S6506C23v18Ev
  virtual void  v19(); // _ZN7S6506C23v19Ev
  virtual void  v20(); // _ZN7S6506C23v20Ev
  virtual void  v21(); // _ZN7S6506C23v21Ev
  virtual void  v22(); // _ZN7S6506C23v22Ev
  virtual void  v23(); // _ZN7S6506C23v23Ev
  virtual void  v24(); // _ZN7S6506C23v24Ev
  virtual void  v25(); // _ZN7S6506C23v25Ev
  virtual void  v26(); // _ZN7S6506C23v26Ev
  virtual void  v27(); // _ZN7S6506C23v27Ev
  virtual void  v28(); // _ZN7S6506C23v28Ev
  virtual void  v29(); // _ZN7S6506C23v29Ev
  virtual void  v30(); // _ZN7S6506C23v30Ev
  S6506C2(); // tgen
};
//SIG(-1 S6506C2) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 FC2{ m FC3{ m FL[2]}} FC2 Fp Fi FU4{ m FC5{ Fi:4 Fi:4 Fi:4 Fi:2 Fi:1 Fi:17} Fi} Fi:2 Fi:2 Fc:1 Fc:1 FC6{ m Fp Fp} FC7{ Fp Fp}[2]}


 S6506C2 ::~S6506C2(){ note_dtor("S6506C2", this);}
void  S6506C2 ::v16(){vfunc_called(this, "_ZN7S6506C23v16Ev");}
void  S6506C2 ::v17(){vfunc_called(this, "_ZN7S6506C23v17Ev");}
void  S6506C2 ::v18(){vfunc_called(this, "_ZN7S6506C23v18Ev");}
void  S6506C2 ::v19(){vfunc_called(this, "_ZN7S6506C23v19Ev");}
void  S6506C2 ::v20(){vfunc_called(this, "_ZN7S6506C23v20Ev");}
void  S6506C2 ::v21(){vfunc_called(this, "_ZN7S6506C23v21Ev");}
void  S6506C2 ::v22(){vfunc_called(this, "_ZN7S6506C23v22Ev");}
void  S6506C2 ::v23(){vfunc_called(this, "_ZN7S6506C23v23Ev");}
void  S6506C2 ::v24(){vfunc_called(this, "_ZN7S6506C23v24Ev");}
void  S6506C2 ::v25(){vfunc_called(this, "_ZN7S6506C23v25Ev");}
void  S6506C2 ::v26(){vfunc_called(this, "_ZN7S6506C23v26Ev");}
void  S6506C2 ::v27(){vfunc_called(this, "_ZN7S6506C23v27Ev");}
void  S6506C2 ::v28(){vfunc_called(this, "_ZN7S6506C23v28Ev");}
void  S6506C2 ::v29(){vfunc_called(this, "_ZN7S6506C23v29Ev");}
void  S6506C2 ::v30(){vfunc_called(this, "_ZN7S6506C23v30Ev");}
S6506C2 ::S6506C2(){ note_ctor("S6506C2", this);} // tgen

static void Test_S6506C2()
{
  extern Class_Descriptor cd_S6506C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,20)];
    init_test(&cd_S6506C2, buf);
    S6506C2 *dp, &lv = *(dp=new (buf) S6506C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,76), "sizeof(S6506C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6506C2)");
    check_field_offset(lv, s6506c2f0, ABISELECT(8,4), "S6506C2.s6506c2f0");
    check_field_offset(lv, s6506c2f1, ABISELECT(24,20), "S6506C2.s6506c2f1");
    check_field_offset(lv, s6506c2f2, ABISELECT(40,36), "S6506C2.s6506c2f2");
    check_field_offset(lv, s6506c2f3, ABISELECT(48,40), "S6506C2.s6506c2f3");
    check_field_offset(lv, s6506c2f4, ABISELECT(52,44), "S6506C2.s6506c2f4");
    set_bf_and_test(lv, s6506c2f5, ABISELECT(56,48), 0, 2, 1, "S6506C2");
    set_bf_and_test(lv, s6506c2f5, ABISELECT(56,48), 0, 2, hide_sll(1LL<<1), "S6506C2");
    set_bf_and_test(lv, s6506c2f6, ABISELECT(56,48), 2, 2, 1, "S6506C2");
    set_bf_and_test(lv, s6506c2f6, ABISELECT(56,48), 2, 2, hide_sll(1LL<<1), "S6506C2");
    set_bf_and_test(lv, s6506c2f7, ABISELECT(56,48), 4, 1, 1, "S6506C2");
    set_bf_and_test(lv, s6506c2f8, ABISELECT(56,48), 5, 1, 1, "S6506C2");
    check_field_offset(lv, s6506c2f9, ABISELECT(64,52), "S6506C2.s6506c2f9");
    check_field_offset(lv, s6506c2f10, ABISELECT(80,60), "S6506C2.s6506c2f10");
    test_class_info(&lv, &cd_S6506C2);
    dp->~S6506C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6506C2(Test_S6506C2, "S6506C2", ABISELECT(112,76));

#else // __cplusplus

extern void _ZN7S6506C2C1Ev();
extern void _ZN7S6506C2D1Ev();
Name_Map name_map_S6506C2[] = {
  NSPAIR(_ZN7S6506C2C1Ev),
  NSPAIR(_ZN7S6506C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6506C2[];
extern void _ZN7S6506C2D1Ev();
extern void _ZN7S6506C2D0Ev();
extern void _ZN7S6506C23v16Ev();
extern void _ZN7S6506C23v17Ev();
extern void _ZN7S6506C23v18Ev();
extern void _ZN7S6506C23v19Ev();
extern void _ZN7S6506C23v20Ev();
extern void _ZN7S6506C23v21Ev();
extern void _ZN7S6506C23v22Ev();
extern void _ZN7S6506C23v23Ev();
extern void _ZN7S6506C23v24Ev();
extern void _ZN7S6506C23v25Ev();
extern void _ZN7S6506C23v26Ev();
extern void _ZN7S6506C23v27Ev();
extern void _ZN7S6506C23v28Ev();
extern void _ZN7S6506C23v29Ev();
extern void _ZN7S6506C23v30Ev();
static  VTBL_ENTRY vtc_S6506C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6506C2[0]),
  (VTBL_ENTRY)&_ZN7S6506C2D1Ev,
  (VTBL_ENTRY)&_ZN7S6506C2D0Ev,
  (VTBL_ENTRY)&_ZN7S6506C23v16Ev,
  (VTBL_ENTRY)&_ZN7S6506C23v17Ev,
  (VTBL_ENTRY)&_ZN7S6506C23v18Ev,
  (VTBL_ENTRY)&_ZN7S6506C23v19Ev,
  (VTBL_ENTRY)&_ZN7S6506C23v20Ev,
  (VTBL_ENTRY)&_ZN7S6506C23v21Ev,
  (VTBL_ENTRY)&_ZN7S6506C23v22Ev,
  (VTBL_ENTRY)&_ZN7S6506C23v23Ev,
  (VTBL_ENTRY)&_ZN7S6506C23v24Ev,
  (VTBL_ENTRY)&_ZN7S6506C23v25Ev,
  (VTBL_ENTRY)&_ZN7S6506C23v26Ev,
  (VTBL_ENTRY)&_ZN7S6506C23v27Ev,
  (VTBL_ENTRY)&_ZN7S6506C23v28Ev,
  (VTBL_ENTRY)&_ZN7S6506C23v29Ev,
  (VTBL_ENTRY)&_ZN7S6506C23v30Ev,
};
extern VTBL_ENTRY _ZTI7S6506C2[];
extern  VTBL_ENTRY _ZTV7S6506C2[];
Class_Descriptor cd_S6506C2 = {  "S6506C2", // class name
  0,0,//no base classes
  &(vtc_S6506C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,76), // object size
  NSPAIRA(_ZTI7S6506C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6506C2),19, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6506C1  : S6506C2 {
  unsigned char s6506c1f0:1;
  unsigned char s6506c1f1:1;
  unsigned char s6506c1f2:1;
  unsigned char s6506c1f3:1;
  char s6506c1f4;
  char s6506c1f5;
  char s6506c1f6;
  char s6506c1f7;
  char s6506c1f8;
  char s6506c1f9;
  ::S2120C13_nt s6506c1f10;
  ::S2120C13_nt s6506c1f11;
  ::S2120C13_nt s6506c1f12;
  ::S601C12 s6506c1f13;
  ::S601C13_nt s6506c1f14[3];
  void *s6506c1f15;
  virtual  ~S6506C1(); // _ZN7S6506C1D1Ev
  virtual void  v1(); // _ZN7S6506C12v1Ev
  virtual void  v2(); // _ZN7S6506C12v2Ev
  virtual void  v3(); // _ZN7S6506C12v3Ev
  virtual void  v4(); // _ZN7S6506C12v4Ev
  virtual void  v5(); // _ZN7S6506C12v5Ev
  virtual void  v6(); // _ZN7S6506C12v6Ev
  virtual void  v7(); // _ZN7S6506C12v7Ev
  virtual void  v8(); // _ZN7S6506C12v8Ev
  virtual void  v9(); // _ZN7S6506C12v9Ev
  virtual void  v10(); // _ZN7S6506C13v10Ev
  virtual void  v11(); // _ZN7S6506C13v11Ev
  virtual void  v12(); // _ZN7S6506C13v12Ev
  virtual void  v13(); // _ZN7S6506C13v13Ev
  virtual void  v14(); // _ZN7S6506C13v14Ev
  virtual void  v15(); // _ZN7S6506C13v15Ev
  S6506C1(); // tgen
};
//SIG(1 S6506C1) C1{ BC2{ vd v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 FC3{ m FC4{ m FL[2]}} FC3 Fp Fi FU5{ m FC6{ Fi:4 Fi:4 Fi:4 Fi:2 Fi:1 Fi:17} Fi} Fi:2 Fi:2 Fc:1 Fc:1 FC7{ m Fp Fp} FC8{ Fp Fp}[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 Fc:1 Fc:1 Fc:1 Fc:1 Fc Fc Fc Fc Fc Fc FC3 FC3 FC3 FC9{ m FC3 FC3} FC10{ m Fp}[3] Fp}


 S6506C1 ::~S6506C1(){ note_dtor("S6506C1", this);}
void  S6506C1 ::v1(){vfunc_called(this, "_ZN7S6506C12v1Ev");}
void  S6506C1 ::v2(){vfunc_called(this, "_ZN7S6506C12v2Ev");}
void  S6506C1 ::v3(){vfunc_called(this, "_ZN7S6506C12v3Ev");}
void  S6506C1 ::v4(){vfunc_called(this, "_ZN7S6506C12v4Ev");}
void  S6506C1 ::v5(){vfunc_called(this, "_ZN7S6506C12v5Ev");}
void  S6506C1 ::v6(){vfunc_called(this, "_ZN7S6506C12v6Ev");}
void  S6506C1 ::v7(){vfunc_called(this, "_ZN7S6506C12v7Ev");}
void  S6506C1 ::v8(){vfunc_called(this, "_ZN7S6506C12v8Ev");}
void  S6506C1 ::v9(){vfunc_called(this, "_ZN7S6506C12v9Ev");}
void  S6506C1 ::v10(){vfunc_called(this, "_ZN7S6506C13v10Ev");}
void  S6506C1 ::v11(){vfunc_called(this, "_ZN7S6506C13v11Ev");}
void  S6506C1 ::v12(){vfunc_called(this, "_ZN7S6506C13v12Ev");}
void  S6506C1 ::v13(){vfunc_called(this, "_ZN7S6506C13v13Ev");}
void  S6506C1 ::v14(){vfunc_called(this, "_ZN7S6506C13v14Ev");}
void  S6506C1 ::v15(){vfunc_called(this, "_ZN7S6506C13v15Ev");}
S6506C1 ::S6506C1(){ note_ctor("S6506C1", this);} // tgen

static void Test_S6506C1()
{
  extern Class_Descriptor cd_S6506C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(30,46)];
    init_test(&cd_S6506C1, buf);
    S6506C1 *dp, &lv = *(dp=new (buf) S6506C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(232,180), "sizeof(S6506C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6506C1)");
    check_base_class_offset(lv, (S6506C2*), 0, "S6506C1");
    set_bf_and_test(lv, s6506c1f0, ABISELECT(112,76), 0, 1, 1, "S6506C1");
    set_bf_and_test(lv, s6506c1f1, ABISELECT(112,76), 1, 1, 1, "S6506C1");
    set_bf_and_test(lv, s6506c1f2, ABISELECT(112,76), 2, 1, 1, "S6506C1");
    set_bf_and_test(lv, s6506c1f3, ABISELECT(112,76), 3, 1, 1, "S6506C1");
    check_field_offset(lv, s6506c1f4, ABISELECT(113,77), "S6506C1.s6506c1f4");
    check_field_offset(lv, s6506c1f5, ABISELECT(114,78), "S6506C1.s6506c1f5");
    check_field_offset(lv, s6506c1f6, ABISELECT(115,79), "S6506C1.s6506c1f6");
    check_field_offset(lv, s6506c1f7, ABISELECT(116,80), "S6506C1.s6506c1f7");
    check_field_offset(lv, s6506c1f8, ABISELECT(117,81), "S6506C1.s6506c1f8");
    check_field_offset(lv, s6506c1f9, ABISELECT(118,82), "S6506C1.s6506c1f9");
    check_field_offset(lv, s6506c1f10, ABISELECT(120,84), "S6506C1.s6506c1f10");
    check_field_offset(lv, s6506c1f11, ABISELECT(136,100), "S6506C1.s6506c1f11");
    check_field_offset(lv, s6506c1f12, ABISELECT(152,116), "S6506C1.s6506c1f12");
    check_field_offset(lv, s6506c1f13, ABISELECT(168,132), "S6506C1.s6506c1f13");
    check_field_offset(lv, s6506c1f14, ABISELECT(200,164), "S6506C1.s6506c1f14");
    check_field_offset(lv, s6506c1f15, ABISELECT(224,176), "S6506C1.s6506c1f15");
    test_class_info(&lv, &cd_S6506C1);
    dp->~S6506C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6506C1(Test_S6506C1, "S6506C1", ABISELECT(232,180));

#else // __cplusplus

extern void _ZN7S6506C1C1Ev();
extern void _ZN7S6506C1D1Ev();
Name_Map name_map_S6506C1[] = {
  NSPAIR(_ZN7S6506C1C1Ev),
  NSPAIR(_ZN7S6506C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6506C2;
extern VTBL_ENTRY _ZTI7S6506C2[];
extern  VTBL_ENTRY _ZTV7S6506C2[];
static Base_Class bases_S6506C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6506C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6506C1[];
extern void _ZN7S6506C1D1Ev();
extern void _ZN7S6506C1D0Ev();
extern void _ZN7S6506C23v16Ev();
extern void _ZN7S6506C23v17Ev();
extern void _ZN7S6506C23v18Ev();
extern void _ZN7S6506C23v19Ev();
extern void _ZN7S6506C23v20Ev();
extern void _ZN7S6506C23v21Ev();
extern void _ZN7S6506C23v22Ev();
extern void _ZN7S6506C23v23Ev();
extern void _ZN7S6506C23v24Ev();
extern void _ZN7S6506C23v25Ev();
extern void _ZN7S6506C23v26Ev();
extern void _ZN7S6506C23v27Ev();
extern void _ZN7S6506C23v28Ev();
extern void _ZN7S6506C23v29Ev();
extern void _ZN7S6506C23v30Ev();
extern void _ZN7S6506C12v1Ev();
extern void _ZN7S6506C12v2Ev();
extern void _ZN7S6506C12v3Ev();
extern void _ZN7S6506C12v4Ev();
extern void _ZN7S6506C12v5Ev();
extern void _ZN7S6506C12v6Ev();
extern void _ZN7S6506C12v7Ev();
extern void _ZN7S6506C12v8Ev();
extern void _ZN7S6506C12v9Ev();
extern void _ZN7S6506C13v10Ev();
extern void _ZN7S6506C13v11Ev();
extern void _ZN7S6506C13v12Ev();
extern void _ZN7S6506C13v13Ev();
extern void _ZN7S6506C13v14Ev();
extern void _ZN7S6506C13v15Ev();
static  VTBL_ENTRY vtc_S6506C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6506C1[0]),
  (VTBL_ENTRY)&_ZN7S6506C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6506C1D0Ev,
  (VTBL_ENTRY)&_ZN7S6506C23v16Ev,
  (VTBL_ENTRY)&_ZN7S6506C23v17Ev,
  (VTBL_ENTRY)&_ZN7S6506C23v18Ev,
  (VTBL_ENTRY)&_ZN7S6506C23v19Ev,
  (VTBL_ENTRY)&_ZN7S6506C23v20Ev,
  (VTBL_ENTRY)&_ZN7S6506C23v21Ev,
  (VTBL_ENTRY)&_ZN7S6506C23v22Ev,
  (VTBL_ENTRY)&_ZN7S6506C23v23Ev,
  (VTBL_ENTRY)&_ZN7S6506C23v24Ev,
  (VTBL_ENTRY)&_ZN7S6506C23v25Ev,
  (VTBL_ENTRY)&_ZN7S6506C23v26Ev,
  (VTBL_ENTRY)&_ZN7S6506C23v27Ev,
  (VTBL_ENTRY)&_ZN7S6506C23v28Ev,
  (VTBL_ENTRY)&_ZN7S6506C23v29Ev,
  (VTBL_ENTRY)&_ZN7S6506C23v30Ev,
  (VTBL_ENTRY)&_ZN7S6506C12v1Ev,
  (VTBL_ENTRY)&_ZN7S6506C12v2Ev,
  (VTBL_ENTRY)&_ZN7S6506C12v3Ev,
  (VTBL_ENTRY)&_ZN7S6506C12v4Ev,
  (VTBL_ENTRY)&_ZN7S6506C12v5Ev,
  (VTBL_ENTRY)&_ZN7S6506C12v6Ev,
  (VTBL_ENTRY)&_ZN7S6506C12v7Ev,
  (VTBL_ENTRY)&_ZN7S6506C12v8Ev,
  (VTBL_ENTRY)&_ZN7S6506C12v9Ev,
  (VTBL_ENTRY)&_ZN7S6506C13v10Ev,
  (VTBL_ENTRY)&_ZN7S6506C13v11Ev,
  (VTBL_ENTRY)&_ZN7S6506C13v12Ev,
  (VTBL_ENTRY)&_ZN7S6506C13v13Ev,
  (VTBL_ENTRY)&_ZN7S6506C13v14Ev,
  (VTBL_ENTRY)&_ZN7S6506C13v15Ev,
};
extern VTBL_ENTRY _ZTI7S6506C1[];
extern  VTBL_ENTRY _ZTV7S6506C1[];
Class_Descriptor cd_S6506C1 = {  "S6506C1", // class name
  bases_S6506C1, 1,
  &(vtc_S6506C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(232,180), // object size
  NSPAIRA(_ZTI7S6506C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6506C1),34, //virtual function table var
  2, // 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  S885C6_nt  {
  void *s885c6f0[3];
  void  mf885c6(); // _ZN9S885C6_nt7mf885c6Ev
};
//SIG(-1 S885C6_nt) C1{ m Fp[3]}


void  S885C6_nt ::mf885c6(){}

//skip512 S885C6_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S885C5_nt  {
  ::S885C6_nt s885c5f0;
  unsigned int s885c5f1:1;
  virtual  ~S885C5_nt(); // _ZN9S885C5_ntD1Ev
  virtual void  v2(); // _ZN9S885C5_nt2v2Ev
  virtual void  v3(); // _ZN9S885C5_nt2v3Ev
  virtual void  v4(); // _ZN9S885C5_nt2v4Ev
  virtual void  v5(); // _ZN9S885C5_nt2v5Ev
  virtual void  v6(); // _ZN9S885C5_nt2v6Ev
  virtual void  v7(); // _ZN9S885C5_nt2v7Ev
  virtual void  v8(); // _ZN9S885C5_nt2v8Ev
  S885C5_nt(); // tgen
};
//SIG(-1 S885C5_nt) C1{ vd v1 v2 v3 v4 v5 v6 v7 FC2{ m Fp[3]} Fi:1}


 S885C5_nt ::~S885C5_nt(){ note_dtor("S885C5_nt", this);}
void  S885C5_nt ::v2(){vfunc_called(this, "_ZN9S885C5_nt2v2Ev");}
void  S885C5_nt ::v3(){vfunc_called(this, "_ZN9S885C5_nt2v3Ev");}
void  S885C5_nt ::v4(){vfunc_called(this, "_ZN9S885C5_nt2v4Ev");}
void  S885C5_nt ::v5(){vfunc_called(this, "_ZN9S885C5_nt2v5Ev");}
void  S885C5_nt ::v6(){vfunc_called(this, "_ZN9S885C5_nt2v6Ev");}
void  S885C5_nt ::v7(){vfunc_called(this, "_ZN9S885C5_nt2v7Ev");}
void  S885C5_nt ::v8(){vfunc_called(this, "_ZN9S885C5_nt2v8Ev");}
S885C5_nt ::S885C5_nt(){ note_ctor("S885C5_nt", this);} // tgen

//skip512 S885C5_nt

#else // __cplusplus

extern void _ZN9S885C5_ntC1Ev();
extern void _ZN9S885C5_ntD1Ev();
Name_Map name_map_S885C5_nt[] = {
  NSPAIR(_ZN9S885C5_ntC1Ev),
  NSPAIR(_ZN9S885C5_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S885C5_nt[];
extern void _ZN9S885C5_ntD1Ev();
extern void _ZN9S885C5_ntD0Ev();
extern void _ZN9S885C5_nt2v2Ev();
extern void _ZN9S885C5_nt2v3Ev();
extern void _ZN9S885C5_nt2v4Ev();
extern void _ZN9S885C5_nt2v5Ev();
extern void _ZN9S885C5_nt2v6Ev();
extern void _ZN9S885C5_nt2v7Ev();
extern void _ZN9S885C5_nt2v8Ev();
static  VTBL_ENTRY vtc_S885C5_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S885C5_nt[0]),
  (VTBL_ENTRY)&_ZN9S885C5_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S885C5_ntD0Ev,
  (VTBL_ENTRY)&_ZN9S885C5_nt2v2Ev,
  (VTBL_ENTRY)&_ZN9S885C5_nt2v3Ev,
  (VTBL_ENTRY)&_ZN9S885C5_nt2v4Ev,
  (VTBL_ENTRY)&_ZN9S885C5_nt2v5Ev,
  (VTBL_ENTRY)&_ZN9S885C5_nt2v6Ev,
  (VTBL_ENTRY)&_ZN9S885C5_nt2v7Ev,
  (VTBL_ENTRY)&_ZN9S885C5_nt2v8Ev,
};
extern VTBL_ENTRY _ZTI9S885C5_nt[];
VTBL_ENTRY *P__ZTI9S885C5_nt = _ZTI9S885C5_nt; 
extern  VTBL_ENTRY _ZTV9S885C5_nt[];
Class_Descriptor cd_S885C5_nt = {  "S885C5_nt", // class name
  0,0,//no base classes
  &(vtc_S885C5_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI9S885C5_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S885C5_nt),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S885C7_nt  {
  virtual void  v9(); // _ZN9S885C7_nt2v9Ev
  ~S885C7_nt(); // tgen
  S885C7_nt(); // tgen
};
//SIG(-1 S885C7_nt) C1{ v1}


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

//skip512 S885C7_nt

#else // __cplusplus

extern void _ZN9S885C7_ntC1Ev();
extern void _ZN9S885C7_ntD1Ev();
Name_Map name_map_S885C7_nt[] = {
  NSPAIR(_ZN9S885C7_ntC1Ev),
  NSPAIR(_ZN9S885C7_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S885C7_nt[];
extern void _ZN9S885C7_nt2v9Ev();
static  VTBL_ENTRY vtc_S885C7_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S885C7_nt[0]),
  (VTBL_ENTRY)&_ZN9S885C7_nt2v9Ev,
};
extern VTBL_ENTRY _ZTI9S885C7_nt[];
VTBL_ENTRY *P__ZTI9S885C7_nt = _ZTI9S885C7_nt; 
extern  VTBL_ENTRY _ZTV9S885C7_nt[];
Class_Descriptor cd_S885C7_nt = {  "S885C7_nt", // class name
  0,0,//no base classes
  &(vtc_S885C7_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI9S885C7_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S885C7_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  S885C8_nt  {
  ::S3352C18 s885c8f0;
  int s885c8f1;
  void  mf885c8(); // _ZN9S885C8_nt7mf885c8Ev
};
//SIG(-1 S885C8_nt) C1{ m FC2{ BC3{ m Fp Fi[2]}} Fi}


void  S885C8_nt ::mf885c8(){}

//skip512 S885C8_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S885C11_nt  {
  unsigned int s885c11f0:1;
  int s885c11f1:3;
};
//SIG(-1 S885C11_nt) C1{ Fi:1 Fi:3}



//skip512 S885C11_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S885C13_nt  {
  void *s885c13f0;
  void  mf885c13(); // _ZN10S885C13_nt8mf885c13Ev
};
//SIG(-1 S885C13_nt) C1{ m Fp}


void  S885C13_nt ::mf885c13(){}

//skip512 S885C13_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S885C14_nt  {
  int s885c14f0[4];
  void  mf885c14(); // _ZN10S885C14_nt8mf885c14Ev
};
//SIG(-1 S885C14_nt) C1{ m Fi[4]}


void  S885C14_nt ::mf885c14(){}

//skip512 S885C14_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S885C4_nt  : S885C5_nt , S885C7_nt {
  ::S885C8_nt s885c4f0;
  ::S885C11_nt s885c4f1;
  ::S601C13_nt s885c4f2;
  ::S885C13_nt s885c4f3;
  void *s885c4f4;
  ::S885C14_nt s885c4f5;
  int s885c4f6;
  void *s885c4f7;
  int s885c4f8[2];
  virtual  ~S885C4_nt(); // _ZN9S885C4_ntD1Ev
  virtual void  v10(); // _ZN9S885C4_nt3v10Ev
  virtual void  v11(); // _ZN9S885C4_nt3v11Ev
  virtual void  v12(); // _ZN9S885C4_nt3v12Ev
  virtual void  v13(); // _ZN9S885C4_nt3v13Ev
  virtual void  v14(); // _ZN9S885C4_nt3v14Ev
  S885C4_nt(); // tgen
};
//SIG(-1 S885C4_nt) C1{ BC2{ vd v6 v7 v8 v9 v10 v11 v12 FC3{ m Fp[3]} Fi:1} BC4{ v13} vd v1 v2 v3 v4 v5 FC5{ m FC6{ BC7{ m Fp Fi[2]}} Fi} FC8{ Fi:1 Fi:3} FC9{ m Fp} FC10{ m Fp} Fp FC11{ m Fi[4]} Fi Fp Fi[2]}


 S885C4_nt ::~S885C4_nt(){ note_dtor("S885C4_nt", this);}
void  S885C4_nt ::v10(){vfunc_called(this, "_ZN9S885C4_nt3v10Ev");}
void  S885C4_nt ::v11(){vfunc_called(this, "_ZN9S885C4_nt3v11Ev");}
void  S885C4_nt ::v12(){vfunc_called(this, "_ZN9S885C4_nt3v12Ev");}
void  S885C4_nt ::v13(){vfunc_called(this, "_ZN9S885C4_nt3v13Ev");}
void  S885C4_nt ::v14(){vfunc_called(this, "_ZN9S885C4_nt3v14Ev");}
S885C4_nt ::S885C4_nt(){ note_ctor("S885C4_nt", this);} // tgen

//skip512 S885C4_nt

#else // __cplusplus

extern void _ZN9S885C4_ntC1Ev();
extern void _ZN9S885C4_ntD1Ev();
Name_Map name_map_S885C4_nt[] = {
  NSPAIR(_ZN9S885C4_ntC1Ev),
  NSPAIR(_ZN9S885C4_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S885C5_nt;
extern VTBL_ENTRY _ZTI9S885C5_nt[];
extern  VTBL_ENTRY _ZTV9S885C5_nt[];
extern Class_Descriptor cd_S885C7_nt;
extern VTBL_ENTRY _ZTI9S885C7_nt[];
extern  VTBL_ENTRY _ZTV9S885C7_nt[];
static Base_Class bases_S885C4_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S885C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S885C7_nt,    ABISELECT(40,20), //bcp->offset
    16, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S885C4_nt[];
extern void _ZN9S885C4_ntD1Ev();
extern void _ZN9S885C4_ntD0Ev();
extern void _ZN9S885C5_nt2v2Ev();
extern void _ZN9S885C5_nt2v3Ev();
extern void _ZN9S885C5_nt2v4Ev();
extern void _ZN9S885C5_nt2v5Ev();
extern void _ZN9S885C5_nt2v6Ev();
extern void _ZN9S885C5_nt2v7Ev();
extern void _ZN9S885C5_nt2v8Ev();
extern void _ZN9S885C4_nt3v10Ev();
extern void _ZN9S885C4_nt3v11Ev();
extern void _ZN9S885C4_nt3v12Ev();
extern void _ZN9S885C4_nt3v13Ev();
extern void _ZN9S885C4_nt3v14Ev();
extern void _ZN9S885C7_nt2v9Ev();
static  VTBL_ENTRY vtc_S885C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S885C4_nt[0]),
  (VTBL_ENTRY)&_ZN9S885C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S885C4_ntD0Ev,
  (VTBL_ENTRY)&_ZN9S885C5_nt2v2Ev,
  (VTBL_ENTRY)&_ZN9S885C5_nt2v3Ev,
  (VTBL_ENTRY)&_ZN9S885C5_nt2v4Ev,
  (VTBL_ENTRY)&_ZN9S885C5_nt2v5Ev,
  (VTBL_ENTRY)&_ZN9S885C5_nt2v6Ev,
  (VTBL_ENTRY)&_ZN9S885C5_nt2v7Ev,
  (VTBL_ENTRY)&_ZN9S885C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN9S885C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN9S885C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN9S885C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN9S885C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN9S885C4_nt3v14Ev,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI9S885C4_nt[0]),
  (VTBL_ENTRY)&_ZN9S885C7_nt2v9Ev,
};
extern VTBL_ENTRY _ZTI9S885C4_nt[];
VTBL_ENTRY *P__ZTI9S885C4_nt = _ZTI9S885C4_nt; 
extern  VTBL_ENTRY _ZTV9S885C4_nt[];
Class_Descriptor cd_S885C4_nt = {  "S885C4_nt", // class name
  bases_S885C4_nt, 2,
  &(vtc_S885C4_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(144,88), // object size
  NSPAIRA(_ZTI9S885C4_nt),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S885C4_nt),19, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S885C3_nt  : S885C4_nt {
  virtual void  v15(); // _ZN9S885C3_nt3v15Ev
  ~S885C3_nt(); // tgen
  S885C3_nt(); // tgen
};
//SIG(-1 S885C3_nt) C1{ BC2{ BC3{ vd v2 v3 v4 v5 v6 v7 v8 FC4{ m Fp[3]} Fi:1} BC5{ v9} vd v10 v11 v12 v13 v14 FC6{ m FC7{ BC8{ m Fp Fi[2]}} Fi} FC9{ Fi:1 Fi:3} FC10{ m Fp} FC11{ m Fp} Fp FC12{ m Fi[4]} Fi Fp Fi[2]} v1}


void  S885C3_nt ::v15(){vfunc_called(this, "_ZN9S885C3_nt3v15Ev");}
S885C3_nt ::~S885C3_nt(){ note_dtor("S885C3_nt", this);} // tgen
S885C3_nt ::S885C3_nt(){ note_ctor("S885C3_nt", this);} // tgen

//skip512 S885C3_nt

#else // __cplusplus

extern void _ZN9S885C3_ntC1Ev();
extern void _ZN9S885C3_ntD1Ev();
Name_Map name_map_S885C3_nt[] = {
  NSPAIR(_ZN9S885C3_ntC1Ev),
  NSPAIR(_ZN9S885C3_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S885C5_nt;
extern VTBL_ENTRY _ZTI9S885C5_nt[];
extern  VTBL_ENTRY _ZTV9S885C5_nt[];
extern Class_Descriptor cd_S885C7_nt;
extern VTBL_ENTRY _ZTI9S885C7_nt[];
extern  VTBL_ENTRY _ZTV9S885C7_nt[];
extern Class_Descriptor cd_S885C4_nt;
extern VTBL_ENTRY _ZTI9S885C4_nt[];
extern  VTBL_ENTRY _ZTV9S885C4_nt[];
static Base_Class bases_S885C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S885C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S885C7_nt,    ABISELECT(40,20), //bcp->offset
    17, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S885C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI9S885C3_nt[];
extern void _ZN9S885C3_ntD1Ev();
extern void _ZN9S885C3_ntD0Ev();
extern void _ZN9S885C5_nt2v2Ev();
extern void _ZN9S885C5_nt2v3Ev();
extern void _ZN9S885C5_nt2v4Ev();
extern void _ZN9S885C5_nt2v5Ev();
extern void _ZN9S885C5_nt2v6Ev();
extern void _ZN9S885C5_nt2v7Ev();
extern void _ZN9S885C5_nt2v8Ev();
extern void _ZN9S885C4_nt3v10Ev();
extern void _ZN9S885C4_nt3v11Ev();
extern void _ZN9S885C4_nt3v12Ev();
extern void _ZN9S885C4_nt3v13Ev();
extern void _ZN9S885C4_nt3v14Ev();
extern void _ZN9S885C3_nt3v15Ev();
extern void _ZN9S885C7_nt2v9Ev();
static  VTBL_ENTRY vtc_S885C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S885C3_nt[0]),
  (VTBL_ENTRY)&_ZN9S885C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S885C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN9S885C5_nt2v2Ev,
  (VTBL_ENTRY)&_ZN9S885C5_nt2v3Ev,
  (VTBL_ENTRY)&_ZN9S885C5_nt2v4Ev,
  (VTBL_ENTRY)&_ZN9S885C5_nt2v5Ev,
  (VTBL_ENTRY)&_ZN9S885C5_nt2v6Ev,
  (VTBL_ENTRY)&_ZN9S885C5_nt2v7Ev,
  (VTBL_ENTRY)&_ZN9S885C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN9S885C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN9S885C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN9S885C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN9S885C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN9S885C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN9S885C3_nt3v15Ev,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI9S885C3_nt[0]),
  (VTBL_ENTRY)&_ZN9S885C7_nt2v9Ev,
};
extern VTBL_ENTRY _ZTI9S885C3_nt[];
VTBL_ENTRY *P__ZTI9S885C3_nt = _ZTI9S885C3_nt; 
extern  VTBL_ENTRY _ZTV9S885C3_nt[];
Class_Descriptor cd_S885C3_nt = {  "S885C3_nt", // class name
  bases_S885C3_nt, 3,
  &(vtc_S885C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(144,88), // object size
  NSPAIRA(_ZTI9S885C3_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S885C3_nt),20, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S885C16_nt  {
  short s885c16f0[3];
  void  mf885c16(); // _ZN10S885C16_nt8mf885c16Ev
};
//SIG(-1 S885C16_nt) C1{ m Fs[3]}


void  S885C16_nt ::mf885c16(){}

//skip512 S885C16_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S885C15_nt  {
  ::S885C16_nt s885c15f0;
  ::S885C16_nt s885c15f1;
  void  mf885c15(); // _ZN10S885C15_nt8mf885c15Ev
};
//SIG(-1 S885C15_nt) C1{ m FC2{ m Fs[3]} FC2}


void  S885C15_nt ::mf885c15(){}

//skip512 S885C15_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S885C17_nt  {
  ::S885C16_nt s885c17f0;
  ::S885C16_nt s885c17f1;
  ::S885C16_nt s885c17f2;
  ::S885C16_nt s885c17f3;
  void  mf885c17(); // _ZN10S885C17_nt8mf885c17Ev
};
//SIG(-1 S885C17_nt) C1{ m FC2{ m Fs[3]} FC2 FC2 FC2}


void  S885C17_nt ::mf885c17(){}

//skip512 S885C17_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S885C2  : S885C3_nt {
  ::S885C15_nt s885c2f0;
  ::S885C17_nt s885c2f1;
  ::S885C16_nt s885c2f2;
  virtual void  v16(); // _ZN6S885C23v16Ev
  ~S885C2(); // tgen
  S885C2(); // tgen
};
//SIG(-1 S885C2) C1{ BC2{ BC3{ BC4{ vd v2 v3 v4 v5 v6 v7 v8 FC5{ m Fp[3]} Fi:1} BC6{ v9} vd v10 v11 v12 v13 v14 FC7{ m FC8{ BC9{ m Fp Fi[2]}} Fi} FC10{ Fi:1 Fi:3} FC11{ m Fp} FC12{ m Fp} Fp FC13{ m Fi[4]} Fi Fp Fi[2]} v15} v1 FC14{ m FC15{ m Fs[3]} FC15} FC16{ m FC15 FC15 FC15 FC15} FC15}


void  S885C2 ::v16(){vfunc_called(this, "_ZN6S885C23v16Ev");}
S885C2 ::~S885C2(){ note_dtor("S885C2", this);} // tgen
S885C2 ::S885C2(){ note_ctor("S885C2", this);} // tgen

static void Test_S885C2()
{
  extern Class_Descriptor cd_S885C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,34)];
    init_test(&cd_S885C2, buf);
    S885C2 *dp, &lv = *(dp=new (buf) S885C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,132), "sizeof(S885C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S885C2)");
    check_base_class_offset(lv, (S885C5_nt*)(S885C4_nt*)(S885C3_nt*), 0, "S885C2");
    check_base_class_offset(lv, (S885C7_nt*)(S885C4_nt*)(S885C3_nt*), ABISELECT(40,20), "S885C2");
    check_base_class_offset(lv, (S885C4_nt*)(S885C3_nt*), 0, "S885C2");
    check_base_class_offset(lv, (S885C3_nt*), 0, "S885C2");
    check_field_offset(lv, s885c2f0, ABISELECT(144,88), "S885C2.s885c2f0");
    check_field_offset(lv, s885c2f1, ABISELECT(156,100), "S885C2.s885c2f1");
    check_field_offset(lv, s885c2f2, ABISELECT(180,124), "S885C2.s885c2f2");
    test_class_info(&lv, &cd_S885C2);
    dp->~S885C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS885C2(Test_S885C2, "S885C2", ABISELECT(192,132));

#else // __cplusplus

extern void _ZN6S885C2C1Ev();
extern void _ZN6S885C2D1Ev();
Name_Map name_map_S885C2[] = {
  NSPAIR(_ZN6S885C2C1Ev),
  NSPAIR(_ZN6S885C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S885C5_nt;
extern VTBL_ENTRY _ZTI9S885C5_nt[];
extern  VTBL_ENTRY _ZTV9S885C5_nt[];
extern Class_Descriptor cd_S885C7_nt;
extern VTBL_ENTRY _ZTI9S885C7_nt[];
extern  VTBL_ENTRY _ZTV9S885C7_nt[];
extern Class_Descriptor cd_S885C4_nt;
extern VTBL_ENTRY _ZTI9S885C4_nt[];
extern  VTBL_ENTRY _ZTV9S885C4_nt[];
extern Class_Descriptor cd_S885C3_nt;
extern VTBL_ENTRY _ZTI9S885C3_nt[];
extern  VTBL_ENTRY _ZTV9S885C3_nt[];
static Base_Class bases_S885C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S885C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S885C7_nt,    ABISELECT(40,20), //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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S885C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S885C2[];
extern void _ZN6S885C2D1Ev();
extern void _ZN6S885C2D0Ev();
extern void _ZN9S885C5_nt2v2Ev();
extern void _ZN9S885C5_nt2v3Ev();
extern void _ZN9S885C5_nt2v4Ev();
extern void _ZN9S885C5_nt2v5Ev();
extern void _ZN9S885C5_nt2v6Ev();
extern void _ZN9S885C5_nt2v7Ev();
extern void _ZN9S885C5_nt2v8Ev();
extern void _ZN9S885C4_nt3v10Ev();
extern void _ZN9S885C4_nt3v11Ev();
extern void _ZN9S885C4_nt3v12Ev();
extern void _ZN9S885C4_nt3v13Ev();
extern void _ZN9S885C4_nt3v14Ev();
extern void _ZN9S885C3_nt3v15Ev();
extern void _ZN6S885C23v16Ev();
extern void _ZN9S885C7_nt2v9Ev();
static  VTBL_ENTRY vtc_S885C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S885C2[0]),
  (VTBL_ENTRY)&_ZN6S885C2D1Ev,
  (VTBL_ENTRY)&_ZN6S885C2D0Ev,
  (VTBL_ENTRY)&_ZN9S885C5_nt2v2Ev,
  (VTBL_ENTRY)&_ZN9S885C5_nt2v3Ev,
  (VTBL_ENTRY)&_ZN9S885C5_nt2v4Ev,
  (VTBL_ENTRY)&_ZN9S885C5_nt2v5Ev,
  (VTBL_ENTRY)&_ZN9S885C5_nt2v6Ev,
  (VTBL_ENTRY)&_ZN9S885C5_nt2v7Ev,
  (VTBL_ENTRY)&_ZN9S885C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN9S885C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN9S885C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN9S885C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN9S885C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN9S885C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN9S885C3_nt3v15Ev,
  (VTBL_ENTRY)&_ZN6S885C23v16Ev,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI6S885C2[0]),
  (VTBL_ENTRY)&_ZN9S885C7_nt2v9Ev,
};
extern VTBL_ENTRY _ZTI6S885C2[];
extern  VTBL_ENTRY _ZTV6S885C2[];
Class_Descriptor cd_S885C2 = {  "S885C2", // class name
  bases_S885C2, 4,
  &(vtc_S885C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,132), // object size
  NSPAIRA(_ZTI6S885C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S885C2),21, //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  S885C19_nt  {
  ::S885C16_nt s885c19f0;
  ::S885C16_nt s885c19f1;
  ::S885C16_nt s885c19f2;
  ::S885C16_nt s885c19f3;
  void  mf885c19(); // _ZN10S885C19_nt8mf885c19Ev
};
//SIG(-1 S885C19_nt) C1{ m FC2{ m Fs[3]} FC2 FC2 FC2}


void  S885C19_nt ::mf885c19(){}

//skip512 S885C19_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S885C1  : S885C2 {
  ::S885C19_nt s885c1f0;
  ::S885C15_nt s885c1f1;
  virtual void  v1(); // _ZN6S885C12v1Ev
  ~S885C1(); // tgen
  S885C1(); // tgen
};
//SIG(1 S885C1) C1{ BC2{ BC3{ BC4{ BC5{ vd v2 v3 v4 v5 v6 v7 v8 FC6{ m Fp[3]} Fi:1} BC7{ v9} vd v10 v11 v12 v13 v14 FC8{ m FC9{ BC10{ m Fp Fi[2]}} Fi} FC11{ Fi:1 Fi:3} FC12{ m Fp} FC13{ m Fp} Fp FC14{ m Fi[4]} Fi Fp Fi[2]} v15} v16 FC15{ m FC16{ m Fs[3]} FC16} FC17{ m FC16 FC16 FC16 FC16} FC16} v1 FC18{ m FC16 FC16 FC16 FC16} FC15}


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

static void Test_S885C1()
{
  extern Class_Descriptor cd_S885C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(29,43)];
    init_test(&cd_S885C1, buf);
    S885C1 *dp, &lv = *(dp=new (buf) S885C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,168), "sizeof(S885C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S885C1)");
    check_base_class_offset(lv, (S885C5_nt*)(S885C4_nt*)(S885C3_nt*)(S885C2*), 0, "S885C1");
    check_base_class_offset(lv, (S885C7_nt*)(S885C4_nt*)(S885C3_nt*)(S885C2*), ABISELECT(40,20), "S885C1");
    check_base_class_offset(lv, (S885C4_nt*)(S885C3_nt*)(S885C2*), 0, "S885C1");
    check_base_class_offset(lv, (S885C3_nt*)(S885C2*), 0, "S885C1");
    check_base_class_offset(lv, (S885C2*), 0, "S885C1");
    check_field_offset(lv, s885c1f0, ABISELECT(186,130), "S885C1.s885c1f0");
    check_field_offset(lv, s885c1f1, ABISELECT(210,154), "S885C1.s885c1f1");
    test_class_info(&lv, &cd_S885C1);
    dp->~S885C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS885C1(Test_S885C1, "S885C1", ABISELECT(224,168));

#else // __cplusplus

extern void _ZN6S885C1C1Ev();
extern void _ZN6S885C1D1Ev();
Name_Map name_map_S885C1[] = {
  NSPAIR(_ZN6S885C1C1Ev),
  NSPAIR(_ZN6S885C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S885C5_nt;
extern VTBL_ENTRY _ZTI9S885C5_nt[];
extern  VTBL_ENTRY _ZTV9S885C5_nt[];
extern Class_Descriptor cd_S885C7_nt;
extern VTBL_ENTRY _ZTI9S885C7_nt[];
extern  VTBL_ENTRY _ZTV9S885C7_nt[];
extern Class_Descriptor cd_S885C4_nt;
extern VTBL_ENTRY _ZTI9S885C4_nt[];
extern  VTBL_ENTRY _ZTV9S885C4_nt[];
extern Class_Descriptor cd_S885C3_nt;
extern VTBL_ENTRY _ZTI9S885C3_nt[];
extern  VTBL_ENTRY _ZTV9S885C3_nt[];
extern Class_Descriptor cd_S885C2;
extern VTBL_ENTRY _ZTI6S885C2[];
extern  VTBL_ENTRY _ZTV6S885C2[];
static Base_Class bases_S885C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S885C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S885C7_nt,    ABISELECT(40,20), //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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S885C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S885C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S885C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI6S885C1[];
extern void _ZN6S885C1D1Ev();
extern void _ZN6S885C1D0Ev();
extern void _ZN9S885C5_nt2v2Ev();
extern void _ZN9S885C5_nt2v3Ev();
extern void _ZN9S885C5_nt2v4Ev();
extern void _ZN9S885C5_nt2v5Ev();
extern void _ZN9S885C5_nt2v6Ev();
extern void _ZN9S885C5_nt2v7Ev();
extern void _ZN9S885C5_nt2v8Ev();
extern void _ZN9S885C4_nt3v10Ev();
extern void _ZN9S885C4_nt3v11Ev();
extern void _ZN9S885C4_nt3v12Ev();
extern void _ZN9S885C4_nt3v13Ev();
extern void _ZN9S885C4_nt3v14Ev();
extern void _ZN9S885C3_nt3v15Ev();
extern void _ZN6S885C23v16Ev();
extern void _ZN6S885C12v1Ev();
extern void _ZN9S885C7_nt2v9Ev();
static  VTBL_ENTRY vtc_S885C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S885C1[0]),
  (VTBL_ENTRY)&_ZN6S885C1D1Ev,
  (VTBL_ENTRY)&_ZN6S885C1D0Ev,
  (VTBL_ENTRY)&_ZN9S885C5_nt2v2Ev,
  (VTBL_ENTRY)&_ZN9S885C5_nt2v3Ev,
  (VTBL_ENTRY)&_ZN9S885C5_nt2v4Ev,
  (VTBL_ENTRY)&_ZN9S885C5_nt2v5Ev,
  (VTBL_ENTRY)&_ZN9S885C5_nt2v6Ev,
  (VTBL_ENTRY)&_ZN9S885C5_nt2v7Ev,
  (VTBL_ENTRY)&_ZN9S885C5_nt2v8Ev,
  (VTBL_ENTRY)&_ZN9S885C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN9S885C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN9S885C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN9S885C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN9S885C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN9S885C3_nt3v15Ev,
  (VTBL_ENTRY)&_ZN6S885C23v16Ev,
  (VTBL_ENTRY)&_ZN6S885C12v1Ev,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI6S885C1[0]),
  (VTBL_ENTRY)&_ZN9S885C7_nt2v9Ev,
};
extern VTBL_ENTRY _ZTI6S885C1[];
extern  VTBL_ENTRY _ZTV6S885C1[];
Class_Descriptor cd_S885C1 = {  "S885C1", // class name
  bases_S885C1, 5,
  &(vtc_S885C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(224,168), // object size
  NSPAIRA(_ZTI6S885C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S885C1),22, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  5, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2428C6  {
  ::S2120C20_nt s2428c6f0;
  ::S2120C20_nt s2428c6f1;
  __tsi64 s2428c6f2;
  void  mf2428c6(); // _ZN7S2428C68mf2428c6Ev
};
//SIG(-1 S2428C6) C1{ m FC2{ m Fp Fi FC3{ m}} FC2 FL}


void  S2428C6 ::mf2428c6(){}

static void Test_S2428C6()
{
  {
    init_simple_test("S2428C6");
    S2428C6 lv;
    check2(sizeof(lv), ABISELECT(40,32), "sizeof(S2428C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2428C6)");
    check_field_offset(lv, s2428c6f0, 0, "S2428C6.s2428c6f0");
    check_field_offset(lv, s2428c6f1, ABISELECT(16,12), "S2428C6.s2428c6f1");
    check_field_offset(lv, s2428c6f2, ABISELECT(32,24), "S2428C6.s2428c6f2");
  }
}
static Arrange_To_Call_Me vS2428C6(Test_S2428C6, "S2428C6", ABISELECT(40,32));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2428C5  {
  ::S2428C6 s2428c5f0;
  __tsi64 s2428c5f1;
  int s2428c5f2;
  char s2428c5f3[2];
  ::S2120C20_nt s2428c5f4;
  void *s2428c5f5;
  int s2428c5f6;
  ::S2120C20_nt s2428c5f7[9];
  ::S2120C20_nt s2428c5f8;
  ::S2120C20_nt s2428c5f9;
  int s2428c5f10;
  ::S2120C20_nt s2428c5f11;
  ::S2120C20_nt s2428c5f12;
  ::S2120C20_nt s2428c5f13;
  int s2428c5f14[4];
  void  mf2428c5(); // _ZN7S2428C58mf2428c5Ev
};
//SIG(-1 S2428C5) C1{ m FC2{ m FC3{ m Fp Fi FC4{ m}} FC3 FL} FL Fi Fc[2] FC3 Fp Fi FC3[9] FC3 FC3 Fi FC3 FC3 FC3 Fi[4]}


void  S2428C5 ::mf2428c5(){}

static void Test_S2428C5()
{
  {
    init_simple_test("S2428C5");
    S2428C5 lv;
    check2(sizeof(lv), ABISELECT(336,256), "sizeof(S2428C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2428C5)");
    check_field_offset(lv, s2428c5f0, 0, "S2428C5.s2428c5f0");
    check_field_offset(lv, s2428c5f1, ABISELECT(40,32), "S2428C5.s2428c5f1");
    check_field_offset(lv, s2428c5f2, ABISELECT(48,40), "S2428C5.s2428c5f2");
    check_field_offset(lv, s2428c5f3, ABISELECT(52,44), "S2428C5.s2428c5f3");
    check_field_offset(lv, s2428c5f4, ABISELECT(56,48), "S2428C5.s2428c5f4");
    check_field_offset(lv, s2428c5f5, ABISELECT(72,60), "S2428C5.s2428c5f5");
    check_field_offset(lv, s2428c5f6, ABISELECT(80,64), "S2428C5.s2428c5f6");
    check_field_offset(lv, s2428c5f7, ABISELECT(88,68), "S2428C5.s2428c5f7");
    check_field_offset(lv, s2428c5f8, ABISELECT(232,176), "S2428C5.s2428c5f8");
    check_field_offset(lv, s2428c5f9, ABISELECT(248,188), "S2428C5.s2428c5f9");
    check_field_offset(lv, s2428c5f10, ABISELECT(264,200), "S2428C5.s2428c5f10");
    check_field_offset(lv, s2428c5f11, ABISELECT(272,204), "S2428C5.s2428c5f11");
    check_field_offset(lv, s2428c5f12, ABISELECT(288,216), "S2428C5.s2428c5f12");
    check_field_offset(lv, s2428c5f13, ABISELECT(304,228), "S2428C5.s2428c5f13");
    check_field_offset(lv, s2428c5f14, ABISELECT(320,240), "S2428C5.s2428c5f14");
  }
}
static Arrange_To_Call_Me vS2428C5(Test_S2428C5, "S2428C5", ABISELECT(336,256));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2428C4  {
  ::S2428C5 s2428c4f0;
  void *s2428c4f1;
  __tsi64 s2428c4f2;
  int s2428c4f3;
  void *s2428c4f4;
  virtual  ~S2428C4(); // _ZN7S2428C4D1Ev
  virtual void  v8(); // _ZN7S2428C42v8Ev
  virtual void  v9(); // _ZN7S2428C42v9Ev
  virtual void  v10(); // _ZN7S2428C43v10Ev
  virtual void  v11(); // _ZN7S2428C43v11Ev
  S2428C4(); // tgen
};
//SIG(-1 S2428C4) C1{ vd v1 v2 v3 v4 FC2{ m FC3{ m FC4{ m Fp Fi FC5{ m}} FC4 FL} FL Fi Fc[2] FC4 Fp Fi FC4[9] FC4 FC4 Fi FC4 FC4 FC4 Fi[4]} Fp FL Fi Fp}


 S2428C4 ::~S2428C4(){ note_dtor("S2428C4", this);}
void  S2428C4 ::v8(){vfunc_called(this, "_ZN7S2428C42v8Ev");}
void  S2428C4 ::v9(){vfunc_called(this, "_ZN7S2428C42v9Ev");}
void  S2428C4 ::v10(){vfunc_called(this, "_ZN7S2428C43v10Ev");}
void  S2428C4 ::v11(){vfunc_called(this, "_ZN7S2428C43v11Ev");}
S2428C4 ::S2428C4(){ note_ctor("S2428C4", this);} // tgen

static void Test_S2428C4()
{
  extern Class_Descriptor cd_S2428C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(48,71)];
    init_test(&cd_S2428C4, buf);
    S2428C4 *dp, &lv = *(dp=new (buf) S2428C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(376,280), "sizeof(S2428C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2428C4)");
    check_field_offset(lv, s2428c4f0, ABISELECT(8,4), "S2428C4.s2428c4f0");
    check_field_offset(lv, s2428c4f1, ABISELECT(344,260), "S2428C4.s2428c4f1");
    check_field_offset(lv, s2428c4f2, ABISELECT(352,264), "S2428C4.s2428c4f2");
    check_field_offset(lv, s2428c4f3, ABISELECT(360,272), "S2428C4.s2428c4f3");
    check_field_offset(lv, s2428c4f4, ABISELECT(368,276), "S2428C4.s2428c4f4");
    test_class_info(&lv, &cd_S2428C4);
    dp->~S2428C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2428C4(Test_S2428C4, "S2428C4", ABISELECT(376,280));

#else // __cplusplus

extern void _ZN7S2428C4C1Ev();
extern void _ZN7S2428C4D1Ev();
Name_Map name_map_S2428C4[] = {
  NSPAIR(_ZN7S2428C4C1Ev),
  NSPAIR(_ZN7S2428C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2428C4[];
extern void _ZN7S2428C4D1Ev();
extern void _ZN7S2428C4D0Ev();
extern void _ZN7S2428C42v8Ev();
extern void _ZN7S2428C42v9Ev();
extern void _ZN7S2428C43v10Ev();
extern void _ZN7S2428C43v11Ev();
static  VTBL_ENTRY vtc_S2428C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2428C4[0]),
  (VTBL_ENTRY)&_ZN7S2428C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2428C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2428C42v8Ev,
  (VTBL_ENTRY)&_ZN7S2428C42v9Ev,
  (VTBL_ENTRY)&_ZN7S2428C43v10Ev,
  (VTBL_ENTRY)&_ZN7S2428C43v11Ev,
};
extern VTBL_ENTRY _ZTI7S2428C4[];
extern  VTBL_ENTRY _ZTV7S2428C4[];
Class_Descriptor cd_S2428C4 = {  "S2428C4", // class name
  0,0,//no base classes
  &(vtc_S2428C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(376,280), // object size
  NSPAIRA(_ZTI7S2428C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2428C4),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  S2428C3  : S2428C4 {
  void *s2428c3f0;
  virtual  ~S2428C3(); // _ZN7S2428C3D1Ev
  virtual void  v12(); // _ZN7S2428C33v12Ev
  virtual void  v13(); // _ZN7S2428C33v13Ev
  virtual void  v14(); // _ZN7S2428C33v14Ev
  virtual void  v15(); // _ZN7S2428C33v15Ev
  virtual void  v16(); // _ZN7S2428C33v16Ev
  virtual void  v17(); // _ZN7S2428C33v17Ev
  virtual void  v18(); // _ZN7S2428C33v18Ev
  virtual void  v19(); // _ZN7S2428C33v19Ev
  virtual void  v20(); // _ZN7S2428C33v20Ev
  S2428C3(); // tgen
};
//SIG(-1 S2428C3) C1{ BC2{ vd v10 v11 v12 v13 FC3{ m FC4{ m FC5{ m Fp Fi FC6{ m}} FC5 FL} FL Fi Fc[2] FC5 Fp Fi FC5[9] FC5 FC5 Fi FC5 FC5 FC5 Fi[4]} Fp FL Fi Fp} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 Fp}


 S2428C3 ::~S2428C3(){ note_dtor("S2428C3", this);}
void  S2428C3 ::v12(){vfunc_called(this, "_ZN7S2428C33v12Ev");}
void  S2428C3 ::v13(){vfunc_called(this, "_ZN7S2428C33v13Ev");}
void  S2428C3 ::v14(){vfunc_called(this, "_ZN7S2428C33v14Ev");}
void  S2428C3 ::v15(){vfunc_called(this, "_ZN7S2428C33v15Ev");}
void  S2428C3 ::v16(){vfunc_called(this, "_ZN7S2428C33v16Ev");}
void  S2428C3 ::v17(){vfunc_called(this, "_ZN7S2428C33v17Ev");}
void  S2428C3 ::v18(){vfunc_called(this, "_ZN7S2428C33v18Ev");}
void  S2428C3 ::v19(){vfunc_called(this, "_ZN7S2428C33v19Ev");}
void  S2428C3 ::v20(){vfunc_called(this, "_ZN7S2428C33v20Ev");}
S2428C3 ::S2428C3(){ note_ctor("S2428C3", this);} // tgen

static void Test_S2428C3()
{
  extern Class_Descriptor cd_S2428C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(49,72)];
    init_test(&cd_S2428C3, buf);
    S2428C3 *dp, &lv = *(dp=new (buf) S2428C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(384,284), "sizeof(S2428C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2428C3)");
    check_base_class_offset(lv, (S2428C4*), 0, "S2428C3");
    check_field_offset(lv, s2428c3f0, ABISELECT(376,280), "S2428C3.s2428c3f0");
    test_class_info(&lv, &cd_S2428C3);
    dp->~S2428C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2428C3(Test_S2428C3, "S2428C3", ABISELECT(384,284));

#else // __cplusplus

extern void _ZN7S2428C3C1Ev();
extern void _ZN7S2428C3D1Ev();
Name_Map name_map_S2428C3[] = {
  NSPAIR(_ZN7S2428C3C1Ev),
  NSPAIR(_ZN7S2428C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2428C4;
extern VTBL_ENTRY _ZTI7S2428C4[];
extern  VTBL_ENTRY _ZTV7S2428C4[];
static Base_Class bases_S2428C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2428C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2428C3[];
extern void _ZN7S2428C3D1Ev();
extern void _ZN7S2428C3D0Ev();
extern void _ZN7S2428C42v8Ev();
extern void _ZN7S2428C42v9Ev();
extern void _ZN7S2428C43v10Ev();
extern void _ZN7S2428C43v11Ev();
extern void _ZN7S2428C33v12Ev();
extern void _ZN7S2428C33v13Ev();
extern void _ZN7S2428C33v14Ev();
extern void _ZN7S2428C33v15Ev();
extern void _ZN7S2428C33v16Ev();
extern void _ZN7S2428C33v17Ev();
extern void _ZN7S2428C33v18Ev();
extern void _ZN7S2428C33v19Ev();
extern void _ZN7S2428C33v20Ev();
static  VTBL_ENTRY vtc_S2428C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2428C3[0]),
  (VTBL_ENTRY)&_ZN7S2428C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2428C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2428C42v8Ev,
  (VTBL_ENTRY)&_ZN7S2428C42v9Ev,
  (VTBL_ENTRY)&_ZN7S2428C43v10Ev,
  (VTBL_ENTRY)&_ZN7S2428C43v11Ev,
  (VTBL_ENTRY)&_ZN7S2428C33v12Ev,
  (VTBL_ENTRY)&_ZN7S2428C33v13Ev,
  (VTBL_ENTRY)&_ZN7S2428C33v14Ev,
  (VTBL_ENTRY)&_ZN7S2428C33v15Ev,
  (VTBL_ENTRY)&_ZN7S2428C33v16Ev,
  (VTBL_ENTRY)&_ZN7S2428C33v17Ev,
  (VTBL_ENTRY)&_ZN7S2428C33v18Ev,
  (VTBL_ENTRY)&_ZN7S2428C33v19Ev,
  (VTBL_ENTRY)&_ZN7S2428C33v20Ev,
};
extern VTBL_ENTRY _ZTI7S2428C3[];
extern  VTBL_ENTRY _ZTV7S2428C3[];
Class_Descriptor cd_S2428C3 = {  "S2428C3", // class name
  bases_S2428C3, 1,
  &(vtc_S2428C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(384,284), // object size
  NSPAIRA(_ZTI7S2428C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2428C3),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2428C9_nt  {
  ::S2120C37 s2428c9f0;
  void *s2428c9f1[2];
  void  mf2428c9(); // _ZN10S2428C9_nt8mf2428c9Ev
};
//SIG(-1 S2428C9_nt) C1{ m FC2{ m Fp Fi[2] FC3{ m}} Fp[2]}


void  S2428C9_nt ::mf2428c9(){}

//skip512 S2428C9_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2428C2  : S2428C3 {
  ::S2428C9_nt s2428c2f0;
  void *s2428c2f1[2];
  virtual  ~S2428C2(); // _ZN7S2428C2D1Ev
  virtual void  v21(); // _ZN7S2428C23v21Ev
  virtual void  v22(); // _ZN7S2428C23v22Ev
  virtual void  v23(); // _ZN7S2428C23v23Ev
  virtual void  v24(); // _ZN7S2428C23v24Ev
  virtual void  v25(); // _ZN7S2428C23v25Ev
  virtual void  v26(); // _ZN7S2428C23v26Ev
  virtual void  v27(); // _ZN7S2428C23v27Ev
  virtual void  v28(); // _ZN7S2428C23v28Ev
  virtual void  v29(); // _ZN7S2428C23v29Ev
  S2428C2(); // tgen
};
//SIG(-1 S2428C2) C1{ BC2{ BC3{ vd v10 v11 v12 v13 FC4{ m FC5{ m FC6{ m Fp Fi FC7{ m}} FC6 FL} FL Fi Fc[2] FC6 Fp Fi FC6[9] FC6 FC6 Fi FC6 FC6 FC6 Fi[4]} Fp FL Fi Fp} vd v14 v15 v16 v17 v18 v19 v20 v21 v22 Fp} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 FC8{ m FC9{ m Fp Fi[2] FC10{ m}} Fp[2]} Fp[2]}


 S2428C2 ::~S2428C2(){ note_dtor("S2428C2", this);}
void  S2428C2 ::v21(){vfunc_called(this, "_ZN7S2428C23v21Ev");}
void  S2428C2 ::v22(){vfunc_called(this, "_ZN7S2428C23v22Ev");}
void  S2428C2 ::v23(){vfunc_called(this, "_ZN7S2428C23v23Ev");}
void  S2428C2 ::v24(){vfunc_called(this, "_ZN7S2428C23v24Ev");}
void  S2428C2 ::v25(){vfunc_called(this, "_ZN7S2428C23v25Ev");}
void  S2428C2 ::v26(){vfunc_called(this, "_ZN7S2428C23v26Ev");}
void  S2428C2 ::v27(){vfunc_called(this, "_ZN7S2428C23v27Ev");}
void  S2428C2 ::v28(){vfunc_called(this, "_ZN7S2428C23v28Ev");}
void  S2428C2 ::v29(){vfunc_called(this, "_ZN7S2428C23v29Ev");}
S2428C2 ::S2428C2(){ note_ctor("S2428C2", this);} // tgen

static void Test_S2428C2()
{
  extern Class_Descriptor cd_S2428C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(56,80)];
    init_test(&cd_S2428C2, buf);
    S2428C2 *dp, &lv = *(dp=new (buf) S2428C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(440,316), "sizeof(S2428C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2428C2)");
    check_base_class_offset(lv, (S2428C4*)(S2428C3*), 0, "S2428C2");
    check_base_class_offset(lv, (S2428C3*), 0, "S2428C2");
    check_field_offset(lv, s2428c2f0, ABISELECT(384,284), "S2428C2.s2428c2f0");
    check_field_offset(lv, s2428c2f1, ABISELECT(424,308), "S2428C2.s2428c2f1");
    test_class_info(&lv, &cd_S2428C2);
    dp->~S2428C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2428C2(Test_S2428C2, "S2428C2", ABISELECT(440,316));

#else // __cplusplus

extern void _ZN7S2428C2C1Ev();
extern void _ZN7S2428C2D1Ev();
Name_Map name_map_S2428C2[] = {
  NSPAIR(_ZN7S2428C2C1Ev),
  NSPAIR(_ZN7S2428C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2428C4;
extern VTBL_ENTRY _ZTI7S2428C4[];
extern  VTBL_ENTRY _ZTV7S2428C4[];
extern Class_Descriptor cd_S2428C3;
extern VTBL_ENTRY _ZTI7S2428C3[];
extern  VTBL_ENTRY _ZTV7S2428C3[];
static Base_Class bases_S2428C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2428C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2428C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S2428C2[];
extern void _ZN7S2428C2D1Ev();
extern void _ZN7S2428C2D0Ev();
extern void _ZN7S2428C42v8Ev();
extern void _ZN7S2428C42v9Ev();
extern void _ZN7S2428C43v10Ev();
extern void _ZN7S2428C43v11Ev();
extern void _ZN7S2428C33v12Ev();
extern void _ZN7S2428C33v13Ev();
extern void _ZN7S2428C33v14Ev();
extern void _ZN7S2428C33v15Ev();
extern void _ZN7S2428C33v16Ev();
extern void _ZN7S2428C33v17Ev();
extern void _ZN7S2428C33v18Ev();
extern void _ZN7S2428C33v19Ev();
extern void _ZN7S2428C33v20Ev();
extern void _ZN7S2428C23v21Ev();
extern void _ZN7S2428C23v22Ev();
extern void _ZN7S2428C23v23Ev();
extern void _ZN7S2428C23v24Ev();
extern void _ZN7S2428C23v25Ev();
extern void _ZN7S2428C23v26Ev();
extern void _ZN7S2428C23v27Ev();
extern void _ZN7S2428C23v28Ev();
extern void _ZN7S2428C23v29Ev();
static  VTBL_ENTRY vtc_S2428C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2428C2[0]),
  (VTBL_ENTRY)&_ZN7S2428C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2428C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2428C42v8Ev,
  (VTBL_ENTRY)&_ZN7S2428C42v9Ev,
  (VTBL_ENTRY)&_ZN7S2428C43v10Ev,
  (VTBL_ENTRY)&_ZN7S2428C43v11Ev,
  (VTBL_ENTRY)&_ZN7S2428C33v12Ev,
  (VTBL_ENTRY)&_ZN7S2428C33v13Ev,
  (VTBL_ENTRY)&_ZN7S2428C33v14Ev,
  (VTBL_ENTRY)&_ZN7S2428C33v15Ev,
  (VTBL_ENTRY)&_ZN7S2428C33v16Ev,
  (VTBL_ENTRY)&_ZN7S2428C33v17Ev,
  (VTBL_ENTRY)&_ZN7S2428C33v18Ev,
  (VTBL_ENTRY)&_ZN7S2428C33v19Ev,
  (VTBL_ENTRY)&_ZN7S2428C33v20Ev,
  (VTBL_ENTRY)&_ZN7S2428C23v21Ev,
  (VTBL_ENTRY)&_ZN7S2428C23v22Ev,
  (VTBL_ENTRY)&_ZN7S2428C23v23Ev,
  (VTBL_ENTRY)&_ZN7S2428C23v24Ev,
  (VTBL_ENTRY)&_ZN7S2428C23v25Ev,
  (VTBL_ENTRY)&_ZN7S2428C23v26Ev,
  (VTBL_ENTRY)&_ZN7S2428C23v27Ev,
  (VTBL_ENTRY)&_ZN7S2428C23v28Ev,
  (VTBL_ENTRY)&_ZN7S2428C23v29Ev,
};
extern VTBL_ENTRY _ZTI7S2428C2[];
extern  VTBL_ENTRY _ZTV7S2428C2[];
Class_Descriptor cd_S2428C2 = {  "S2428C2", // class name
  bases_S2428C2, 2,
  &(vtc_S2428C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(440,316), // object size
  NSPAIRA(_ZTI7S2428C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2428C2),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  S2428C1  : S2428C2 {
  void *s2428c1f0[2];
  ::S2428C9_nt s2428c1f1;
  virtual void  v1(); // _ZN7S2428C12v1Ev
  virtual void  v2(); // _ZN7S2428C12v2Ev
  virtual void  v3(); // _ZN7S2428C12v3Ev
  virtual void  v4(); // _ZN7S2428C12v4Ev
  virtual void  v5(); // _ZN7S2428C12v5Ev
  virtual void  v6(); // _ZN7S2428C12v6Ev
  virtual void  v7(); // _ZN7S2428C12v7Ev
  ~S2428C1(); // tgen
  S2428C1(); // tgen
};
//SIG(1 S2428C1) C1{ BC2{ BC3{ BC4{ vd v8 v9 v10 v11 FC5{ m FC6{ m FC7{ m Fp Fi FC8{ m}} FC7 FL} FL Fi Fc[2] FC7 Fp Fi FC7[9] FC7 FC7 Fi FC7 FC7 FC7 Fi[4]} Fp FL Fi Fp} vd v12 v13 v14 v15 v16 v17 v18 v19 v20 Fp} vd v21 v22 v23 v24 v25 v26 v27 v28 v29 FC9{ m FC10{ m Fp Fi[2] FC11{ m}} Fp[2]} Fp[2]} v1 v2 v3 v4 v5 v6 v7 Fp[2] FC9}


void  S2428C1 ::v1(){vfunc_called(this, "_ZN7S2428C12v1Ev");}
void  S2428C1 ::v2(){vfunc_called(this, "_ZN7S2428C12v2Ev");}
void  S2428C1 ::v3(){vfunc_called(this, "_ZN7S2428C12v3Ev");}
void  S2428C1 ::v4(){vfunc_called(this, "_ZN7S2428C12v4Ev");}
void  S2428C1 ::v5(){vfunc_called(this, "_ZN7S2428C12v5Ev");}
void  S2428C1 ::v6(){vfunc_called(this, "_ZN7S2428C12v6Ev");}
void  S2428C1 ::v7(){vfunc_called(this, "_ZN7S2428C12v7Ev");}
S2428C1 ::~S2428C1(){ note_dtor("S2428C1", this);} // tgen
S2428C1 ::S2428C1(){ note_ctor("S2428C1", this);} // tgen

static void Test_S2428C1()
{
  extern Class_Descriptor cd_S2428C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(63,88)];
    init_test(&cd_S2428C1, buf);
    S2428C1 *dp, &lv = *(dp=new (buf) S2428C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(496,348), "sizeof(S2428C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2428C1)");
    check_base_class_offset(lv, (S2428C4*)(S2428C3*)(S2428C2*), 0, "S2428C1");
    check_base_class_offset(lv, (S2428C3*)(S2428C2*), 0, "S2428C1");
    check_base_class_offset(lv, (S2428C2*), 0, "S2428C1");
    check_field_offset(lv, s2428c1f0, ABISELECT(440,316), "S2428C1.s2428c1f0");
    check_field_offset(lv, s2428c1f1, ABISELECT(456,324), "S2428C1.s2428c1f1");
    test_class_info(&lv, &cd_S2428C1);
    dp->~S2428C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2428C1(Test_S2428C1, "S2428C1", ABISELECT(496,348));

#else // __cplusplus

extern void _ZN7S2428C1C1Ev();
extern void _ZN7S2428C1D1Ev();
Name_Map name_map_S2428C1[] = {
  NSPAIR(_ZN7S2428C1C1Ev),
  NSPAIR(_ZN7S2428C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2428C4;
extern VTBL_ENTRY _ZTI7S2428C4[];
extern  VTBL_ENTRY _ZTV7S2428C4[];
extern Class_Descriptor cd_S2428C3;
extern VTBL_ENTRY _ZTI7S2428C3[];
extern  VTBL_ENTRY _ZTV7S2428C3[];
extern Class_Descriptor cd_S2428C2;
extern VTBL_ENTRY _ZTI7S2428C2[];
extern  VTBL_ENTRY _ZTV7S2428C2[];
static Base_Class bases_S2428C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2428C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2428C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2428C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S2428C1[];
extern void _ZN7S2428C1D1Ev();
extern void _ZN7S2428C1D0Ev();
extern void _ZN7S2428C42v8Ev();
extern void _ZN7S2428C42v9Ev();
extern void _ZN7S2428C43v10Ev();
extern void _ZN7S2428C43v11Ev();
extern void _ZN7S2428C33v12Ev();
extern void _ZN7S2428C33v13Ev();
extern void _ZN7S2428C33v14Ev();
extern void _ZN7S2428C33v15Ev();
extern void _ZN7S2428C33v16Ev();
extern void _ZN7S2428C33v17Ev();
extern void _ZN7S2428C33v18Ev();
extern void _ZN7S2428C33v19Ev();
extern void _ZN7S2428C33v20Ev();
extern void _ZN7S2428C23v21Ev();
extern void _ZN7S2428C23v22Ev();
extern void _ZN7S2428C23v23Ev();
extern void _ZN7S2428C23v24Ev();
extern void _ZN7S2428C23v25Ev();
extern void _ZN7S2428C23v26Ev();
extern void _ZN7S2428C23v27Ev();
extern void _ZN7S2428C23v28Ev();
extern void _ZN7S2428C23v29Ev();
extern void _ZN7S2428C12v1Ev();
extern void _ZN7S2428C12v2Ev();
extern void _ZN7S2428C12v3Ev();
extern void _ZN7S2428C12v4Ev();
extern void _ZN7S2428C12v5Ev();
extern void _ZN7S2428C12v6Ev();
extern void _ZN7S2428C12v7Ev();
static  VTBL_ENTRY vtc_S2428C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2428C1[0]),
  (VTBL_ENTRY)&_ZN7S2428C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2428C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2428C42v8Ev,
  (VTBL_ENTRY)&_ZN7S2428C42v9Ev,
  (VTBL_ENTRY)&_ZN7S2428C43v10Ev,
  (VTBL_ENTRY)&_ZN7S2428C43v11Ev,
  (VTBL_ENTRY)&_ZN7S2428C33v12Ev,
  (VTBL_ENTRY)&_ZN7S2428C33v13Ev,
  (VTBL_ENTRY)&_ZN7S2428C33v14Ev,
  (VTBL_ENTRY)&_ZN7S2428C33v15Ev,
  (VTBL_ENTRY)&_ZN7S2428C33v16Ev,
  (VTBL_ENTRY)&_ZN7S2428C33v17Ev,
  (VTBL_ENTRY)&_ZN7S2428C33v18Ev,
  (VTBL_ENTRY)&_ZN7S2428C33v19Ev,
  (VTBL_ENTRY)&_ZN7S2428C33v20Ev,
  (VTBL_ENTRY)&_ZN7S2428C23v21Ev,
  (VTBL_ENTRY)&_ZN7S2428C23v22Ev,
  (VTBL_ENTRY)&_ZN7S2428C23v23Ev,
  (VTBL_ENTRY)&_ZN7S2428C23v24Ev,
  (VTBL_ENTRY)&_ZN7S2428C23v25Ev,
  (VTBL_ENTRY)&_ZN7S2428C23v26Ev,
  (VTBL_ENTRY)&_ZN7S2428C23v27Ev,
  (VTBL_ENTRY)&_ZN7S2428C23v28Ev,
  (VTBL_ENTRY)&_ZN7S2428C23v29Ev,
  (VTBL_ENTRY)&_ZN7S2428C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2428C12v2Ev,
  (VTBL_ENTRY)&_ZN7S2428C12v3Ev,
  (VTBL_ENTRY)&_ZN7S2428C12v4Ev,
  (VTBL_ENTRY)&_ZN7S2428C12v5Ev,
  (VTBL_ENTRY)&_ZN7S2428C12v6Ev,
  (VTBL_ENTRY)&_ZN7S2428C12v7Ev,
};
extern VTBL_ENTRY _ZTI7S2428C1[];
extern  VTBL_ENTRY _ZTV7S2428C1[];
Class_Descriptor cd_S2428C1 = {  "S2428C1", // class name
  bases_S2428C1, 3,
  &(vtc_S2428C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(496,348), // object size
  NSPAIRA(_ZTI7S2428C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2428C1),33, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13685C3  {
  long s13685c3f0[2];
  __tsi64 s13685c3f1[2];
  long s13685c3f2;
  __tsi64 s13685c3f3;
  short s13685c3f4[3];
  long s13685c3f5[11];
};
//SIG(-1 S13685C3) C1{ Fl[2] FL[2] Fl FL Fs[3] Fl[11]}



static void Test_S13685C3()
{
  {
    init_simple_test("S13685C3");
    S13685C3 lv;
    check2(sizeof(lv), ABISELECT(144,88), "sizeof(S13685C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13685C3)");
    check_field_offset(lv, s13685c3f0, 0, "S13685C3.s13685c3f0");
    check_field_offset(lv, s13685c3f1, ABISELECT(16,8), "S13685C3.s13685c3f1");
    check_field_offset(lv, s13685c3f2, ABISELECT(32,24), "S13685C3.s13685c3f2");
    check_field_offset(lv, s13685c3f3, ABISELECT(40,28), "S13685C3.s13685c3f3");
    check_field_offset(lv, s13685c3f4, ABISELECT(48,36), "S13685C3.s13685c3f4");
    check_field_offset(lv, s13685c3f5, ABISELECT(56,44), "S13685C3.s13685c3f5");
  }
}
static Arrange_To_Call_Me vS13685C3(Test_S13685C3, "S13685C3", ABISELECT(144,88));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13685C2  {
  char s13685c2f0;
  ::S13685C3 s13685c2f1;
};
//SIG(-1 S13685C2) C1{ Fc FC2{ Fl[2] FL[2] Fl FL Fs[3] Fl[11]}}



static void Test_S13685C2()
{
  {
    init_simple_test("S13685C2");
    S13685C2 lv;
    check2(sizeof(lv), ABISELECT(152,92), "sizeof(S13685C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13685C2)");
    check_field_offset(lv, s13685c2f0, 0, "S13685C2.s13685c2f0");
    check_field_offset(lv, s13685c2f1, ABISELECT(8,4), "S13685C2.s13685c2f1");
  }
}
static Arrange_To_Call_Me vS13685C2(Test_S13685C2, "S13685C2", ABISELECT(152,92));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13685C6  {
  long s13685c6f0;
  __tsi64 s13685c6f1[2];
  long s13685c6f2;
  __tsi64 s13685c6f3;
  short s13685c6f4;
};
//SIG(-1 S13685C6) C1{ Fl FL[2] Fl FL Fs}



static void Test_S13685C6()
{
  {
    init_simple_test("S13685C6");
    S13685C6 lv;
    check2(sizeof(lv), ABISELECT(48,36), "sizeof(S13685C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13685C6)");
    check_field_offset(lv, s13685c6f0, 0, "S13685C6.s13685c6f0");
    check_field_offset(lv, s13685c6f1, ABISELECT(8,4), "S13685C6.s13685c6f1");
    check_field_offset(lv, s13685c6f2, ABISELECT(24,20), "S13685C6.s13685c6f2");
    check_field_offset(lv, s13685c6f3, ABISELECT(32,24), "S13685C6.s13685c6f3");
    check_field_offset(lv, s13685c6f4, ABISELECT(40,32), "S13685C6.s13685c6f4");
  }
}
static Arrange_To_Call_Me vS13685C6(Test_S13685C6, "S13685C6", ABISELECT(48,36));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13685C5  {
  char s13685c5f0;
  ::S13685C6 s13685c5f1;
};
//SIG(-1 S13685C5) C1{ Fc FC2{ Fl FL[2] Fl FL Fs}}



static void Test_S13685C5()
{
  {
    init_simple_test("S13685C5");
    S13685C5 lv;
    check2(sizeof(lv), ABISELECT(56,40), "sizeof(S13685C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13685C5)");
    check_field_offset(lv, s13685c5f0, 0, "S13685C5.s13685c5f0");
    check_field_offset(lv, s13685c5f1, ABISELECT(8,4), "S13685C5.s13685c5f1");
  }
}
static Arrange_To_Call_Me vS13685C5(Test_S13685C5, "S13685C5", ABISELECT(56,40));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13685C9  {
  void *s13685c9f0;
  __tsi64 s13685c9f1;
};
//SIG(-1 S13685C9) C1{ Fp FL}



static void Test_S13685C9()
{
  {
    init_simple_test("S13685C9");
    S13685C9 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S13685C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13685C9)");
    check_field_offset(lv, s13685c9f0, 0, "S13685C9.s13685c9f0");
    check_field_offset(lv, s13685c9f1, ABISELECT(8,4), "S13685C9.s13685c9f1");
  }
}
static Arrange_To_Call_Me vS13685C9(Test_S13685C9, "S13685C9", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13685C8  {
  long s13685c8f0;
  ::S13685C9 s13685c8f1;
};
//SIG(-1 S13685C8) C1{ Fl FC2{ Fp FL}}



static void Test_S13685C8()
{
  {
    init_simple_test("S13685C8");
    S13685C8 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S13685C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13685C8)");
    check_field_offset(lv, s13685c8f0, 0, "S13685C8.s13685c8f0");
    check_field_offset(lv, s13685c8f1, ABISELECT(8,4), "S13685C8.s13685c8f1");
  }
}
static Arrange_To_Call_Me vS13685C8(Test_S13685C8, "S13685C8", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13685C7  {
  __tsi64 s13685c7f0;
  ::S13685C8 s13685c7f1;
};
//SIG(-1 S13685C7) C1{ FL FC2{ Fl FC3{ Fp FL}}}



static void Test_S13685C7()
{
  {
    init_simple_test("S13685C7");
    S13685C7 lv;
    check2(sizeof(lv), ABISELECT(32,24), "sizeof(S13685C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13685C7)");
    check_field_offset(lv, s13685c7f0, 0, "S13685C7.s13685c7f0");
    check_field_offset(lv, s13685c7f1, 8, "S13685C7.s13685c7f1");
  }
}
static Arrange_To_Call_Me vS13685C7(Test_S13685C7, "S13685C7", ABISELECT(32,24));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13685C14  {
  short s13685c14f0;
  short s13685c14f1[3];
};
//SIG(1 S13685C14) C1{ Fs[4]}



static void Test_S13685C14()
{
  {
    init_simple_test("S13685C14");
    S13685C14 lv;
    check2(sizeof(lv), 8, "sizeof(S13685C14)");
    check2(__alignof__(lv), 2, "__alignof__(S13685C14)");
    check_field_offset(lv, s13685c14f0, 0, "S13685C14.s13685c14f0");
    check_field_offset(lv, s13685c14f1, 2, "S13685C14.s13685c14f1");
  }
}
static Arrange_To_Call_Me vS13685C14(Test_S13685C14, "S13685C14", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13685C15_nt  {
  short s13685c15f0;
};
//SIG(-1 S13685C15_nt) C1{ Fs}



//skip512 S13685C15_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

union  S13685C13  {
  ::S13685C14 s13685c13f0;
  ::S13685C15_nt s13685c13f1;
};
//SIG(1 S13685C13) U1{ FC2{ Fs Fs[3]} FC3{ Fs}}

#endif // __cplusplus
#ifdef __cplusplus

struct  S13685C12  {
  long s13685c12f0;
  ::S13685C13 s13685c12f1;
};
//SIG(-1 S13685C12) C1{ Fl FU2{ FC3{ Fs Fs[3]} FC4{ Fs}}}



static void Test_S13685C12()
{
  {
    init_simple_test("S13685C12");
    S13685C12 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S13685C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13685C12)");
    check_field_offset(lv, s13685c12f0, 0, "S13685C12.s13685c12f0");
    check_field_offset(lv, s13685c12f1, ABISELECT(8,4), "S13685C12.s13685c12f1");
  }
}
static Arrange_To_Call_Me vS13685C12(Test_S13685C12, "S13685C12", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13685C11  {
  __tsi64 s13685c11f0;
  ::S13685C12 s13685c11f1;
};
//SIG(-1 S13685C11) C1{ FL FC2{ Fl FU3{ FC4{ Fs Fs[3]} FC5{ Fs}}}}



static void Test_S13685C11()
{
  {
    init_simple_test("S13685C11");
    S13685C11 lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(S13685C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13685C11)");
    check_field_offset(lv, s13685c11f0, 0, "S13685C11.s13685c11f0");
    check_field_offset(lv, s13685c11f1, 8, "S13685C11.s13685c11f1");
  }
}
static Arrange_To_Call_Me vS13685C11(Test_S13685C11, "S13685C11", ABISELECT(24,20));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13685C17  {
  __tsi64 s13685c17f0;
  ::S601C11 s13685c17f1;
};
//SIG(-1 S13685C17) C1{ FL FC2{ Fp[2]}}



static void Test_S13685C17()
{
  {
    init_simple_test("S13685C17");
    S13685C17 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S13685C17)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13685C17)");
    check_field_offset(lv, s13685c17f0, 0, "S13685C17.s13685c17f0");
    check_field_offset(lv, s13685c17f1, 8, "S13685C17.s13685c17f1");
  }
}
static Arrange_To_Call_Me vS13685C17(Test_S13685C17, "S13685C17", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13685C16  {
  __tsi64 s13685c16f0;
  ::S13685C17 s13685c16f1;
};
//SIG(-1 S13685C16) C1{ FL FC2{ FL FC3{ Fp[2]}}}



static void Test_S13685C16()
{
  {
    init_simple_test("S13685C16");
    S13685C16 lv;
    check2(sizeof(lv), ABISELECT(32,24), "sizeof(S13685C16)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13685C16)");
    check_field_offset(lv, s13685c16f0, 0, "S13685C16.s13685c16f0");
    check_field_offset(lv, s13685c16f1, 8, "S13685C16.s13685c16f1");
  }
}
static Arrange_To_Call_Me vS13685C16(Test_S13685C16, "S13685C16", ABISELECT(32,24));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13685C20  {
  __tsi64 s13685c20f0;
  void *s13685c20f1;
  void *s13685c20f2;
};
//SIG(-1 S13685C20) C1{ FL Fp[2]}



static void Test_S13685C20()
{
  {
    init_simple_test("S13685C20");
    S13685C20 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S13685C20)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13685C20)");
    check_field_offset(lv, s13685c20f0, 0, "S13685C20.s13685c20f0");
    check_field_offset(lv, s13685c20f1, 8, "S13685C20.s13685c20f1");
    check_field_offset(lv, s13685c20f2, ABISELECT(16,12), "S13685C20.s13685c20f2");
  }
}
static Arrange_To_Call_Me vS13685C20(Test_S13685C20, "S13685C20", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13685C21  {
  __tsi64 s13685c21f0;
  void *s13685c21f1;
};
//SIG(-1 S13685C21) C1{ FL Fp}



static void Test_S13685C21()
{
  {
    init_simple_test("S13685C21");
    S13685C21 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S13685C21)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13685C21)");
    check_field_offset(lv, s13685c21f0, 0, "S13685C21.s13685c21f0");
    check_field_offset(lv, s13685c21f1, 8, "S13685C21.s13685c21f1");
  }
}
static Arrange_To_Call_Me vS13685C21(Test_S13685C21, "S13685C21", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13685C23  {
  __tsi64 s13685c23f0;
  long s13685c23f1;
  long s13685c23f2;
  void *s13685c23f3;
};
//SIG(-1 S13685C23) C1{ FL Fl[2] Fp}



static void Test_S13685C23()
{
  {
    init_simple_test("S13685C23");
    S13685C23 lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S13685C23)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13685C23)");
    check_field_offset(lv, s13685c23f0, 0, "S13685C23.s13685c23f0");
    check_field_offset(lv, s13685c23f1, 8, "S13685C23.s13685c23f1");
    check_field_offset(lv, s13685c23f2, ABISELECT(16,12), "S13685C23.s13685c23f2");
    check_field_offset(lv, s13685c23f3, ABISELECT(24,16), "S13685C23.s13685c23f3");
  }
}
static Arrange_To_Call_Me vS13685C23(Test_S13685C23, "S13685C23", ABISELECT(32,20));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13685C24  {
  __tsi64 s13685c24f0;
  long s13685c24f1;
  void *s13685c24f2;
};
//SIG(-1 S13685C24) C1{ FL Fl Fp}



static void Test_S13685C24()
{
  {
    init_simple_test("S13685C24");
    S13685C24 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S13685C24)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13685C24)");
    check_field_offset(lv, s13685c24f0, 0, "S13685C24.s13685c24f0");
    check_field_offset(lv, s13685c24f1, 8, "S13685C24.s13685c24f1");
    check_field_offset(lv, s13685c24f2, ABISELECT(16,12), "S13685C24.s13685c24f2");
  }
}
static Arrange_To_Call_Me vS13685C24(Test_S13685C24, "S13685C24", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13685C19  {
  __tsi64 s13685c19f0;
  ::S13685C20 s13685c19f1;
  ::S13685C21 s13685c19f2;
  void *s13685c19f3;
  ::S13685C21 s13685c19f4;
  ::S13685C23 s13685c19f5;
  ::S13685C24 s13685c19f6;
  void *s13685c19f7;
};
//SIG(-1 S13685C19) C1{ FL FC2{ FL Fp[2]} FC3{ FL Fp} Fp FC3 FC4{ FL Fl[2] Fp} FC5{ FL Fl Fp} Fp}



static void Test_S13685C19()
{
  {
    init_simple_test("S13685C19");
    S13685C19 lv;
    check2(sizeof(lv), ABISELECT(136,92), "sizeof(S13685C19)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13685C19)");
    check_field_offset(lv, s13685c19f0, 0, "S13685C19.s13685c19f0");
    check_field_offset(lv, s13685c19f1, 8, "S13685C19.s13685c19f1");
    check_field_offset(lv, s13685c19f2, ABISELECT(32,24), "S13685C19.s13685c19f2");
    check_field_offset(lv, s13685c19f3, ABISELECT(48,36), "S13685C19.s13685c19f3");
    check_field_offset(lv, s13685c19f4, ABISELECT(56,40), "S13685C19.s13685c19f4");
    check_field_offset(lv, s13685c19f5, ABISELECT(72,52), "S13685C19.s13685c19f5");
    check_field_offset(lv, s13685c19f6, ABISELECT(104,72), "S13685C19.s13685c19f6");
    check_field_offset(lv, s13685c19f7, ABISELECT(128,88), "S13685C19.s13685c19f7");
  }
}
static Arrange_To_Call_Me vS13685C19(Test_S13685C19, "S13685C19", ABISELECT(136,92));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13685C10  {
  __tsi64 s13685c10f0;
  ::S13685C11 s13685c10f1;
  ::S13685C16 s13685c10f2;
  ::S13685C19 s13685c10f3;
};
//SIG(-1 S13685C10) C1{ FL FC2{ FL FC3{ Fl FU4{ FC5{ Fs Fs[3]} FC6{ Fs}}}} FC7{ FL FC8{ FL FC9{ Fp Fp}}} FC10{ FL FC11{ FL Fp Fp} FC12{ FL Fp} Fp FC12 FC13{ FL Fl Fl Fp} FC14{ FL Fl Fp} Fp}}



static void Test_S13685C10()
{
  {
    init_simple_test("S13685C10");
    S13685C10 lv;
    check2(sizeof(lv), ABISELECT(200,144), "sizeof(S13685C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13685C10)");
    check_field_offset(lv, s13685c10f0, 0, "S13685C10.s13685c10f0");
    check_field_offset(lv, s13685c10f1, 8, "S13685C10.s13685c10f1");
    check_field_offset(lv, s13685c10f2, ABISELECT(32,28), "S13685C10.s13685c10f2");
    check_field_offset(lv, s13685c10f3, ABISELECT(64,52), "S13685C10.s13685c10f3");
  }
}
static Arrange_To_Call_Me vS13685C10(Test_S13685C10, "S13685C10", ABISELECT(200,144));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13685C4  {
  __tsi64 s13685c4f0;
  ::S13685C5 s13685c4f1;
  ::S13685C7 s13685c4f2;
  ::S13685C10 s13685c4f3;
};
//SIG(-1 S13685C4) C1{ FL FC2{ Fc FC3{ Fl FL[2] Fl FL Fs}} FC4{ FL FC5{ Fl FC6{ Fp FL}}} FC7{ FL FC8{ FL FC9{ Fl FU10{ FC11{ Fs Fs[3]} FC12{ Fs}}}} FC13{ FL FC14{ FL FC15{ Fp Fp}}} FC16{ FL FC17{ FL Fp Fp} FC18{ FL Fp} Fp FC18 FC19{ FL Fl Fl Fp} FC20{ FL Fl Fp} Fp}}}



static void Test_S13685C4()
{
  {
    init_simple_test("S13685C4");
    S13685C4 lv;
    check2(sizeof(lv), ABISELECT(296,216), "sizeof(S13685C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13685C4)");
    check_field_offset(lv, s13685c4f0, 0, "S13685C4.s13685c4f0");
    check_field_offset(lv, s13685c4f1, 8, "S13685C4.s13685c4f1");
    check_field_offset(lv, s13685c4f2, ABISELECT(64,48), "S13685C4.s13685c4f2");
    check_field_offset(lv, s13685c4f3, ABISELECT(96,72), "S13685C4.s13685c4f3");
  }
}
static Arrange_To_Call_Me vS13685C4(Test_S13685C4, "S13685C4", ABISELECT(296,216));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13685C1  {
  __tsi64 s13685c1f0;
  ::S13685C2 s13685c1f1;
  void *s13685c1f2[2];
  ::S13685C4 s13685c1f3;
  void *s13685c1f4;
  void *s13685c1f5;
};
//SIG(1 S13685C1) C1{ FL FC2{ Fc FC3{ Fl[2] FL[2] Fl FL Fs[3] Fl[11]}} Fp[2] FC4{ FL FC5{ Fc FC6{ Fl FL[2] Fl FL Fs}} FC7{ FL FC8{ Fl FC9{ Fp FL}}} FC10{ FL FC11{ FL FC12{ Fl FU13{ FC14{ Fs Fs[3]} FC15{ Fs}}}} FC16{ FL FC17{ FL FC18{ Fp Fp}}} FC19{ FL FC20{ FL Fp Fp} FC21{ FL Fp} Fp FC21 FC22{ FL Fl Fl Fp} FC23{ FL Fl Fp} Fp}}} Fp Fp}



static void Test_S13685C1()
{
  {
    init_simple_test("S13685C1");
    S13685C1 lv;
    check2(sizeof(lv), ABISELECT(488,332), "sizeof(S13685C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13685C1)");
    check_field_offset(lv, s13685c1f0, 0, "S13685C1.s13685c1f0");
    check_field_offset(lv, s13685c1f1, 8, "S13685C1.s13685c1f1");
    check_field_offset(lv, s13685c1f2, ABISELECT(160,100), "S13685C1.s13685c1f2");
    check_field_offset(lv, s13685c1f3, ABISELECT(176,108), "S13685C1.s13685c1f3");
    check_field_offset(lv, s13685c1f4, ABISELECT(472,324), "S13685C1.s13685c1f4");
    check_field_offset(lv, s13685c1f5, ABISELECT(480,328), "S13685C1.s13685c1f5");
  }
}
static Arrange_To_Call_Me vS13685C1(Test_S13685C1, "S13685C1", ABISELECT(488,332));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20389C2_nt  {
  virtual void  v8(); // _ZN11S20389C2_nt2v8Ev
  virtual void  v9(); // _ZN11S20389C2_nt2v9Ev
  virtual void  v10(); // _ZN11S20389C2_nt3v10Ev
  virtual void  v11(); // _ZN11S20389C2_nt3v11Ev
  virtual void  v12(); // _ZN11S20389C2_nt3v12Ev
  virtual void  v13(); // _ZN11S20389C2_nt3v13Ev
  ~S20389C2_nt(); // tgen
  S20389C2_nt(); // tgen
};
//SIG(-1 S20389C2_nt) C1{ v1 v2 v3 v4 v5 v6}


void  S20389C2_nt ::v8(){vfunc_called(this, "_ZN11S20389C2_nt2v8Ev");}
void  S20389C2_nt ::v9(){vfunc_called(this, "_ZN11S20389C2_nt2v9Ev");}
void  S20389C2_nt ::v10(){vfunc_called(this, "_ZN11S20389C2_nt3v10Ev");}
void  S20389C2_nt ::v11(){vfunc_called(this, "_ZN11S20389C2_nt3v11Ev");}
void  S20389C2_nt ::v12(){vfunc_called(this, "_ZN11S20389C2_nt3v12Ev");}
void  S20389C2_nt ::v13(){vfunc_called(this, "_ZN11S20389C2_nt3v13Ev");}
S20389C2_nt ::~S20389C2_nt(){ note_dtor("S20389C2_nt", this);} // tgen
S20389C2_nt ::S20389C2_nt(){ note_ctor("S20389C2_nt", this);} // tgen

//skip512 S20389C2_nt

#else // __cplusplus

extern void _ZN11S20389C2_ntC1Ev();
extern void _ZN11S20389C2_ntD1Ev();
Name_Map name_map_S20389C2_nt[] = {
  NSPAIR(_ZN11S20389C2_ntC1Ev),
  NSPAIR(_ZN11S20389C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S20389C2_nt[];
extern void _ZN11S20389C2_nt2v8Ev();
extern void _ZN11S20389C2_nt2v9Ev();
extern void _ZN11S20389C2_nt3v10Ev();
extern void _ZN11S20389C2_nt3v11Ev();
extern void _ZN11S20389C2_nt3v12Ev();
extern void _ZN11S20389C2_nt3v13Ev();
static  VTBL_ENTRY vtc_S20389C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S20389C2_nt[0]),
  (VTBL_ENTRY)&_ZN11S20389C2_nt2v8Ev,
  (VTBL_ENTRY)&_ZN11S20389C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S20389C2_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S20389C2_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S20389C2_nt3v12Ev,
  (VTBL_ENTRY)&_ZN11S20389C2_nt3v13Ev,
};
extern VTBL_ENTRY _ZTI11S20389C2_nt[];
VTBL_ENTRY *P__ZTI11S20389C2_nt = _ZTI11S20389C2_nt; 
extern  VTBL_ENTRY _ZTV11S20389C2_nt[];
Class_Descriptor cd_S20389C2_nt = {  "S20389C2_nt", // class name
  0,0,//no base classes
  &(vtc_S20389C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI11S20389C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S20389C2_nt),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20389C5  {
  ::S601C21_nt s20389c5f0;
  void *s20389c5f1;
  virtual void  v14(); // _ZN8S20389C53v14Ev
  virtual void  v15(); // _ZN8S20389C53v15Ev
  virtual void  v16(); // _ZN8S20389C53v16Ev
  virtual void  v17(); // _ZN8S20389C53v17Ev
  virtual void  v18(); // _ZN8S20389C53v18Ev
  ~S20389C5(); // tgen
  S20389C5(); // tgen
};
//SIG(-1 S20389C5) C1{ v1 v2 v3 v4 v5 FC2{} Fp}


void  S20389C5 ::v14(){vfunc_called(this, "_ZN8S20389C53v14Ev");}
void  S20389C5 ::v15(){vfunc_called(this, "_ZN8S20389C53v15Ev");}
void  S20389C5 ::v16(){vfunc_called(this, "_ZN8S20389C53v16Ev");}
void  S20389C5 ::v17(){vfunc_called(this, "_ZN8S20389C53v17Ev");}
void  S20389C5 ::v18(){vfunc_called(this, "_ZN8S20389C53v18Ev");}
S20389C5 ::~S20389C5(){ note_dtor("S20389C5", this);} // tgen
S20389C5 ::S20389C5(){ note_ctor("S20389C5", this);} // tgen

static void Test_S20389C5()
{
  extern Class_Descriptor cd_S20389C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S20389C5, buf);
    S20389C5 *dp, &lv = *(dp=new (buf) S20389C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S20389C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20389C5)");
    check_field_offset(lv, s20389c5f0, ABISELECT(8,4), "S20389C5.s20389c5f0");
    check_field_offset(lv, s20389c5f1, ABISELECT(16,8), "S20389C5.s20389c5f1");
    test_class_info(&lv, &cd_S20389C5);
    dp->~S20389C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20389C5(Test_S20389C5, "S20389C5", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S20389C5C1Ev();
extern void _ZN8S20389C5D1Ev();
Name_Map name_map_S20389C5[] = {
  NSPAIR(_ZN8S20389C5C1Ev),
  NSPAIR(_ZN8S20389C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20389C5[];
extern void _ZN8S20389C53v14Ev();
extern void _ZN8S20389C53v15Ev();
extern void _ZN8S20389C53v16Ev();
extern void _ZN8S20389C53v17Ev();
extern void _ZN8S20389C53v18Ev();
static  VTBL_ENTRY vtc_S20389C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20389C5[0]),
  (VTBL_ENTRY)&_ZN8S20389C53v14Ev,
  (VTBL_ENTRY)&_ZN8S20389C53v15Ev,
  (VTBL_ENTRY)&_ZN8S20389C53v16Ev,
  (VTBL_ENTRY)&_ZN8S20389C53v17Ev,
  (VTBL_ENTRY)&_ZN8S20389C53v18Ev,
};
extern VTBL_ENTRY _ZTI8S20389C5[];
extern  VTBL_ENTRY _ZTV8S20389C5[];
Class_Descriptor cd_S20389C5 = {  "S20389C5", // class name
  0,0,//no base classes
  &(vtc_S20389C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S20389C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20389C5),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  S20389C10  {
  virtual  ~S20389C10(); // _ZN9S20389C10D1Ev
  virtual void  v25(); // _ZN9S20389C103v25Ev
  virtual void  v26(); // _ZN9S20389C103v26Ev
  virtual void  v27(); // _ZN9S20389C103v27Ev
  virtual void  v28(); // _ZN9S20389C103v28Ev
  virtual void  v29(); // _ZN9S20389C103v29Ev
  virtual void  v30(); // _ZN9S20389C103v30Ev
  S20389C10(); // tgen
};
//SIG(-1 S20389C10) C1{ vd v1 v2 v3 v4 v5 v6}


 S20389C10 ::~S20389C10(){ note_dtor("S20389C10", this);}
void  S20389C10 ::v25(){vfunc_called(this, "_ZN9S20389C103v25Ev");}
void  S20389C10 ::v26(){vfunc_called(this, "_ZN9S20389C103v26Ev");}
void  S20389C10 ::v27(){vfunc_called(this, "_ZN9S20389C103v27Ev");}
void  S20389C10 ::v28(){vfunc_called(this, "_ZN9S20389C103v28Ev");}
void  S20389C10 ::v29(){vfunc_called(this, "_ZN9S20389C103v29Ev");}
void  S20389C10 ::v30(){vfunc_called(this, "_ZN9S20389C103v30Ev");}
S20389C10 ::S20389C10(){ note_ctor("S20389C10", this);} // tgen

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

#else // __cplusplus

extern void _ZN9S20389C10C1Ev();
extern void _ZN9S20389C10D1Ev();
Name_Map name_map_S20389C10[] = {
  NSPAIR(_ZN9S20389C10C1Ev),
  NSPAIR(_ZN9S20389C10D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S20389C10[];
extern void _ZN9S20389C10D1Ev();
extern void _ZN9S20389C10D0Ev();
extern void _ZN9S20389C103v25Ev();
extern void _ZN9S20389C103v26Ev();
extern void _ZN9S20389C103v27Ev();
extern void _ZN9S20389C103v28Ev();
extern void _ZN9S20389C103v29Ev();
extern void _ZN9S20389C103v30Ev();
static  VTBL_ENTRY vtc_S20389C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S20389C10[0]),
  (VTBL_ENTRY)&_ZN9S20389C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20389C10D0Ev,
  (VTBL_ENTRY)&_ZN9S20389C103v25Ev,
  (VTBL_ENTRY)&_ZN9S20389C103v26Ev,
  (VTBL_ENTRY)&_ZN9S20389C103v27Ev,
  (VTBL_ENTRY)&_ZN9S20389C103v28Ev,
  (VTBL_ENTRY)&_ZN9S20389C103v29Ev,
  (VTBL_ENTRY)&_ZN9S20389C103v30Ev,
};
extern VTBL_ENTRY _ZTI9S20389C10[];
extern  VTBL_ENTRY _ZTV9S20389C10[];
Class_Descriptor cd_S20389C10 = {  "S20389C10", // class name
  0,0,//no base classes
  &(vtc_S20389C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI9S20389C10),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S20389C10),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20389C9  {
  ::S20389C10 s20389c9f0;
  int s20389c9f1;
  virtual void  v19(); // _ZN8S20389C93v19Ev
  virtual void  v20(); // _ZN8S20389C93v20Ev
  virtual void  v21(); // _ZN8S20389C93v21Ev
  virtual void  v22(); // _ZN8S20389C93v22Ev
  virtual void  v23(); // _ZN8S20389C93v23Ev
  virtual void  v24(); // _ZN8S20389C93v24Ev
  ~S20389C9(); // tgen
  S20389C9(); // tgen
};
//SIG(-1 S20389C9) C1{ v1 v2 v3 v4 v5 v6 FC2{ vd v7 v8 v9 v10 v11 v12} Fi}


void  S20389C9 ::v19(){vfunc_called(this, "_ZN8S20389C93v19Ev");}
void  S20389C9 ::v20(){vfunc_called(this, "_ZN8S20389C93v20Ev");}
void  S20389C9 ::v21(){vfunc_called(this, "_ZN8S20389C93v21Ev");}
void  S20389C9 ::v22(){vfunc_called(this, "_ZN8S20389C93v22Ev");}
void  S20389C9 ::v23(){vfunc_called(this, "_ZN8S20389C93v23Ev");}
void  S20389C9 ::v24(){vfunc_called(this, "_ZN8S20389C93v24Ev");}
S20389C9 ::~S20389C9(){ note_dtor("S20389C9", this);} // tgen
S20389C9 ::S20389C9(){ note_ctor("S20389C9", this);} // tgen

static void Test_S20389C9()
{
  extern Class_Descriptor cd_S20389C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S20389C9, buf);
    S20389C9 *dp, &lv = *(dp=new (buf) S20389C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S20389C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20389C9)");
    check_field_offset(lv, s20389c9f0, ABISELECT(8,4), "S20389C9.s20389c9f0");
    check_field_offset(lv, s20389c9f1, ABISELECT(16,8), "S20389C9.s20389c9f1");
    test_class_info(&lv, &cd_S20389C9);
    dp->~S20389C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20389C9(Test_S20389C9, "S20389C9", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S20389C9C1Ev();
extern void _ZN8S20389C9D1Ev();
Name_Map name_map_S20389C9[] = {
  NSPAIR(_ZN8S20389C9C1Ev),
  NSPAIR(_ZN8S20389C9D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20389C9[];
extern void _ZN8S20389C93v19Ev();
extern void _ZN8S20389C93v20Ev();
extern void _ZN8S20389C93v21Ev();
extern void _ZN8S20389C93v22Ev();
extern void _ZN8S20389C93v23Ev();
extern void _ZN8S20389C93v24Ev();
static  VTBL_ENTRY vtc_S20389C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20389C9[0]),
  (VTBL_ENTRY)&_ZN8S20389C93v19Ev,
  (VTBL_ENTRY)&_ZN8S20389C93v20Ev,
  (VTBL_ENTRY)&_ZN8S20389C93v21Ev,
  (VTBL_ENTRY)&_ZN8S20389C93v22Ev,
  (VTBL_ENTRY)&_ZN8S20389C93v23Ev,
  (VTBL_ENTRY)&_ZN8S20389C93v24Ev,
};
extern VTBL_ENTRY _ZTI8S20389C9[];
extern  VTBL_ENTRY _ZTV8S20389C9[];
Class_Descriptor cd_S20389C9 = {  "S20389C9", // class name
  0,0,//no base classes
  &(vtc_S20389C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S20389C9),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20389C9),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  S20389C8  : S20389C9 , S20389C10 {
  virtual  ~S20389C8(); // _ZN8S20389C8D1Ev
  virtual void  v31(); // _ZN8S20389C83v31Ev
  virtual void  v32(); // _ZN8S20389C83v32Ev
  virtual void  v33(); // _ZN8S20389C83v33Ev
  virtual void  v34(); // _ZN8S20389C83v34Ev
  virtual void  v35(); // _ZN8S20389C83v35Ev
  S20389C8(); // tgen
};
//SIG(-1 S20389C8) C1{ BC2{ v6 v7 v8 v9 v10 v11 FC3{ vd v12 v13 v14 v15 v16 v17} Fi} BC3 vd v1 v2 v3 v4 v5}


 S20389C8 ::~S20389C8(){ note_dtor("S20389C8", this);}
void  S20389C8 ::v31(){vfunc_called(this, "_ZN8S20389C83v31Ev");}
void  S20389C8 ::v32(){vfunc_called(this, "_ZN8S20389C83v32Ev");}
void  S20389C8 ::v33(){vfunc_called(this, "_ZN8S20389C83v33Ev");}
void  S20389C8 ::v34(){vfunc_called(this, "_ZN8S20389C83v34Ev");}
void  S20389C8 ::v35(){vfunc_called(this, "_ZN8S20389C83v35Ev");}
S20389C8 ::S20389C8(){ note_ctor("S20389C8", this);} // tgen

static void Test_S20389C8()
{
  extern Class_Descriptor cd_S20389C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S20389C8, buf);
    S20389C8 *dp, &lv = *(dp=new (buf) S20389C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S20389C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20389C8)");
    check_base_class_offset(lv, (S20389C9*), 0, "S20389C8");
    check_base_class_offset(lv, (S20389C10*), ABISELECT(24,12), "S20389C8");
    test_class_info(&lv, &cd_S20389C8);
    dp->~S20389C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20389C8(Test_S20389C8, "S20389C8", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S20389C8C1Ev();
extern void _ZN8S20389C8D1Ev();
Name_Map name_map_S20389C8[] = {
  NSPAIR(_ZN8S20389C8C1Ev),
  NSPAIR(_ZN8S20389C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20389C9;
extern VTBL_ENTRY _ZTI8S20389C9[];
extern  VTBL_ENTRY _ZTV8S20389C9[];
extern Class_Descriptor cd_S20389C10;
extern VTBL_ENTRY _ZTI9S20389C10[];
extern  VTBL_ENTRY _ZTV9S20389C10[];
static Base_Class bases_S20389C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20389C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S20389C10,    ABISELECT(24,12), //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
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20389C8[];
extern void _ZN8S20389C93v19Ev();
extern void _ZN8S20389C93v20Ev();
extern void _ZN8S20389C93v21Ev();
extern void _ZN8S20389C93v22Ev();
extern void _ZN8S20389C93v23Ev();
extern void _ZN8S20389C93v24Ev();
extern void _ZN8S20389C8D1Ev();
extern void _ZN8S20389C8D0Ev();
extern void _ZN8S20389C83v31Ev();
extern void _ZN8S20389C83v32Ev();
extern void _ZN8S20389C83v33Ev();
extern void _ZN8S20389C83v34Ev();
extern void _ZN8S20389C83v35Ev();
extern void ABISELECT(_ZThn24_N8S20389C8D1Ev,_ZThn12_N8S20389C8D1Ev)();
extern void ABISELECT(_ZThn24_N8S20389C8D0Ev,_ZThn12_N8S20389C8D0Ev)();
extern void _ZN9S20389C103v25Ev();
extern void _ZN9S20389C103v26Ev();
extern void _ZN9S20389C103v27Ev();
extern void _ZN9S20389C103v28Ev();
extern void _ZN9S20389C103v29Ev();
extern void _ZN9S20389C103v30Ev();
static  VTBL_ENTRY vtc_S20389C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20389C8[0]),
  (VTBL_ENTRY)&_ZN8S20389C93v19Ev,
  (VTBL_ENTRY)&_ZN8S20389C93v20Ev,
  (VTBL_ENTRY)&_ZN8S20389C93v21Ev,
  (VTBL_ENTRY)&_ZN8S20389C93v22Ev,
  (VTBL_ENTRY)&_ZN8S20389C93v23Ev,
  (VTBL_ENTRY)&_ZN8S20389C93v24Ev,
  (VTBL_ENTRY)&_ZN8S20389C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20389C8D0Ev,
  (VTBL_ENTRY)&_ZN8S20389C83v31Ev,
  (VTBL_ENTRY)&_ZN8S20389C83v32Ev,
  (VTBL_ENTRY)&_ZN8S20389C83v33Ev,
  (VTBL_ENTRY)&_ZN8S20389C83v34Ev,
  (VTBL_ENTRY)&_ZN8S20389C83v35Ev,
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20389C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S20389C8D1Ev,_ZThn12_N8S20389C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S20389C8D0Ev,_ZThn12_N8S20389C8D0Ev),
  (VTBL_ENTRY)&_ZN9S20389C103v25Ev,
  (VTBL_ENTRY)&_ZN9S20389C103v26Ev,
  (VTBL_ENTRY)&_ZN9S20389C103v27Ev,
  (VTBL_ENTRY)&_ZN9S20389C103v28Ev,
  (VTBL_ENTRY)&_ZN9S20389C103v29Ev,
  (VTBL_ENTRY)&_ZN9S20389C103v30Ev,
};
extern VTBL_ENTRY _ZTI8S20389C8[];
extern  VTBL_ENTRY _ZTV8S20389C8[];
Class_Descriptor cd_S20389C8 = {  "S20389C8", // class name
  bases_S20389C8, 2,
  &(vtc_S20389C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S20389C8),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20389C8),25, //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  S20389C7  : virtual S20389C8 , virtual S20389C5 {
  virtual  ~S20389C7(); // _ZN8S20389C7D2Ev
  virtual void  v36(); // _ZN8S20389C73v36Ev
  virtual void  v37(); // _ZN8S20389C73v37Ev
  S20389C7(); // tgen
};
//SIG(-1 S20389C7) C1{ VBC2{ BC3{ v3 v4 v5 v6 v7 v8 FC4{ vd v9 v10 v11 v12 v13 v14} Fi} BC4 vd v15 v16 v17 v18 v19} VBC5{ v20 v21 v22 v23 v24 FC6{} Fp} vd v1 v2}


 S20389C7 ::~S20389C7(){ note_dtor("S20389C7", this);}
void  S20389C7 ::v36(){vfunc_called(this, "_ZN8S20389C73v36Ev");}
void  S20389C7 ::v37(){vfunc_called(this, "_ZN8S20389C73v37Ev");}
S20389C7 ::S20389C7(){ note_ctor("S20389C7", this);} // tgen

static void Test_S20389C7()
{
  extern Class_Descriptor cd_S20389C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[9];
    init_test(&cd_S20389C7, buf);
    S20389C7 *dp, &lv = *(dp=new (buf) S20389C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S20389C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20389C7)");
    check_base_class_offset(lv, (S20389C9*)(S20389C8*), ABISELECT(8,4), "S20389C7");
    check_base_class_offset(lv, (S20389C10*)(S20389C8*), ABISELECT(32,16), "S20389C7");
    check_base_class_offset(lv, (S20389C8*), ABISELECT(8,4), "S20389C7");
    check_base_class_offset(lv, (S20389C5*), ABISELECT(40,20), "S20389C7");
    test_class_info(&lv, &cd_S20389C7);
    dp->~S20389C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20389C7(Test_S20389C7, "S20389C7", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN8S20389C7C1Ev();
extern void _ZN8S20389C7D2Ev();
Name_Map name_map_S20389C7[] = {
  NSPAIR(_ZN8S20389C7C1Ev),
  NSPAIR(_ZN8S20389C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20389C9;
extern VTBL_ENTRY _ZTI8S20389C9[];
extern  VTBL_ENTRY _ZTV8S20389C9[];
extern Class_Descriptor cd_S20389C10;
extern VTBL_ENTRY _ZTI9S20389C10[];
extern  VTBL_ENTRY _ZTV9S20389C10[];
extern Class_Descriptor cd_S20389C8;
extern VTBL_ENTRY _ZTI8S20389C8[];
extern  VTBL_ENTRY _ZTV8S20389C8[];
extern Class_Descriptor cd_S20389C5;
extern VTBL_ENTRY _ZTI8S20389C5[];
extern  VTBL_ENTRY _ZTV8S20389C5[];
static Base_Class bases_S20389C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20389C9,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20389C10,    ABISELECT(32,16), //bcp->offset
    41, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20389C8,    ABISELECT(8,4), //bcp->offset
    8, //bcp->virtual_function_table_offset
    20, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20389C5,    ABISELECT(40,20), //bcp->offset
    51, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20389C7[];
extern void _ZN8S20389C7D1Ev();
extern void _ZN8S20389C7D0Ev();
extern void _ZN8S20389C73v36Ev();
extern void _ZN8S20389C73v37Ev();
extern void _ZN8S20389C93v19Ev();
extern void _ZN8S20389C93v20Ev();
extern void _ZN8S20389C93v21Ev();
extern void _ZN8S20389C93v22Ev();
extern void _ZN8S20389C93v23Ev();
extern void _ZN8S20389C93v24Ev();
extern void ABISELECT(_ZTv0_n72_N8S20389C7D1Ev,_ZTv0_n36_N8S20389C7D1Ev)();
extern void ABISELECT(_ZThn8_N8S20389C7D1Ev,_ZThn4_N8S20389C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S20389C7D0Ev,_ZTv0_n36_N8S20389C7D0Ev)();
extern void ABISELECT(_ZThn8_N8S20389C7D0Ev,_ZThn4_N8S20389C7D0Ev)() __attribute__((weak));
extern void _ZN8S20389C83v31Ev();
extern void _ZN8S20389C83v32Ev();
extern void _ZN8S20389C83v33Ev();
extern void _ZN8S20389C83v34Ev();
extern void _ZN8S20389C83v35Ev();
extern void ABISELECT(_ZTvn24_n72_N8S20389C7D1Ev,_ZTvn12_n36_N8S20389C7D1Ev)();
extern void ABISELECT(_ZTvn24_n72_N8S20389C7D0Ev,_ZTvn12_n36_N8S20389C7D0Ev)();
extern void _ZN9S20389C103v25Ev();
extern void _ZN9S20389C103v26Ev();
extern void _ZN9S20389C103v27Ev();
extern void _ZN9S20389C103v28Ev();
extern void _ZN9S20389C103v29Ev();
extern void _ZN9S20389C103v30Ev();
extern void _ZN8S20389C53v14Ev();
extern void _ZN8S20389C53v15Ev();
extern void _ZN8S20389C53v16Ev();
extern void _ZN8S20389C53v17Ev();
extern void _ZN8S20389C53v18Ev();
static  VTBL_ENTRY vtc_S20389C7[] = {
  ABISELECT(40,20),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20389C7[0]),
  (VTBL_ENTRY)&_ZN8S20389C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20389C7D0Ev,
  (VTBL_ENTRY)&_ZN8S20389C73v36Ev,
  (VTBL_ENTRY)&_ZN8S20389C73v37Ev,
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20389C7[0]),
  (VTBL_ENTRY)&_ZN8S20389C93v19Ev,
  (VTBL_ENTRY)&_ZN8S20389C93v20Ev,
  (VTBL_ENTRY)&_ZN8S20389C93v21Ev,
  (VTBL_ENTRY)&_ZN8S20389C93v22Ev,
  (VTBL_ENTRY)&_ZN8S20389C93v23Ev,
  (VTBL_ENTRY)&_ZN8S20389C93v24Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20389C7D1Ev,_ZTv0_n36_N8S20389C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20389C7D0Ev,_ZTv0_n36_N8S20389C7D0Ev),
  (VTBL_ENTRY)&_ZN8S20389C83v31Ev,
  (VTBL_ENTRY)&_ZN8S20389C83v32Ev,
  (VTBL_ENTRY)&_ZN8S20389C83v33Ev,
  (VTBL_ENTRY)&_ZN8S20389C83v34Ev,
  (VTBL_ENTRY)&_ZN8S20389C83v35Ev,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S20389C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N8S20389C7D1Ev,_ZTvn12_n36_N8S20389C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N8S20389C7D0Ev,_ZTvn12_n36_N8S20389C7D0Ev),
  (VTBL_ENTRY)&_ZN9S20389C103v25Ev,
  (VTBL_ENTRY)&_ZN9S20389C103v26Ev,
  (VTBL_ENTRY)&_ZN9S20389C103v27Ev,
  (VTBL_ENTRY)&_ZN9S20389C103v28Ev,
  (VTBL_ENTRY)&_ZN9S20389C103v29Ev,
  (VTBL_ENTRY)&_ZN9S20389C103v30Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S20389C7[0]),
  (VTBL_ENTRY)&_ZN8S20389C53v14Ev,
  (VTBL_ENTRY)&_ZN8S20389C53v15Ev,
  (VTBL_ENTRY)&_ZN8S20389C53v16Ev,
  (VTBL_ENTRY)&_ZN8S20389C53v17Ev,
  (VTBL_ENTRY)&_ZN8S20389C53v18Ev,
};
extern VTBL_ENTRY _ZTV8S20389C7[];
static  VTT_ENTRY vtt_S20389C7[] = {
  {&(_ZTV8S20389C7[4]),  4,63},
  {&(_ZTV8S20389C7[28]),  28,63},
  {&(_ZTV8S20389C7[43]),  43,63},
  {&(_ZTV8S20389C7[58]),  58,63},
};
extern VTBL_ENTRY _ZTI8S20389C7[];
extern  VTBL_ENTRY _ZTV8S20389C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20389C7[];
static VTBL_ENTRY alt_thunk_names14[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20389C7D0Ev,_ZTv0_n36_N8S20389C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20389C7D0Ev,_ZThn4_N8S20389C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20389C7D1Ev,_ZTv0_n36_N8S20389C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20389C7D1Ev,_ZThn4_N8S20389C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20389C7 = {  "S20389C7", // class name
  bases_S20389C7, 4,
  &(vtc_S20389C7[0]), // expected_vtbl_contents
  &(vtt_S20389C7[0]), // expected_vtt_contents
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI8S20389C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20389C7),63, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20389C7),4, //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  S20389C4  : virtual S20389C5 , virtual S20389C7 {
  virtual  ~S20389C4(); // _ZN8S20389C4D2Ev
  virtual void  v38(); // _ZN8S20389C43v38Ev
  S20389C4(); // tgen
};
//SIG(-1 S20389C4) C1{ VBC2{ v2 v3 v4 v5 v6 FC3{} Fp} VBC4{ VBC5{ BC6{ v7 v8 v9 v10 v11 v12 FC7{ vd v13 v14 v15 v16 v17 v18} Fi} BC7 vd v19 v20 v21 v22 v23} VBC2 vd v24 v25} vd v1}


 S20389C4 ::~S20389C4(){ note_dtor("S20389C4", this);}
void  S20389C4 ::v38(){vfunc_called(this, "_ZN8S20389C43v38Ev");}
S20389C4 ::S20389C4(){ note_ctor("S20389C4", this);} // tgen

static void Test_S20389C4()
{
  extern Class_Descriptor cd_S20389C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[9];
    init_test(&cd_S20389C4, buf);
    S20389C4 *dp, &lv = *(dp=new (buf) S20389C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S20389C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20389C4)");
    check_base_class_offset(lv, (S20389C5*), ABISELECT(8,4), "S20389C4");
    check_base_class_offset(lv, (S20389C5*)(S20389C7*), ABISELECT(8,4), "S20389C4");
    check_base_class_offset(lv, (S20389C9*)(S20389C8*), ABISELECT(32,16), "S20389C4");
    check_base_class_offset(lv, (S20389C10*)(S20389C8*), ABISELECT(56,28), "S20389C4");
    check_base_class_offset(lv, (S20389C8*)(S20389C7*), ABISELECT(32,16), "S20389C4");
    check_base_class_offset(lv, (S20389C7*), 0, "S20389C4");
    test_class_info(&lv, &cd_S20389C4);
    dp->~S20389C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20389C4(Test_S20389C4, "S20389C4", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN8S20389C4C1Ev();
extern void _ZN8S20389C4D2Ev();
Name_Map name_map_S20389C4[] = {
  NSPAIR(_ZN8S20389C4C1Ev),
  NSPAIR(_ZN8S20389C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20389C5;
extern VTBL_ENTRY _ZTI8S20389C5[];
extern  VTBL_ENTRY _ZTV8S20389C5[];
extern Class_Descriptor cd_S20389C9;
extern VTBL_ENTRY _ZTI8S20389C9[];
extern  VTBL_ENTRY _ZTV8S20389C9[];
extern Class_Descriptor cd_S20389C10;
extern VTBL_ENTRY _ZTI9S20389C10[];
extern  VTBL_ENTRY _ZTV9S20389C10[];
extern Class_Descriptor cd_S20389C8;
extern VTBL_ENTRY _ZTI8S20389C8[];
extern  VTBL_ENTRY _ZTV8S20389C8[];
extern Class_Descriptor cd_S20389C7;
extern VTBL_ENTRY _ZTI8S20389C7[];
extern  VTBL_ENTRY _ZTV8S20389C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20389C7[];
static Base_Class bases_S20389C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20389C5,    ABISELECT(8,4), //bcp->offset
    13, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20389C9,    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
    3, //immediately_derived
  0, 0},
  {&cd_S20389C10,    ABISELECT(56,28), //bcp->offset
    58, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20389C8,    ABISELECT(32,16), //bcp->offset
    25, //bcp->virtual_function_table_offset
    20, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20389C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20389C4[];
extern void _ZN8S20389C4D1Ev();
extern void _ZN8S20389C4D0Ev();
extern void _ZN8S20389C73v36Ev();
extern void _ZN8S20389C73v37Ev();
extern void _ZN8S20389C43v38Ev();
extern void _ZN8S20389C53v14Ev();
extern void _ZN8S20389C53v15Ev();
extern void _ZN8S20389C53v16Ev();
extern void _ZN8S20389C53v17Ev();
extern void _ZN8S20389C53v18Ev();
extern void _ZN8S20389C93v19Ev();
extern void _ZN8S20389C93v20Ev();
extern void _ZN8S20389C93v21Ev();
extern void _ZN8S20389C93v22Ev();
extern void _ZN8S20389C93v23Ev();
extern void _ZN8S20389C93v24Ev();
extern void ABISELECT(_ZTv0_n72_N8S20389C4D1Ev,_ZTv0_n36_N8S20389C4D1Ev)();
extern void ABISELECT(_ZThn32_N8S20389C4D1Ev,_ZThn16_N8S20389C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S20389C4D0Ev,_ZTv0_n36_N8S20389C4D0Ev)();
extern void ABISELECT(_ZThn32_N8S20389C4D0Ev,_ZThn16_N8S20389C4D0Ev)() __attribute__((weak));
extern void _ZN8S20389C83v31Ev();
extern void _ZN8S20389C83v32Ev();
extern void _ZN8S20389C83v33Ev();
extern void _ZN8S20389C83v34Ev();
extern void _ZN8S20389C83v35Ev();
extern void ABISELECT(_ZTvn24_n72_N8S20389C4D1Ev,_ZTvn12_n36_N8S20389C4D1Ev)();
extern void ABISELECT(_ZTvn24_n72_N8S20389C4D0Ev,_ZTvn12_n36_N8S20389C4D0Ev)();
extern void _ZN9S20389C103v25Ev();
extern void _ZN9S20389C103v26Ev();
extern void _ZN9S20389C103v27Ev();
extern void _ZN9S20389C103v28Ev();
extern void _ZN9S20389C103v29Ev();
extern void _ZN9S20389C103v30Ev();
static  VTBL_ENTRY vtc_S20389C4[] = {
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S20389C4[0]),
  (VTBL_ENTRY)&_ZN8S20389C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20389C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20389C73v36Ev,
  (VTBL_ENTRY)&_ZN8S20389C73v37Ev,
  (VTBL_ENTRY)&_ZN8S20389C43v38Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20389C4[0]),
  (VTBL_ENTRY)&_ZN8S20389C53v14Ev,
  (VTBL_ENTRY)&_ZN8S20389C53v15Ev,
  (VTBL_ENTRY)&_ZN8S20389C53v16Ev,
  (VTBL_ENTRY)&_ZN8S20389C53v17Ev,
  (VTBL_ENTRY)&_ZN8S20389C53v18Ev,
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-16),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S20389C4[0]),
  (VTBL_ENTRY)&_ZN8S20389C93v19Ev,
  (VTBL_ENTRY)&_ZN8S20389C93v20Ev,
  (VTBL_ENTRY)&_ZN8S20389C93v21Ev,
  (VTBL_ENTRY)&_ZN8S20389C93v22Ev,
  (VTBL_ENTRY)&_ZN8S20389C93v23Ev,
  (VTBL_ENTRY)&_ZN8S20389C93v24Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20389C4D1Ev,_ZTv0_n36_N8S20389C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20389C4D0Ev,_ZTv0_n36_N8S20389C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20389C83v31Ev,
  (VTBL_ENTRY)&_ZN8S20389C83v32Ev,
  (VTBL_ENTRY)&_ZN8S20389C83v33Ev,
  (VTBL_ENTRY)&_ZN8S20389C83v34Ev,
  (VTBL_ENTRY)&_ZN8S20389C83v35Ev,
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S20389C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N8S20389C4D1Ev,_ZTvn12_n36_N8S20389C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N8S20389C4D0Ev,_ZTvn12_n36_N8S20389C4D0Ev),
  (VTBL_ENTRY)&_ZN9S20389C103v25Ev,
  (VTBL_ENTRY)&_ZN9S20389C103v26Ev,
  (VTBL_ENTRY)&_ZN9S20389C103v27Ev,
  (VTBL_ENTRY)&_ZN9S20389C103v28Ev,
  (VTBL_ENTRY)&_ZN9S20389C103v29Ev,
  (VTBL_ENTRY)&_ZN9S20389C103v30Ev,
};
extern VTBL_ENTRY _ZTV8S20389C4[];
extern void _ZN8S20389C7D1Ev();
extern void _ZN8S20389C7D0Ev();
extern void _ZN8S20389C73v36Ev();
extern void _ZN8S20389C73v37Ev();
static  VTBL_ENTRY _tg__ZTV8S20389C7__8S20389C4[] = {
  ABISELECT(8,4),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S20389C7[0]),
  (VTBL_ENTRY)&_ZN8S20389C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20389C7D0Ev,
  (VTBL_ENTRY)&_ZN8S20389C73v36Ev,
  (VTBL_ENTRY)&_ZN8S20389C73v37Ev,
};
extern void _ZN8S20389C93v19Ev();
extern void _ZN8S20389C93v20Ev();
extern void _ZN8S20389C93v21Ev();
extern void _ZN8S20389C93v22Ev();
extern void _ZN8S20389C93v23Ev();
extern void _ZN8S20389C93v24Ev();
extern void ABISELECT(_ZTv0_n72_N8S20389C7D1Ev,_ZTv0_n36_N8S20389C7D1Ev)();
extern void ABISELECT(_ZThn32_N8S20389C7D1Ev,_ZThn16_N8S20389C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S20389C7D0Ev,_ZTv0_n36_N8S20389C7D0Ev)();
extern void ABISELECT(_ZThn32_N8S20389C7D0Ev,_ZThn16_N8S20389C7D0Ev)() __attribute__((weak));
extern void _ZN8S20389C83v31Ev();
extern void _ZN8S20389C83v32Ev();
extern void _ZN8S20389C83v33Ev();
extern void _ZN8S20389C83v34Ev();
extern void _ZN8S20389C83v35Ev();
static  VTBL_ENTRY _tg__ZTV8S20389C8__8S20389C7__8S20389C4[] = {
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-16),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S20389C7[0]),
  (VTBL_ENTRY)&_ZN8S20389C93v19Ev,
  (VTBL_ENTRY)&_ZN8S20389C93v20Ev,
  (VTBL_ENTRY)&_ZN8S20389C93v21Ev,
  (VTBL_ENTRY)&_ZN8S20389C93v22Ev,
  (VTBL_ENTRY)&_ZN8S20389C93v23Ev,
  (VTBL_ENTRY)&_ZN8S20389C93v24Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20389C7D1Ev,_ZTv0_n36_N8S20389C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20389C7D0Ev,_ZTv0_n36_N8S20389C7D0Ev),
  (VTBL_ENTRY)&_ZN8S20389C83v31Ev,
  (VTBL_ENTRY)&_ZN8S20389C83v32Ev,
  (VTBL_ENTRY)&_ZN8S20389C83v33Ev,
  (VTBL_ENTRY)&_ZN8S20389C83v34Ev,
  (VTBL_ENTRY)&_ZN8S20389C83v35Ev,
};
extern void ABISELECT(_ZTvn24_n72_N8S20389C7D1Ev,_ZTvn12_n36_N8S20389C7D1Ev)();
extern void ABISELECT(_ZTvn24_n72_N8S20389C7D0Ev,_ZTvn12_n36_N8S20389C7D0Ev)();
extern void _ZN9S20389C103v25Ev();
extern void _ZN9S20389C103v26Ev();
extern void _ZN9S20389C103v27Ev();
extern void _ZN9S20389C103v28Ev();
extern void _ZN9S20389C103v29Ev();
extern void _ZN9S20389C103v30Ev();
static  VTBL_ENTRY _tg__ZTV9S20389C108S20389C8__8S20389C7__8S20389C4[] = {
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S20389C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N8S20389C7D1Ev,_ZTvn12_n36_N8S20389C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N8S20389C7D0Ev,_ZTvn12_n36_N8S20389C7D0Ev),
  (VTBL_ENTRY)&_ZN9S20389C103v25Ev,
  (VTBL_ENTRY)&_ZN9S20389C103v26Ev,
  (VTBL_ENTRY)&_ZN9S20389C103v27Ev,
  (VTBL_ENTRY)&_ZN9S20389C103v28Ev,
  (VTBL_ENTRY)&_ZN9S20389C103v29Ev,
  (VTBL_ENTRY)&_ZN9S20389C103v30Ev,
};
extern void _ZN8S20389C53v14Ev();
extern void _ZN8S20389C53v15Ev();
extern void _ZN8S20389C53v16Ev();
extern void _ZN8S20389C53v17Ev();
extern void _ZN8S20389C53v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20389C5__8S20389C7__8S20389C4[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20389C7[0]),
  (VTBL_ENTRY)&_ZN8S20389C53v14Ev,
  (VTBL_ENTRY)&_ZN8S20389C53v15Ev,
  (VTBL_ENTRY)&_ZN8S20389C53v16Ev,
  (VTBL_ENTRY)&_ZN8S20389C53v17Ev,
  (VTBL_ENTRY)&_ZN8S20389C53v18Ev,
};
static  VTT_ENTRY vtt_S20389C4[] = {
  {&(_ZTV8S20389C4[8]),  8,68},
  {&(_ZTV8S20389C4[20]),  20,68},
  {&(_ZTV8S20389C4[8]),  8,68},
  {&(_ZTV8S20389C4[45]),  45,68},
  {&(_ZTV8S20389C4[60]),  60,68},
  {&(_tg__ZTV8S20389C7__8S20389C4[4]),  4,8},
  {&(_tg__ZTV8S20389C8__8S20389C7__8S20389C4[20]),  20,33},
  {&(_tg__ZTV9S20389C108S20389C8__8S20389C7__8S20389C4[2]),  2,10},
  {&(_tg__ZTV8S20389C5__8S20389C7__8S20389C4[7]),  7,12},
};
extern VTBL_ENTRY _ZTI8S20389C4[];
extern  VTBL_ENTRY _ZTV8S20389C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20389C4[];
static VTBL_ENTRY alt_thunk_names15[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20389C7D0Ev,_ZTv0_n36_N8S20389C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S20389C7D0Ev,_ZThn16_N8S20389C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20389C7D1Ev,_ZTv0_n36_N8S20389C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S20389C7D1Ev,_ZThn16_N8S20389C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20389C4D0Ev,_ZTv0_n36_N8S20389C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S20389C4D0Ev,_ZThn16_N8S20389C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20389C4D1Ev,_ZTv0_n36_N8S20389C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S20389C4D1Ev,_ZThn16_N8S20389C4D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20389C4 = {  "S20389C4", // class name
  bases_S20389C4, 5,
  &(vtc_S20389C4[0]), // expected_vtbl_contents
  &(vtt_S20389C4[0]), // expected_vtt_contents
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI8S20389C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20389C4),68, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20389C4),9, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names15,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20389C11  : S20389C5 {
  ::S20389C5 s20389c11f0;
  virtual void  v39(); // _ZN9S20389C113v39Ev
  virtual void  v40(); // _ZN9S20389C113v40Ev
  virtual void  v41(); // _ZN9S20389C113v41Ev
  virtual void  v42(); // _ZN9S20389C113v42Ev
  virtual void  v43(); // _ZN9S20389C113v43Ev
  virtual void  v44(); // _ZN9S20389C113v44Ev
  virtual void  v45(); // _ZN9S20389C113v45Ev
  ~S20389C11(); // tgen
  S20389C11(); // tgen
};
//SIG(-1 S20389C11) C1{ BC2{ v8 v9 v10 v11 v12 FC3{} Fp} v1 v2 v3 v4 v5 v6 v7 FC2}


void  S20389C11 ::v39(){vfunc_called(this, "_ZN9S20389C113v39Ev");}
void  S20389C11 ::v40(){vfunc_called(this, "_ZN9S20389C113v40Ev");}
void  S20389C11 ::v41(){vfunc_called(this, "_ZN9S20389C113v41Ev");}
void  S20389C11 ::v42(){vfunc_called(this, "_ZN9S20389C113v42Ev");}
void  S20389C11 ::v43(){vfunc_called(this, "_ZN9S20389C113v43Ev");}
void  S20389C11 ::v44(){vfunc_called(this, "_ZN9S20389C113v44Ev");}
void  S20389C11 ::v45(){vfunc_called(this, "_ZN9S20389C113v45Ev");}
S20389C11 ::~S20389C11(){ note_dtor("S20389C11", this);} // tgen
S20389C11 ::S20389C11(){ note_ctor("S20389C11", this);} // tgen

static void Test_S20389C11()
{
  extern Class_Descriptor cd_S20389C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[7];
    init_test(&cd_S20389C11, buf);
    S20389C11 *dp, &lv = *(dp=new (buf) S20389C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S20389C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20389C11)");
    check_base_class_offset(lv, (S20389C5*), 0, "S20389C11");
    check_field_offset(lv, s20389c11f0, ABISELECT(24,12), "S20389C11.s20389c11f0");
    test_class_info(&lv, &cd_S20389C11);
    dp->~S20389C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20389C11(Test_S20389C11, "S20389C11", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN9S20389C11C1Ev();
extern void _ZN9S20389C11D1Ev();
Name_Map name_map_S20389C11[] = {
  NSPAIR(_ZN9S20389C11C1Ev),
  NSPAIR(_ZN9S20389C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20389C5;
extern VTBL_ENTRY _ZTI8S20389C5[];
extern  VTBL_ENTRY _ZTV8S20389C5[];
static Base_Class bases_S20389C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20389C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20389C11[];
extern void _ZN8S20389C53v14Ev();
extern void _ZN8S20389C53v15Ev();
extern void _ZN8S20389C53v16Ev();
extern void _ZN8S20389C53v17Ev();
extern void _ZN8S20389C53v18Ev();
extern void _ZN9S20389C113v39Ev();
extern void _ZN9S20389C113v40Ev();
extern void _ZN9S20389C113v41Ev();
extern void _ZN9S20389C113v42Ev();
extern void _ZN9S20389C113v43Ev();
extern void _ZN9S20389C113v44Ev();
extern void _ZN9S20389C113v45Ev();
static  VTBL_ENTRY vtc_S20389C11[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S20389C11[0]),
  (VTBL_ENTRY)&_ZN8S20389C53v14Ev,
  (VTBL_ENTRY)&_ZN8S20389C53v15Ev,
  (VTBL_ENTRY)&_ZN8S20389C53v16Ev,
  (VTBL_ENTRY)&_ZN8S20389C53v17Ev,
  (VTBL_ENTRY)&_ZN8S20389C53v18Ev,
  (VTBL_ENTRY)&_ZN9S20389C113v39Ev,
  (VTBL_ENTRY)&_ZN9S20389C113v40Ev,
  (VTBL_ENTRY)&_ZN9S20389C113v41Ev,
  (VTBL_ENTRY)&_ZN9S20389C113v42Ev,
  (VTBL_ENTRY)&_ZN9S20389C113v43Ev,
  (VTBL_ENTRY)&_ZN9S20389C113v44Ev,
  (VTBL_ENTRY)&_ZN9S20389C113v45Ev,
};
extern VTBL_ENTRY _ZTI9S20389C11[];
extern  VTBL_ENTRY _ZTV9S20389C11[];
Class_Descriptor cd_S20389C11 = {  "S20389C11", // class name
  bases_S20389C11, 1,
  &(vtc_S20389C11[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI9S20389C11),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S20389C11),14, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20389C3  : virtual S20389C4 , S20389C11 {
  ::S7802C11 s20389c3f0;
  ~S20389C3(); // tgen
  S20389C3(); // tgen
};
//SIG(-1 S20389C3) C1{ VBC2{ VBC3{ v1 v2 v3 v4 v5 FC4{} Fp} VBC5{ VBC6{ BC7{ v6 v7 v8 v9 v10 v11 FC8{ vd v12 v13 v14 v15 v16 v17} Fi} BC8 vd v18 v19 v20 v21 v22} VBC3 vd v23 v24} vd v25} BC9{ BC3 v26 v27 v28 v29 v30 v31 v32 FC3} FC10{ v33 v34 v35 v36 FC4}}


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

static void Test_S20389C3()
{
  extern Class_Descriptor cd_S20389C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[17];
    init_test(&cd_S20389C3, buf);
    S20389C3 *dp, &lv = *(dp=new (buf) S20389C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,64), "sizeof(S20389C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20389C3)");
    check_base_class_offset(lv, (S20389C5*)(S20389C4*), ABISELECT(72,36), "S20389C3");
    check_base_class_offset(lv, (S20389C5*)(S20389C7*), ABISELECT(72,36), "S20389C3");
    check_base_class_offset(lv, (S20389C9*)(S20389C8*), ABISELECT(96,48), "S20389C3");
    check_base_class_offset(lv, (S20389C10*)(S20389C8*), ABISELECT(120,60), "S20389C3");
    check_base_class_offset(lv, (S20389C8*)(S20389C7*), ABISELECT(96,48), "S20389C3");
    check_base_class_offset(lv, (S20389C7*)(S20389C4*), ABISELECT(64,32), "S20389C3");
    check_base_class_offset(lv, (S20389C4*), ABISELECT(64,32), "S20389C3");
    check_base_class_offset(lv, (S20389C5*)(S20389C11*), 0, "S20389C3");
    check_base_class_offset(lv, (S20389C11*), 0, "S20389C3");
    check_field_offset(lv, s20389c3f0, ABISELECT(48,24), "S20389C3.s20389c3f0");
    test_class_info(&lv, &cd_S20389C3);
    dp->~S20389C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20389C3(Test_S20389C3, "S20389C3", ABISELECT(128,64));

#else // __cplusplus

extern void _ZN8S20389C3C1Ev();
extern void _ZN8S20389C3D1Ev();
Name_Map name_map_S20389C3[] = {
  NSPAIR(_ZN8S20389C3C1Ev),
  NSPAIR(_ZN8S20389C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20389C5;
extern VTBL_ENTRY _ZTI8S20389C5[];
extern  VTBL_ENTRY _ZTV8S20389C5[];
extern Class_Descriptor cd_S20389C9;
extern VTBL_ENTRY _ZTI8S20389C9[];
extern  VTBL_ENTRY _ZTV8S20389C9[];
extern Class_Descriptor cd_S20389C10;
extern VTBL_ENTRY _ZTI9S20389C10[];
extern  VTBL_ENTRY _ZTV9S20389C10[];
extern Class_Descriptor cd_S20389C8;
extern VTBL_ENTRY _ZTI8S20389C8[];
extern  VTBL_ENTRY _ZTV8S20389C8[];
extern Class_Descriptor cd_S20389C7;
extern VTBL_ENTRY _ZTI8S20389C7[];
extern  VTBL_ENTRY _ZTV8S20389C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20389C7[];
extern Class_Descriptor cd_S20389C4;
extern VTBL_ENTRY _ZTI8S20389C4[];
extern  VTBL_ENTRY _ZTV8S20389C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20389C4[];
extern Class_Descriptor cd_S20389C5;
extern VTBL_ENTRY _ZTI8S20389C5[];
extern  VTBL_ENTRY _ZTV8S20389C5[];
extern Class_Descriptor cd_S20389C11;
extern VTBL_ENTRY _ZTI9S20389C11[];
extern  VTBL_ENTRY _ZTV9S20389C11[];
static Base_Class bases_S20389C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20389C5,    ABISELECT(72,36), //bcp->offset
    34, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20389C9,    ABISELECT(96,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20389C10,    ABISELECT(120,60), //bcp->offset
    79, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20389C8,    ABISELECT(96,48), //bcp->offset
    46, //bcp->virtual_function_table_offset
    20, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20389C7,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20389C4,    ABISELECT(64,32), //bcp->offset
    20, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20389C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S20389C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI8S20389C3[];
extern void _ZN8S20389C53v14Ev();
extern void _ZN8S20389C53v15Ev();
extern void _ZN8S20389C53v16Ev();
extern void _ZN8S20389C53v17Ev();
extern void _ZN8S20389C53v18Ev();
extern void _ZN9S20389C113v39Ev();
extern void _ZN9S20389C113v40Ev();
extern void _ZN9S20389C113v41Ev();
extern void _ZN9S20389C113v42Ev();
extern void _ZN9S20389C113v43Ev();
extern void _ZN9S20389C113v44Ev();
extern void _ZN9S20389C113v45Ev();
extern void _ZN8S20389C3D1Ev();
extern void _ZN8S20389C3D0Ev();
extern void ABISELECT(_ZTv0_n40_N8S20389C3D1Ev,_ZTv0_n20_N8S20389C3D1Ev)();
extern void ABISELECT(_ZThn64_N8S20389C3D1Ev,_ZThn32_N8S20389C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20389C3D0Ev,_ZTv0_n20_N8S20389C3D0Ev)();
extern void ABISELECT(_ZThn64_N8S20389C3D0Ev,_ZThn32_N8S20389C3D0Ev)() __attribute__((weak));
extern void _ZN8S20389C73v36Ev();
extern void _ZN8S20389C73v37Ev();
extern void _ZN8S20389C43v38Ev();
extern void _ZN8S20389C53v14Ev();
extern void _ZN8S20389C53v15Ev();
extern void _ZN8S20389C53v16Ev();
extern void _ZN8S20389C53v17Ev();
extern void _ZN8S20389C53v18Ev();
extern void _ZN8S20389C93v19Ev();
extern void _ZN8S20389C93v20Ev();
extern void _ZN8S20389C93v21Ev();
extern void _ZN8S20389C93v22Ev();
extern void _ZN8S20389C93v23Ev();
extern void _ZN8S20389C93v24Ev();
extern void ABISELECT(_ZTv0_n72_N8S20389C3D1Ev,_ZTv0_n36_N8S20389C3D1Ev)();
extern void ABISELECT(_ZThn96_N8S20389C3D1Ev,_ZThn48_N8S20389C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S20389C3D0Ev,_ZTv0_n36_N8S20389C3D0Ev)();
extern void ABISELECT(_ZThn96_N8S20389C3D0Ev,_ZThn48_N8S20389C3D0Ev)() __attribute__((weak));
extern void _ZN8S20389C83v31Ev();
extern void _ZN8S20389C83v32Ev();
extern void _ZN8S20389C83v33Ev();
extern void _ZN8S20389C83v34Ev();
extern void _ZN8S20389C83v35Ev();
extern void ABISELECT(_ZTvn24_n72_N8S20389C3D1Ev,_ZTvn12_n36_N8S20389C3D1Ev)();
extern void ABISELECT(_ZTvn24_n72_N8S20389C3D0Ev,_ZTvn12_n36_N8S20389C3D0Ev)();
extern void _ZN9S20389C103v25Ev();
extern void _ZN9S20389C103v26Ev();
extern void _ZN9S20389C103v27Ev();
extern void _ZN9S20389C103v28Ev();
extern void _ZN9S20389C103v29Ev();
extern void _ZN9S20389C103v30Ev();
static  VTBL_ENTRY vtc_S20389C3[] = {
  ABISELECT(96,48),
  ABISELECT(64,32),
  ABISELECT(72,36),
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI8S20389C3[0]),
  (VTBL_ENTRY)&_ZN8S20389C53v14Ev,
  (VTBL_ENTRY)&_ZN8S20389C53v15Ev,
  (VTBL_ENTRY)&_ZN8S20389C53v16Ev,
  (VTBL_ENTRY)&_ZN8S20389C53v17Ev,
  (VTBL_ENTRY)&_ZN8S20389C53v18Ev,
  (VTBL_ENTRY)&_ZN9S20389C113v39Ev,
  (VTBL_ENTRY)&_ZN9S20389C113v40Ev,
  (VTBL_ENTRY)&_ZN9S20389C113v41Ev,
  (VTBL_ENTRY)&_ZN9S20389C113v42Ev,
  (VTBL_ENTRY)&_ZN9S20389C113v43Ev,
  (VTBL_ENTRY)&_ZN9S20389C113v44Ev,
  (VTBL_ENTRY)&_ZN9S20389C113v45Ev,
  (VTBL_ENTRY)&_ZN8S20389C3D1Ev,
  (VTBL_ENTRY)&_ZN8S20389C3D0Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-64,-32),
  ABISELECT(8,4),
  ABISELECT(32,16),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S20389C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20389C3D1Ev,_ZTv0_n20_N8S20389C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20389C3D0Ev,_ZTv0_n20_N8S20389C3D0Ev),
  (VTBL_ENTRY)&_ZN8S20389C73v36Ev,
  (VTBL_ENTRY)&_ZN8S20389C73v37Ev,
  (VTBL_ENTRY)&_ZN8S20389C43v38Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI8S20389C3[0]),
  (VTBL_ENTRY)&_ZN8S20389C53v14Ev,
  (VTBL_ENTRY)&_ZN8S20389C53v15Ev,
  (VTBL_ENTRY)&_ZN8S20389C53v16Ev,
  (VTBL_ENTRY)&_ZN8S20389C53v17Ev,
  (VTBL_ENTRY)&_ZN8S20389C53v18Ev,
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-96,-48),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-96,-48),
  (VTBL_ENTRY)&(_ZTI8S20389C3[0]),
  (VTBL_ENTRY)&_ZN8S20389C93v19Ev,
  (VTBL_ENTRY)&_ZN8S20389C93v20Ev,
  (VTBL_ENTRY)&_ZN8S20389C93v21Ev,
  (VTBL_ENTRY)&_ZN8S20389C93v22Ev,
  (VTBL_ENTRY)&_ZN8S20389C93v23Ev,
  (VTBL_ENTRY)&_ZN8S20389C93v24Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20389C3D1Ev,_ZTv0_n36_N8S20389C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20389C3D0Ev,_ZTv0_n36_N8S20389C3D0Ev),
  (VTBL_ENTRY)&_ZN8S20389C83v31Ev,
  (VTBL_ENTRY)&_ZN8S20389C83v32Ev,
  (VTBL_ENTRY)&_ZN8S20389C83v33Ev,
  (VTBL_ENTRY)&_ZN8S20389C83v34Ev,
  (VTBL_ENTRY)&_ZN8S20389C83v35Ev,
  ABISELECT(-120,-60),
  (VTBL_ENTRY)&(_ZTI8S20389C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N8S20389C3D1Ev,_ZTvn12_n36_N8S20389C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N8S20389C3D0Ev,_ZTvn12_n36_N8S20389C3D0Ev),
  (VTBL_ENTRY)&_ZN9S20389C103v25Ev,
  (VTBL_ENTRY)&_ZN9S20389C103v26Ev,
  (VTBL_ENTRY)&_ZN9S20389C103v27Ev,
  (VTBL_ENTRY)&_ZN9S20389C103v28Ev,
  (VTBL_ENTRY)&_ZN9S20389C103v29Ev,
  (VTBL_ENTRY)&_ZN9S20389C103v30Ev,
};
extern VTBL_ENTRY _ZTV8S20389C3[];
extern void ABISELECT(_ZTv0_n40_N8S20389C4D1Ev,_ZTv0_n20_N8S20389C4D1Ev)();
extern void _ZN8S20389C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20389C4D0Ev,_ZTv0_n20_N8S20389C4D0Ev)();
extern void _ZN8S20389C4D0Ev() __attribute__((weak));
extern void _ZN8S20389C73v36Ev();
extern void _ZN8S20389C73v37Ev();
extern void _ZN8S20389C43v38Ev();
static  VTBL_ENTRY _tg__ZTV8S20389C4__8S20389C3[] = {
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S20389C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20389C4D1Ev,_ZTv0_n20_N8S20389C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20389C4D0Ev,_ZTv0_n20_N8S20389C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20389C73v36Ev,
  (VTBL_ENTRY)&_ZN8S20389C73v37Ev,
  (VTBL_ENTRY)&_ZN8S20389C43v38Ev,
};
extern void _ZN8S20389C53v14Ev();
extern void _ZN8S20389C53v15Ev();
extern void _ZN8S20389C53v16Ev();
extern void _ZN8S20389C53v17Ev();
extern void _ZN8S20389C53v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20389C5__8S20389C4__8S20389C3[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20389C4[0]),
  (VTBL_ENTRY)&_ZN8S20389C53v14Ev,
  (VTBL_ENTRY)&_ZN8S20389C53v15Ev,
  (VTBL_ENTRY)&_ZN8S20389C53v16Ev,
  (VTBL_ENTRY)&_ZN8S20389C53v17Ev,
  (VTBL_ENTRY)&_ZN8S20389C53v18Ev,
};
extern void _ZN8S20389C93v19Ev();
extern void _ZN8S20389C93v20Ev();
extern void _ZN8S20389C93v21Ev();
extern void _ZN8S20389C93v22Ev();
extern void _ZN8S20389C93v23Ev();
extern void _ZN8S20389C93v24Ev();
extern void ABISELECT(_ZTv0_n72_N8S20389C4D1Ev,_ZTv0_n36_N8S20389C4D1Ev)();
extern void ABISELECT(_ZThn32_N8S20389C4D1Ev,_ZThn16_N8S20389C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S20389C4D0Ev,_ZTv0_n36_N8S20389C4D0Ev)();
extern void ABISELECT(_ZThn32_N8S20389C4D0Ev,_ZThn16_N8S20389C4D0Ev)() __attribute__((weak));
extern void _ZN8S20389C83v31Ev();
extern void _ZN8S20389C83v32Ev();
extern void _ZN8S20389C83v33Ev();
extern void _ZN8S20389C83v34Ev();
extern void _ZN8S20389C83v35Ev();
static  VTBL_ENTRY _tg__ZTV8S20389C8__8S20389C4__8S20389C3[] = {
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-16),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S20389C4[0]),
  (VTBL_ENTRY)&_ZN8S20389C93v19Ev,
  (VTBL_ENTRY)&_ZN8S20389C93v20Ev,
  (VTBL_ENTRY)&_ZN8S20389C93v21Ev,
  (VTBL_ENTRY)&_ZN8S20389C93v22Ev,
  (VTBL_ENTRY)&_ZN8S20389C93v23Ev,
  (VTBL_ENTRY)&_ZN8S20389C93v24Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20389C4D1Ev,_ZTv0_n36_N8S20389C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20389C4D0Ev,_ZTv0_n36_N8S20389C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20389C83v31Ev,
  (VTBL_ENTRY)&_ZN8S20389C83v32Ev,
  (VTBL_ENTRY)&_ZN8S20389C83v33Ev,
  (VTBL_ENTRY)&_ZN8S20389C83v34Ev,
  (VTBL_ENTRY)&_ZN8S20389C83v35Ev,
};
extern void ABISELECT(_ZTvn24_n72_N8S20389C4D1Ev,_ZTvn12_n36_N8S20389C4D1Ev)();
extern void ABISELECT(_ZTvn24_n72_N8S20389C4D0Ev,_ZTvn12_n36_N8S20389C4D0Ev)();
extern void _ZN9S20389C103v25Ev();
extern void _ZN9S20389C103v26Ev();
extern void _ZN9S20389C103v27Ev();
extern void _ZN9S20389C103v28Ev();
extern void _ZN9S20389C103v29Ev();
extern void _ZN9S20389C103v30Ev();
static  VTBL_ENTRY _tg__ZTV9S20389C108S20389C8__8S20389C4__8S20389C3[] = {
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S20389C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N8S20389C4D1Ev,_ZTvn12_n36_N8S20389C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N8S20389C4D0Ev,_ZTvn12_n36_N8S20389C4D0Ev),
  (VTBL_ENTRY)&_ZN9S20389C103v25Ev,
  (VTBL_ENTRY)&_ZN9S20389C103v26Ev,
  (VTBL_ENTRY)&_ZN9S20389C103v27Ev,
  (VTBL_ENTRY)&_ZN9S20389C103v28Ev,
  (VTBL_ENTRY)&_ZN9S20389C103v29Ev,
  (VTBL_ENTRY)&_ZN9S20389C103v30Ev,
};
extern void _ZN8S20389C7D1Ev();
extern void _ZN8S20389C7D0Ev();
extern void _ZN8S20389C73v36Ev();
extern void _ZN8S20389C73v37Ev();
static  VTBL_ENTRY _tg__ZTV8S20389C7__8S20389C3[] = {
  ABISELECT(8,4),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S20389C7[0]),
  (VTBL_ENTRY)&_ZN8S20389C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20389C7D0Ev,
  (VTBL_ENTRY)&_ZN8S20389C73v36Ev,
  (VTBL_ENTRY)&_ZN8S20389C73v37Ev,
};
extern void _ZN8S20389C93v19Ev();
extern void _ZN8S20389C93v20Ev();
extern void _ZN8S20389C93v21Ev();
extern void _ZN8S20389C93v22Ev();
extern void _ZN8S20389C93v23Ev();
extern void _ZN8S20389C93v24Ev();
extern void ABISELECT(_ZTv0_n72_N8S20389C7D1Ev,_ZTv0_n36_N8S20389C7D1Ev)();
extern void ABISELECT(_ZThn32_N8S20389C7D1Ev,_ZThn16_N8S20389C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S20389C7D0Ev,_ZTv0_n36_N8S20389C7D0Ev)();
extern void ABISELECT(_ZThn32_N8S20389C7D0Ev,_ZThn16_N8S20389C7D0Ev)() __attribute__((weak));
extern void _ZN8S20389C83v31Ev();
extern void _ZN8S20389C83v32Ev();
extern void _ZN8S20389C83v33Ev();
extern void _ZN8S20389C83v34Ev();
extern void _ZN8S20389C83v35Ev();
static  VTBL_ENTRY _tg__ZTV8S20389C8__8S20389C7__8S20389C3[] = {
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-16),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S20389C7[0]),
  (VTBL_ENTRY)&_ZN8S20389C93v19Ev,
  (VTBL_ENTRY)&_ZN8S20389C93v20Ev,
  (VTBL_ENTRY)&_ZN8S20389C93v21Ev,
  (VTBL_ENTRY)&_ZN8S20389C93v22Ev,
  (VTBL_ENTRY)&_ZN8S20389C93v23Ev,
  (VTBL_ENTRY)&_ZN8S20389C93v24Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20389C7D1Ev,_ZTv0_n36_N8S20389C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20389C7D0Ev,_ZTv0_n36_N8S20389C7D0Ev),
  (VTBL_ENTRY)&_ZN8S20389C83v31Ev,
  (VTBL_ENTRY)&_ZN8S20389C83v32Ev,
  (VTBL_ENTRY)&_ZN8S20389C83v33Ev,
  (VTBL_ENTRY)&_ZN8S20389C83v34Ev,
  (VTBL_ENTRY)&_ZN8S20389C83v35Ev,
};
extern void ABISELECT(_ZTvn24_n72_N8S20389C7D1Ev,_ZTvn12_n36_N8S20389C7D1Ev)();
extern void ABISELECT(_ZTvn24_n72_N8S20389C7D0Ev,_ZTvn12_n36_N8S20389C7D0Ev)();
extern void _ZN9S20389C103v25Ev();
extern void _ZN9S20389C103v26Ev();
extern void _ZN9S20389C103v27Ev();
extern void _ZN9S20389C103v28Ev();
extern void _ZN9S20389C103v29Ev();
extern void _ZN9S20389C103v30Ev();
static  VTBL_ENTRY _tg__ZTV9S20389C108S20389C8__8S20389C7__8S20389C3[] = {
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S20389C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N8S20389C7D1Ev,_ZTvn12_n36_N8S20389C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N8S20389C7D0Ev,_ZTvn12_n36_N8S20389C7D0Ev),
  (VTBL_ENTRY)&_ZN9S20389C103v25Ev,
  (VTBL_ENTRY)&_ZN9S20389C103v26Ev,
  (VTBL_ENTRY)&_ZN9S20389C103v27Ev,
  (VTBL_ENTRY)&_ZN9S20389C103v28Ev,
  (VTBL_ENTRY)&_ZN9S20389C103v29Ev,
  (VTBL_ENTRY)&_ZN9S20389C103v30Ev,
};
extern void _ZN8S20389C53v14Ev();
extern void _ZN8S20389C53v15Ev();
extern void _ZN8S20389C53v16Ev();
extern void _ZN8S20389C53v17Ev();
extern void _ZN8S20389C53v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20389C5__8S20389C7__8S20389C3[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20389C7[0]),
  (VTBL_ENTRY)&_ZN8S20389C53v14Ev,
  (VTBL_ENTRY)&_ZN8S20389C53v15Ev,
  (VTBL_ENTRY)&_ZN8S20389C53v16Ev,
  (VTBL_ENTRY)&_ZN8S20389C53v17Ev,
  (VTBL_ENTRY)&_ZN8S20389C53v18Ev,
};
static  VTT_ENTRY vtt_S20389C3[] = {
  {&(_ZTV8S20389C3[6]),  6,89},
  {&(_ZTV8S20389C3[29]),  29,89},
  {&(_ZTV8S20389C3[41]),  41,89},
  {&(_ZTV8S20389C3[29]),  29,89},
  {&(_ZTV8S20389C3[66]),  66,89},
  {&(_ZTV8S20389C3[81]),  81,89},
  {&(_tg__ZTV8S20389C4__8S20389C3[8]),  8,13},
  {&(_tg__ZTV8S20389C5__8S20389C4__8S20389C3[7]),  7,12},
  {&(_tg__ZTV8S20389C4__8S20389C3[8]),  8,13},
  {&(_tg__ZTV8S20389C8__8S20389C4__8S20389C3[20]),  20,33},
  {&(_tg__ZTV9S20389C108S20389C8__8S20389C4__8S20389C3[2]),  2,10},
  {&(_tg__ZTV8S20389C7__8S20389C3[4]),  4,8},
  {&(_tg__ZTV8S20389C8__8S20389C7__8S20389C3[20]),  20,33},
  {&(_tg__ZTV9S20389C108S20389C8__8S20389C7__8S20389C3[2]),  2,10},
  {&(_tg__ZTV8S20389C5__8S20389C7__8S20389C3[7]),  7,12},
};
extern VTBL_ENTRY _ZTI8S20389C3[];
extern  VTBL_ENTRY _ZTV8S20389C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20389C3[];
static VTBL_ENTRY alt_thunk_names16[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20389C7D0Ev,_ZTv0_n36_N8S20389C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S20389C7D0Ev,_ZThn16_N8S20389C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20389C7D1Ev,_ZTv0_n36_N8S20389C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S20389C7D1Ev,_ZThn16_N8S20389C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20389C4D0Ev,_ZTv0_n36_N8S20389C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S20389C4D0Ev,_ZThn16_N8S20389C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20389C4D1Ev,_ZTv0_n36_N8S20389C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S20389C4D1Ev,_ZThn16_N8S20389C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20389C4D0Ev,_ZTv0_n20_N8S20389C4D0Ev), // 
  (VTBL_ENTRY)_ZN8S20389C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20389C4D1Ev,_ZTv0_n20_N8S20389C4D1Ev), // 
  (VTBL_ENTRY)_ZN8S20389C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20389C3D0Ev,_ZTv0_n36_N8S20389C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S20389C3D0Ev,_ZThn48_N8S20389C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20389C3D1Ev,_ZTv0_n36_N8S20389C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S20389C3D1Ev,_ZThn48_N8S20389C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20389C3D0Ev,_ZTv0_n20_N8S20389C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20389C3D0Ev,_ZThn32_N8S20389C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20389C3D1Ev,_ZTv0_n20_N8S20389C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20389C3D1Ev,_ZThn32_N8S20389C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20389C3 = {  "S20389C3", // class name
  bases_S20389C3, 8,
  &(vtc_S20389C3[0]), // expected_vtbl_contents
  &(vtt_S20389C3[0]), // expected_vtt_contents
  ABISELECT(128,64), // object size
  NSPAIRA(_ZTI8S20389C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20389C3),89, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20389C3),15, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names16,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20389C1  : virtual S20389C2_nt , virtual S20389C3 {
  virtual void  v1(); // _ZN8S20389C12v1Ev
  virtual void  v2(); // _ZN8S20389C12v2Ev
  virtual void  v3(); // _ZN8S20389C12v3Ev
  virtual void  v4(); // _ZN8S20389C12v4Ev
  virtual void  v5(); // _ZN8S20389C12v5Ev
  virtual void  v6(); // _ZN8S20389C12v6Ev
  virtual void  v7(); // _ZN8S20389C12v7Ev
  ~S20389C1(); // tgen
  S20389C1(); // tgen
};
//SIG(1 S20389C1) C1{ VBC2{ v8 v9 v10 v11 v12 v13} VBC3{ VBC4{ VBC5{ v14 v15 v16 v17 v18 FC6{} Fp} VBC7{ VBC8{ BC9{ v19 v20 v21 v22 v23 v24 FC10{ vd v25 v26 v27 v28 v29 v30} Fi} BC10 vd v31 v32 v33 v34 v35} VBC5 vd v36 v37} vd v38} BC11{ BC5 v39 v40 v41 v42 v43 v44 v45 FC5} FC12{ v46 v47 v48 v49 FC6}} v1 v2 v3 v4 v5 v6 v7}


void  S20389C1 ::v1(){vfunc_called(this, "_ZN8S20389C12v1Ev");}
void  S20389C1 ::v2(){vfunc_called(this, "_ZN8S20389C12v2Ev");}
void  S20389C1 ::v3(){vfunc_called(this, "_ZN8S20389C12v3Ev");}
void  S20389C1 ::v4(){vfunc_called(this, "_ZN8S20389C12v4Ev");}
void  S20389C1 ::v5(){vfunc_called(this, "_ZN8S20389C12v5Ev");}
void  S20389C1 ::v6(){vfunc_called(this, "_ZN8S20389C12v6Ev");}
void  S20389C1 ::v7(){vfunc_called(this, "_ZN8S20389C12v7Ev");}
S20389C1 ::~S20389C1(){ note_dtor("S20389C1", this);} // tgen
S20389C1 ::S20389C1(){ note_ctor("S20389C1", this);} // tgen

static void Test_S20389C1()
{
  extern Class_Descriptor cd_S20389C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[18];
    init_test(&cd_S20389C1, buf);
    S20389C1 *dp, &lv = *(dp=new (buf) S20389C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,68), "sizeof(S20389C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20389C1)");
    check_base_class_offset(lv, (S20389C2_nt*), 0, "S20389C1");
    check_base_class_offset(lv, (S20389C5*)(S20389C4*), ABISELECT(80,40), "S20389C1");
    check_base_class_offset(lv, (S20389C5*)(S20389C7*), ABISELECT(80,40), "S20389C1");
    check_base_class_offset(lv, (S20389C9*)(S20389C8*), ABISELECT(104,52), "S20389C1");
    check_base_class_offset(lv, (S20389C10*)(S20389C8*), ABISELECT(128,64), "S20389C1");
    check_base_class_offset(lv, (S20389C8*)(S20389C7*), ABISELECT(104,52), "S20389C1");
    check_base_class_offset(lv, (S20389C7*)(S20389C4*), ABISELECT(72,36), "S20389C1");
    check_base_class_offset(lv, (S20389C4*)(S20389C3*), ABISELECT(72,36), "S20389C1");
    check_base_class_offset(lv, (S20389C5*)(S20389C11*)(S20389C3*), ABISELECT(8,4), "S20389C1");
    check_base_class_offset(lv, (S20389C11*)(S20389C3*), ABISELECT(8,4), "S20389C1");
    check_base_class_offset(lv, (S20389C3*), ABISELECT(8,4), "S20389C1");
    test_class_info(&lv, &cd_S20389C1);
    dp->~S20389C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20389C1(Test_S20389C1, "S20389C1", ABISELECT(136,68));

#else // __cplusplus

extern void _ZN8S20389C1C1Ev();
extern void _ZN8S20389C1D1Ev();
Name_Map name_map_S20389C1[] = {
  NSPAIR(_ZN8S20389C1C1Ev),
  NSPAIR(_ZN8S20389C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20389C2_nt;
extern VTBL_ENTRY _ZTI11S20389C2_nt[];
extern  VTBL_ENTRY _ZTV11S20389C2_nt[];
extern Class_Descriptor cd_S20389C5;
extern VTBL_ENTRY _ZTI8S20389C5[];
extern  VTBL_ENTRY _ZTV8S20389C5[];
extern Class_Descriptor cd_S20389C9;
extern VTBL_ENTRY _ZTI8S20389C9[];
extern  VTBL_ENTRY _ZTV8S20389C9[];
extern Class_Descriptor cd_S20389C10;
extern VTBL_ENTRY _ZTI9S20389C10[];
extern  VTBL_ENTRY _ZTV9S20389C10[];
extern Class_Descriptor cd_S20389C8;
extern VTBL_ENTRY _ZTI8S20389C8[];
extern  VTBL_ENTRY _ZTV8S20389C8[];
extern Class_Descriptor cd_S20389C7;
extern VTBL_ENTRY _ZTI8S20389C7[];
extern  VTBL_ENTRY _ZTV8S20389C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20389C7[];
extern Class_Descriptor cd_S20389C4;
extern VTBL_ENTRY _ZTI8S20389C4[];
extern  VTBL_ENTRY _ZTV8S20389C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20389C4[];
extern Class_Descriptor cd_S20389C5;
extern VTBL_ENTRY _ZTI8S20389C5[];
extern  VTBL_ENTRY _ZTV8S20389C5[];
extern Class_Descriptor cd_S20389C11;
extern VTBL_ENTRY _ZTI9S20389C11[];
extern  VTBL_ENTRY _ZTV9S20389C11[];
extern Class_Descriptor cd_S20389C3;
extern VTBL_ENTRY _ZTI8S20389C3[];
extern  VTBL_ENTRY _ZTV8S20389C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20389C3[];
static Base_Class bases_S20389C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20389C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20389C5,    ABISELECT(80,40), //bcp->offset
    76, //bcp->virtual_function_table_offset
    7, //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
    5, //immediately_derived
  0, 1},
  {&cd_S20389C9,    ABISELECT(104,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S20389C10,    ABISELECT(128,64), //bcp->offset
    121, //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
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S20389C8,    ABISELECT(104,52), //bcp->offset
    88, //bcp->virtual_function_table_offset
    20, //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
    5, //immediately_derived
  0, 1},
  {&cd_S20389C7,    ABISELECT(72,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S20389C4,    ABISELECT(72,36), //bcp->offset
    62, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S20389C5,    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
    8, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20389C11,    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
    9, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20389C3,    ABISELECT(8,4), //bcp->offset
    29, //bcp->virtual_function_table_offset
    19, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20389C1[];
extern void _ZN11S20389C2_nt2v8Ev();
extern void _ZN11S20389C2_nt2v9Ev();
extern void _ZN11S20389C2_nt3v10Ev();
extern void _ZN11S20389C2_nt3v11Ev();
extern void _ZN11S20389C2_nt3v12Ev();
extern void _ZN11S20389C2_nt3v13Ev();
extern void _ZN8S20389C12v1Ev();
extern void _ZN8S20389C12v2Ev();
extern void _ZN8S20389C12v3Ev();
extern void _ZN8S20389C12v4Ev();
extern void _ZN8S20389C12v5Ev();
extern void _ZN8S20389C12v6Ev();
extern void _ZN8S20389C12v7Ev();
extern void _ZN8S20389C1D1Ev();
extern void _ZN8S20389C1D0Ev();
extern void _ZN8S20389C53v14Ev();
extern void _ZN8S20389C53v15Ev();
extern void _ZN8S20389C53v16Ev();
extern void _ZN8S20389C53v17Ev();
extern void _ZN8S20389C53v18Ev();
extern void _ZN9S20389C113v39Ev();
extern void _ZN9S20389C113v40Ev();
extern void _ZN9S20389C113v41Ev();
extern void _ZN9S20389C113v42Ev();
extern void _ZN9S20389C113v43Ev();
extern void _ZN9S20389C113v44Ev();
extern void _ZN9S20389C113v45Ev();
extern void ABISELECT(_ZTv0_n152_N8S20389C1D1Ev,_ZTv0_n76_N8S20389C1D1Ev)();
extern void ABISELECT(_ZThn8_N8S20389C1D1Ev,_ZThn4_N8S20389C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n152_N8S20389C1D0Ev,_ZTv0_n76_N8S20389C1D0Ev)();
extern void ABISELECT(_ZThn8_N8S20389C1D0Ev,_ZThn4_N8S20389C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20389C1D1Ev,_ZTv0_n20_N8S20389C1D1Ev)();
extern void ABISELECT(_ZThn72_N8S20389C1D1Ev,_ZThn36_N8S20389C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20389C1D0Ev,_ZTv0_n20_N8S20389C1D0Ev)();
extern void ABISELECT(_ZThn72_N8S20389C1D0Ev,_ZThn36_N8S20389C1D0Ev)() __attribute__((weak));
extern void _ZN8S20389C73v36Ev();
extern void _ZN8S20389C73v37Ev();
extern void _ZN8S20389C43v38Ev();
extern void _ZN8S20389C53v14Ev();
extern void _ZN8S20389C53v15Ev();
extern void _ZN8S20389C53v16Ev();
extern void _ZN8S20389C53v17Ev();
extern void _ZN8S20389C53v18Ev();
extern void _ZN8S20389C93v19Ev();
extern void _ZN8S20389C93v20Ev();
extern void _ZN8S20389C93v21Ev();
extern void _ZN8S20389C93v22Ev();
extern void _ZN8S20389C93v23Ev();
extern void _ZN8S20389C93v24Ev();
extern void ABISELECT(_ZTv0_n72_N8S20389C1D1Ev,_ZTv0_n36_N8S20389C1D1Ev)();
extern void ABISELECT(_ZThn104_N8S20389C1D1Ev,_ZThn52_N8S20389C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S20389C1D0Ev,_ZTv0_n36_N8S20389C1D0Ev)();
extern void ABISELECT(_ZThn104_N8S20389C1D0Ev,_ZThn52_N8S20389C1D0Ev)() __attribute__((weak));
extern void _ZN8S20389C83v31Ev();
extern void _ZN8S20389C83v32Ev();
extern void _ZN8S20389C83v33Ev();
extern void _ZN8S20389C83v34Ev();
extern void _ZN8S20389C83v35Ev();
extern void ABISELECT(_ZTvn24_n72_N8S20389C1D1Ev,_ZTvn12_n36_N8S20389C1D1Ev)();
extern void ABISELECT(_ZTvn24_n72_N8S20389C1D0Ev,_ZTvn12_n36_N8S20389C1D0Ev)();
extern void _ZN9S20389C103v25Ev();
extern void _ZN9S20389C103v26Ev();
extern void _ZN9S20389C103v27Ev();
extern void _ZN9S20389C103v28Ev();
extern void _ZN9S20389C103v29Ev();
extern void _ZN9S20389C103v30Ev();
static  VTBL_ENTRY vtc_S20389C1[] = {
  ABISELECT(104,52),
  ABISELECT(72,36),
  ABISELECT(80,40),
  ABISELECT(72,36),
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20389C1[0]),
  (VTBL_ENTRY)&_ZN11S20389C2_nt2v8Ev,
  (VTBL_ENTRY)&_ZN11S20389C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S20389C2_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S20389C2_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S20389C2_nt3v12Ev,
  (VTBL_ENTRY)&_ZN11S20389C2_nt3v13Ev,
  (VTBL_ENTRY)&_ZN8S20389C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20389C12v2Ev,
  (VTBL_ENTRY)&_ZN8S20389C12v3Ev,
  (VTBL_ENTRY)&_ZN8S20389C12v4Ev,
  (VTBL_ENTRY)&_ZN8S20389C12v5Ev,
  (VTBL_ENTRY)&_ZN8S20389C12v6Ev,
  (VTBL_ENTRY)&_ZN8S20389C12v7Ev,
  (VTBL_ENTRY)&_ZN8S20389C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20389C1D0Ev,
  ABISELECT(-8,-4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(96,48),
  ABISELECT(64,32),
  ABISELECT(72,36),
  ABISELECT(64,32),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20389C1[0]),
  (VTBL_ENTRY)&_ZN8S20389C53v14Ev,
  (VTBL_ENTRY)&_ZN8S20389C53v15Ev,
  (VTBL_ENTRY)&_ZN8S20389C53v16Ev,
  (VTBL_ENTRY)&_ZN8S20389C53v17Ev,
  (VTBL_ENTRY)&_ZN8S20389C53v18Ev,
  (VTBL_ENTRY)&_ZN9S20389C113v39Ev,
  (VTBL_ENTRY)&_ZN9S20389C113v40Ev,
  (VTBL_ENTRY)&_ZN9S20389C113v41Ev,
  (VTBL_ENTRY)&_ZN9S20389C113v42Ev,
  (VTBL_ENTRY)&_ZN9S20389C113v43Ev,
  (VTBL_ENTRY)&_ZN9S20389C113v44Ev,
  (VTBL_ENTRY)&_ZN9S20389C113v45Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n152_N8S20389C1D1Ev,_ZTv0_n76_N8S20389C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n152_N8S20389C1D0Ev,_ZTv0_n76_N8S20389C1D0Ev),
  0,
  0,
  0,
  0,
  ABISELECT(-72,-36),
  ABISELECT(8,4),
  ABISELECT(32,16),
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI8S20389C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20389C1D1Ev,_ZTv0_n20_N8S20389C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20389C1D0Ev,_ZTv0_n20_N8S20389C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20389C73v36Ev,
  (VTBL_ENTRY)&_ZN8S20389C73v37Ev,
  (VTBL_ENTRY)&_ZN8S20389C43v38Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI8S20389C1[0]),
  (VTBL_ENTRY)&_ZN8S20389C53v14Ev,
  (VTBL_ENTRY)&_ZN8S20389C53v15Ev,
  (VTBL_ENTRY)&_ZN8S20389C53v16Ev,
  (VTBL_ENTRY)&_ZN8S20389C53v17Ev,
  (VTBL_ENTRY)&_ZN8S20389C53v18Ev,
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-104,-52),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-104,-52),
  (VTBL_ENTRY)&(_ZTI8S20389C1[0]),
  (VTBL_ENTRY)&_ZN8S20389C93v19Ev,
  (VTBL_ENTRY)&_ZN8S20389C93v20Ev,
  (VTBL_ENTRY)&_ZN8S20389C93v21Ev,
  (VTBL_ENTRY)&_ZN8S20389C93v22Ev,
  (VTBL_ENTRY)&_ZN8S20389C93v23Ev,
  (VTBL_ENTRY)&_ZN8S20389C93v24Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20389C1D1Ev,_ZTv0_n36_N8S20389C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20389C1D0Ev,_ZTv0_n36_N8S20389C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20389C83v31Ev,
  (VTBL_ENTRY)&_ZN8S20389C83v32Ev,
  (VTBL_ENTRY)&_ZN8S20389C83v33Ev,
  (VTBL_ENTRY)&_ZN8S20389C83v34Ev,
  (VTBL_ENTRY)&_ZN8S20389C83v35Ev,
  ABISELECT(-128,-64),
  (VTBL_ENTRY)&(_ZTI8S20389C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N8S20389C1D1Ev,_ZTvn12_n36_N8S20389C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N8S20389C1D0Ev,_ZTvn12_n36_N8S20389C1D0Ev),
  (VTBL_ENTRY)&_ZN9S20389C103v25Ev,
  (VTBL_ENTRY)&_ZN9S20389C103v26Ev,
  (VTBL_ENTRY)&_ZN9S20389C103v27Ev,
  (VTBL_ENTRY)&_ZN9S20389C103v28Ev,
  (VTBL_ENTRY)&_ZN9S20389C103v29Ev,
  (VTBL_ENTRY)&_ZN9S20389C103v30Ev,
};
extern VTBL_ENTRY _ZTV8S20389C1[];
extern void _ZN8S20389C53v14Ev();
extern void _ZN8S20389C53v15Ev();
extern void _ZN8S20389C53v16Ev();
extern void _ZN8S20389C53v17Ev();
extern void _ZN8S20389C53v18Ev();
extern void _ZN9S20389C113v39Ev();
extern void _ZN9S20389C113v40Ev();
extern void _ZN9S20389C113v41Ev();
extern void _ZN9S20389C113v42Ev();
extern void _ZN9S20389C113v43Ev();
extern void _ZN9S20389C113v44Ev();
extern void _ZN9S20389C113v45Ev();
extern void _ZN8S20389C3D1Ev();
extern void _ZN8S20389C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20389C3__8S20389C1[] = {
  ABISELECT(96,48),
  ABISELECT(64,32),
  ABISELECT(72,36),
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI8S20389C3[0]),
  (VTBL_ENTRY)&_ZN8S20389C53v14Ev,
  (VTBL_ENTRY)&_ZN8S20389C53v15Ev,
  (VTBL_ENTRY)&_ZN8S20389C53v16Ev,
  (VTBL_ENTRY)&_ZN8S20389C53v17Ev,
  (VTBL_ENTRY)&_ZN8S20389C53v18Ev,
  (VTBL_ENTRY)&_ZN9S20389C113v39Ev,
  (VTBL_ENTRY)&_ZN9S20389C113v40Ev,
  (VTBL_ENTRY)&_ZN9S20389C113v41Ev,
  (VTBL_ENTRY)&_ZN9S20389C113v42Ev,
  (VTBL_ENTRY)&_ZN9S20389C113v43Ev,
  (VTBL_ENTRY)&_ZN9S20389C113v44Ev,
  (VTBL_ENTRY)&_ZN9S20389C113v45Ev,
  (VTBL_ENTRY)&_ZN8S20389C3D1Ev,
  (VTBL_ENTRY)&_ZN8S20389C3D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S20389C3D1Ev,_ZTv0_n20_N8S20389C3D1Ev)();
extern void ABISELECT(_ZThn64_N8S20389C3D1Ev,_ZThn32_N8S20389C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20389C3D0Ev,_ZTv0_n20_N8S20389C3D0Ev)();
extern void ABISELECT(_ZThn64_N8S20389C3D0Ev,_ZThn32_N8S20389C3D0Ev)() __attribute__((weak));
extern void _ZN8S20389C73v36Ev();
extern void _ZN8S20389C73v37Ev();
extern void _ZN8S20389C43v38Ev();
static  VTBL_ENTRY _tg__ZTV8S20389C4__8S20389C3__8S20389C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-64,-32),
  ABISELECT(8,4),
  ABISELECT(32,16),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S20389C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20389C3D1Ev,_ZTv0_n20_N8S20389C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20389C3D0Ev,_ZTv0_n20_N8S20389C3D0Ev),
  (VTBL_ENTRY)&_ZN8S20389C73v36Ev,
  (VTBL_ENTRY)&_ZN8S20389C73v37Ev,
  (VTBL_ENTRY)&_ZN8S20389C43v38Ev,
};
extern void _ZN8S20389C53v14Ev();
extern void _ZN8S20389C53v15Ev();
extern void _ZN8S20389C53v16Ev();
extern void _ZN8S20389C53v17Ev();
extern void _ZN8S20389C53v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20389C5__8S20389C3__8S20389C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI8S20389C3[0]),
  (VTBL_ENTRY)&_ZN8S20389C53v14Ev,
  (VTBL_ENTRY)&_ZN8S20389C53v15Ev,
  (VTBL_ENTRY)&_ZN8S20389C53v16Ev,
  (VTBL_ENTRY)&_ZN8S20389C53v17Ev,
  (VTBL_ENTRY)&_ZN8S20389C53v18Ev,
};
extern void _ZN8S20389C93v19Ev();
extern void _ZN8S20389C93v20Ev();
extern void _ZN8S20389C93v21Ev();
extern void _ZN8S20389C93v22Ev();
extern void _ZN8S20389C93v23Ev();
extern void _ZN8S20389C93v24Ev();
extern void ABISELECT(_ZTv0_n72_N8S20389C3D1Ev,_ZTv0_n36_N8S20389C3D1Ev)();
extern void ABISELECT(_ZThn96_N8S20389C3D1Ev,_ZThn48_N8S20389C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S20389C3D0Ev,_ZTv0_n36_N8S20389C3D0Ev)();
extern void ABISELECT(_ZThn96_N8S20389C3D0Ev,_ZThn48_N8S20389C3D0Ev)() __attribute__((weak));
extern void _ZN8S20389C83v31Ev();
extern void _ZN8S20389C83v32Ev();
extern void _ZN8S20389C83v33Ev();
extern void _ZN8S20389C83v34Ev();
extern void _ZN8S20389C83v35Ev();
static  VTBL_ENTRY _tg__ZTV8S20389C8__8S20389C3__8S20389C1[] = {
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-96,-48),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-96,-48),
  (VTBL_ENTRY)&(_ZTI8S20389C3[0]),
  (VTBL_ENTRY)&_ZN8S20389C93v19Ev,
  (VTBL_ENTRY)&_ZN8S20389C93v20Ev,
  (VTBL_ENTRY)&_ZN8S20389C93v21Ev,
  (VTBL_ENTRY)&_ZN8S20389C93v22Ev,
  (VTBL_ENTRY)&_ZN8S20389C93v23Ev,
  (VTBL_ENTRY)&_ZN8S20389C93v24Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20389C3D1Ev,_ZTv0_n36_N8S20389C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20389C3D0Ev,_ZTv0_n36_N8S20389C3D0Ev),
  (VTBL_ENTRY)&_ZN8S20389C83v31Ev,
  (VTBL_ENTRY)&_ZN8S20389C83v32Ev,
  (VTBL_ENTRY)&_ZN8S20389C83v33Ev,
  (VTBL_ENTRY)&_ZN8S20389C83v34Ev,
  (VTBL_ENTRY)&_ZN8S20389C83v35Ev,
};
extern void ABISELECT(_ZTvn24_n72_N8S20389C3D1Ev,_ZTvn12_n36_N8S20389C3D1Ev)();
extern void ABISELECT(_ZTvn24_n72_N8S20389C3D0Ev,_ZTvn12_n36_N8S20389C3D0Ev)();
extern void _ZN9S20389C103v25Ev();
extern void _ZN9S20389C103v26Ev();
extern void _ZN9S20389C103v27Ev();
extern void _ZN9S20389C103v28Ev();
extern void _ZN9S20389C103v29Ev();
extern void _ZN9S20389C103v30Ev();
static  VTBL_ENTRY _tg__ZTV9S20389C108S20389C8__8S20389C3__8S20389C1[] = {
  ABISELECT(-120,-60),
  (VTBL_ENTRY)&(_ZTI8S20389C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N8S20389C3D1Ev,_ZTvn12_n36_N8S20389C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N8S20389C3D0Ev,_ZTvn12_n36_N8S20389C3D0Ev),
  (VTBL_ENTRY)&_ZN9S20389C103v25Ev,
  (VTBL_ENTRY)&_ZN9S20389C103v26Ev,
  (VTBL_ENTRY)&_ZN9S20389C103v27Ev,
  (VTBL_ENTRY)&_ZN9S20389C103v28Ev,
  (VTBL_ENTRY)&_ZN9S20389C103v29Ev,
  (VTBL_ENTRY)&_ZN9S20389C103v30Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S20389C4D1Ev,_ZTv0_n20_N8S20389C4D1Ev)();
extern void _ZN8S20389C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20389C4D0Ev,_ZTv0_n20_N8S20389C4D0Ev)();
extern void _ZN8S20389C4D0Ev() __attribute__((weak));
extern void _ZN8S20389C73v36Ev();
extern void _ZN8S20389C73v37Ev();
extern void _ZN8S20389C43v38Ev();
static  VTBL_ENTRY _tg__ZTV8S20389C4__8S20389C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S20389C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20389C4D1Ev,_ZTv0_n20_N8S20389C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20389C4D0Ev,_ZTv0_n20_N8S20389C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20389C73v36Ev,
  (VTBL_ENTRY)&_ZN8S20389C73v37Ev,
  (VTBL_ENTRY)&_ZN8S20389C43v38Ev,
};
extern void _ZN8S20389C53v14Ev();
extern void _ZN8S20389C53v15Ev();
extern void _ZN8S20389C53v16Ev();
extern void _ZN8S20389C53v17Ev();
extern void _ZN8S20389C53v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20389C5__8S20389C4__8S20389C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20389C4[0]),
  (VTBL_ENTRY)&_ZN8S20389C53v14Ev,
  (VTBL_ENTRY)&_ZN8S20389C53v15Ev,
  (VTBL_ENTRY)&_ZN8S20389C53v16Ev,
  (VTBL_ENTRY)&_ZN8S20389C53v17Ev,
  (VTBL_ENTRY)&_ZN8S20389C53v18Ev,
};
extern void _ZN8S20389C93v19Ev();
extern void _ZN8S20389C93v20Ev();
extern void _ZN8S20389C93v21Ev();
extern void _ZN8S20389C93v22Ev();
extern void _ZN8S20389C93v23Ev();
extern void _ZN8S20389C93v24Ev();
extern void ABISELECT(_ZTv0_n72_N8S20389C4D1Ev,_ZTv0_n36_N8S20389C4D1Ev)();
extern void ABISELECT(_ZThn32_N8S20389C4D1Ev,_ZThn16_N8S20389C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S20389C4D0Ev,_ZTv0_n36_N8S20389C4D0Ev)();
extern void ABISELECT(_ZThn32_N8S20389C4D0Ev,_ZThn16_N8S20389C4D0Ev)() __attribute__((weak));
extern void _ZN8S20389C83v31Ev();
extern void _ZN8S20389C83v32Ev();
extern void _ZN8S20389C83v33Ev();
extern void _ZN8S20389C83v34Ev();
extern void _ZN8S20389C83v35Ev();
static  VTBL_ENTRY _tg__ZTV8S20389C8__8S20389C4__8S20389C1[] = {
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-16),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S20389C4[0]),
  (VTBL_ENTRY)&_ZN8S20389C93v19Ev,
  (VTBL_ENTRY)&_ZN8S20389C93v20Ev,
  (VTBL_ENTRY)&_ZN8S20389C93v21Ev,
  (VTBL_ENTRY)&_ZN8S20389C93v22Ev,
  (VTBL_ENTRY)&_ZN8S20389C93v23Ev,
  (VTBL_ENTRY)&_ZN8S20389C93v24Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20389C4D1Ev,_ZTv0_n36_N8S20389C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20389C4D0Ev,_ZTv0_n36_N8S20389C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20389C83v31Ev,
  (VTBL_ENTRY)&_ZN8S20389C83v32Ev,
  (VTBL_ENTRY)&_ZN8S20389C83v33Ev,
  (VTBL_ENTRY)&_ZN8S20389C83v34Ev,
  (VTBL_ENTRY)&_ZN8S20389C83v35Ev,
};
extern void ABISELECT(_ZTvn24_n72_N8S20389C4D1Ev,_ZTvn12_n36_N8S20389C4D1Ev)();
extern void ABISELECT(_ZTvn24_n72_N8S20389C4D0Ev,_ZTvn12_n36_N8S20389C4D0Ev)();
extern void _ZN9S20389C103v25Ev();
extern void _ZN9S20389C103v26Ev();
extern void _ZN9S20389C103v27Ev();
extern void _ZN9S20389C103v28Ev();
extern void _ZN9S20389C103v29Ev();
extern void _ZN9S20389C103v30Ev();
static  VTBL_ENTRY _tg__ZTV9S20389C108S20389C8__8S20389C4__8S20389C1[] = {
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S20389C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N8S20389C4D1Ev,_ZTvn12_n36_N8S20389C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N8S20389C4D0Ev,_ZTvn12_n36_N8S20389C4D0Ev),
  (VTBL_ENTRY)&_ZN9S20389C103v25Ev,
  (VTBL_ENTRY)&_ZN9S20389C103v26Ev,
  (VTBL_ENTRY)&_ZN9S20389C103v27Ev,
  (VTBL_ENTRY)&_ZN9S20389C103v28Ev,
  (VTBL_ENTRY)&_ZN9S20389C103v29Ev,
  (VTBL_ENTRY)&_ZN9S20389C103v30Ev,
};
extern void _ZN8S20389C7D1Ev();
extern void _ZN8S20389C7D0Ev();
extern void _ZN8S20389C73v36Ev();
extern void _ZN8S20389C73v37Ev();
static  VTBL_ENTRY _tg__ZTV8S20389C7__8S20389C1[] = {
  ABISELECT(8,4),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S20389C7[0]),
  (VTBL_ENTRY)&_ZN8S20389C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20389C7D0Ev,
  (VTBL_ENTRY)&_ZN8S20389C73v36Ev,
  (VTBL_ENTRY)&_ZN8S20389C73v37Ev,
};
extern void _ZN8S20389C93v19Ev();
extern void _ZN8S20389C93v20Ev();
extern void _ZN8S20389C93v21Ev();
extern void _ZN8S20389C93v22Ev();
extern void _ZN8S20389C93v23Ev();
extern void _ZN8S20389C93v24Ev();
extern void ABISELECT(_ZTv0_n72_N8S20389C7D1Ev,_ZTv0_n36_N8S20389C7D1Ev)();
extern void ABISELECT(_ZThn32_N8S20389C7D1Ev,_ZThn16_N8S20389C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S20389C7D0Ev,_ZTv0_n36_N8S20389C7D0Ev)();
extern void ABISELECT(_ZThn32_N8S20389C7D0Ev,_ZThn16_N8S20389C7D0Ev)() __attribute__((weak));
extern void _ZN8S20389C83v31Ev();
extern void _ZN8S20389C83v32Ev();
extern void _ZN8S20389C83v33Ev();
extern void _ZN8S20389C83v34Ev();
extern void _ZN8S20389C83v35Ev();
static  VTBL_ENTRY _tg__ZTV8S20389C8__8S20389C7__8S20389C1[] = {
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-16),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S20389C7[0]),
  (VTBL_ENTRY)&_ZN8S20389C93v19Ev,
  (VTBL_ENTRY)&_ZN8S20389C93v20Ev,
  (VTBL_ENTRY)&_ZN8S20389C93v21Ev,
  (VTBL_ENTRY)&_ZN8S20389C93v22Ev,
  (VTBL_ENTRY)&_ZN8S20389C93v23Ev,
  (VTBL_ENTRY)&_ZN8S20389C93v24Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20389C7D1Ev,_ZTv0_n36_N8S20389C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20389C7D0Ev,_ZTv0_n36_N8S20389C7D0Ev),
  (VTBL_ENTRY)&_ZN8S20389C83v31Ev,
  (VTBL_ENTRY)&_ZN8S20389C83v32Ev,
  (VTBL_ENTRY)&_ZN8S20389C83v33Ev,
  (VTBL_ENTRY)&_ZN8S20389C83v34Ev,
  (VTBL_ENTRY)&_ZN8S20389C83v35Ev,
};
extern void ABISELECT(_ZTvn24_n72_N8S20389C7D1Ev,_ZTvn12_n36_N8S20389C7D1Ev)();
extern void ABISELECT(_ZTvn24_n72_N8S20389C7D0Ev,_ZTvn12_n36_N8S20389C7D0Ev)();
extern void _ZN9S20389C103v25Ev();
extern void _ZN9S20389C103v26Ev();
extern void _ZN9S20389C103v27Ev();
extern void _ZN9S20389C103v28Ev();
extern void _ZN9S20389C103v29Ev();
extern void _ZN9S20389C103v30Ev();
static  VTBL_ENTRY _tg__ZTV9S20389C108S20389C8__8S20389C7__8S20389C1[] = {
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S20389C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N8S20389C7D1Ev,_ZTvn12_n36_N8S20389C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N8S20389C7D0Ev,_ZTvn12_n36_N8S20389C7D0Ev),
  (VTBL_ENTRY)&_ZN9S20389C103v25Ev,
  (VTBL_ENTRY)&_ZN9S20389C103v26Ev,
  (VTBL_ENTRY)&_ZN9S20389C103v27Ev,
  (VTBL_ENTRY)&_ZN9S20389C103v28Ev,
  (VTBL_ENTRY)&_ZN9S20389C103v29Ev,
  (VTBL_ENTRY)&_ZN9S20389C103v30Ev,
};
extern void _ZN8S20389C53v14Ev();
extern void _ZN8S20389C53v15Ev();
extern void _ZN8S20389C53v16Ev();
extern void _ZN8S20389C53v17Ev();
extern void _ZN8S20389C53v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20389C5__8S20389C7__8S20389C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20389C7[0]),
  (VTBL_ENTRY)&_ZN8S20389C53v14Ev,
  (VTBL_ENTRY)&_ZN8S20389C53v15Ev,
  (VTBL_ENTRY)&_ZN8S20389C53v16Ev,
  (VTBL_ENTRY)&_ZN8S20389C53v17Ev,
  (VTBL_ENTRY)&_ZN8S20389C53v18Ev,
};
static  VTT_ENTRY vtt_S20389C1[] = {
  {&(_ZTV8S20389C1[14]),  14,131},
  {&(_ZTV8S20389C1[14]),  14,131},
  {&(_ZTV8S20389C1[48]),  48,131},
  {&(_ZTV8S20389C1[71]),  71,131},
  {&(_ZTV8S20389C1[83]),  83,131},
  {&(_ZTV8S20389C1[71]),  71,131},
  {&(_ZTV8S20389C1[108]),  108,131},
  {&(_ZTV8S20389C1[123]),  123,131},
  {&(_tg__ZTV8S20389C3__8S20389C1[6]),  6,20},
  {&(_tg__ZTV8S20389C4__8S20389C3__8S20389C1[9]),  9,14},
  {&(_tg__ZTV8S20389C5__8S20389C3__8S20389C1[7]),  7,12},
  {&(_tg__ZTV8S20389C4__8S20389C3__8S20389C1[9]),  9,14},
  {&(_tg__ZTV8S20389C8__8S20389C3__8S20389C1[20]),  20,33},
  {&(_tg__ZTV9S20389C108S20389C8__8S20389C3__8S20389C1[2]),  2,10},
  {&(_tg__ZTV8S20389C4__8S20389C1[8]),  8,13},
  {&(_tg__ZTV8S20389C5__8S20389C4__8S20389C1[7]),  7,12},
  {&(_tg__ZTV8S20389C4__8S20389C1[8]),  8,13},
  {&(_tg__ZTV8S20389C8__8S20389C4__8S20389C1[20]),  20,33},
  {&(_tg__ZTV9S20389C108S20389C8__8S20389C4__8S20389C1[2]),  2,10},
  {&(_tg__ZTV8S20389C7__8S20389C1[4]),  4,8},
  {&(_tg__ZTV8S20389C8__8S20389C7__8S20389C1[20]),  20,33},
  {&(_tg__ZTV9S20389C108S20389C8__8S20389C7__8S20389C1[2]),  2,10},
  {&(_tg__ZTV8S20389C5__8S20389C7__8S20389C1[7]),  7,12},
};
extern VTBL_ENTRY _ZTI8S20389C1[];
extern  VTBL_ENTRY _ZTV8S20389C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20389C1[];
static VTBL_ENTRY alt_thunk_names17[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20389C7D0Ev,_ZTv0_n36_N8S20389C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S20389C7D0Ev,_ZThn16_N8S20389C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20389C7D1Ev,_ZTv0_n36_N8S20389C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S20389C7D1Ev,_ZThn16_N8S20389C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20389C4D0Ev,_ZTv0_n36_N8S20389C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S20389C4D0Ev,_ZThn16_N8S20389C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20389C4D1Ev,_ZTv0_n36_N8S20389C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S20389C4D1Ev,_ZThn16_N8S20389C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20389C4D0Ev,_ZTv0_n20_N8S20389C4D0Ev), // 
  (VTBL_ENTRY)_ZN8S20389C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20389C4D1Ev,_ZTv0_n20_N8S20389C4D1Ev), // 
  (VTBL_ENTRY)_ZN8S20389C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20389C3D0Ev,_ZTv0_n36_N8S20389C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S20389C3D0Ev,_ZThn48_N8S20389C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20389C3D1Ev,_ZTv0_n36_N8S20389C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S20389C3D1Ev,_ZThn48_N8S20389C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20389C3D0Ev,_ZTv0_n20_N8S20389C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20389C3D0Ev,_ZThn32_N8S20389C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20389C3D1Ev,_ZTv0_n20_N8S20389C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20389C3D1Ev,_ZThn32_N8S20389C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20389C1D0Ev,_ZTv0_n36_N8S20389C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S20389C1D0Ev,_ZThn52_N8S20389C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20389C1D1Ev,_ZTv0_n36_N8S20389C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S20389C1D1Ev,_ZThn52_N8S20389C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20389C1D0Ev,_ZTv0_n20_N8S20389C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S20389C1D0Ev,_ZThn36_N8S20389C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20389C1D1Ev,_ZTv0_n20_N8S20389C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S20389C1D1Ev,_ZThn36_N8S20389C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n152_N8S20389C1D0Ev,_ZTv0_n76_N8S20389C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20389C1D0Ev,_ZThn4_N8S20389C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n152_N8S20389C1D1Ev,_ZTv0_n76_N8S20389C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20389C1D1Ev,_ZThn4_N8S20389C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20389C1 = {  "S20389C1", // class name
  bases_S20389C1, 10,
  &(vtc_S20389C1[0]), // expected_vtbl_contents
  &(vtt_S20389C1[0]), // expected_vtt_contents
  ABISELECT(136,68), // object size
  NSPAIRA(_ZTI8S20389C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20389C1),131, //virtual function table var
  14, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20389C1),23, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names17,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12626C4  {
  long s12626c4f0;
  short s12626c4f1;
  short s12626c4f2;
  long s12626c4f3;
  long s12626c4f4;
  short s12626c4f5;
  char s12626c4f6[32];
  short s12626c4f7;
};
//SIG(-1 S12626C4) C1{ Fl Fs[2] Fl[2] Fs Fc[32] Fs}



static void Test_S12626C4()
{
  {
    init_simple_test("S12626C4");
    S12626C4 lv;
    check2(sizeof(lv), ABISELECT(72,52), "sizeof(S12626C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12626C4)");
    check_field_offset(lv, s12626c4f0, 0, "S12626C4.s12626c4f0");
    check_field_offset(lv, s12626c4f1, ABISELECT(8,4), "S12626C4.s12626c4f1");
    check_field_offset(lv, s12626c4f2, ABISELECT(10,6), "S12626C4.s12626c4f2");
    check_field_offset(lv, s12626c4f3, ABISELECT(16,8), "S12626C4.s12626c4f3");
    check_field_offset(lv, s12626c4f4, ABISELECT(24,12), "S12626C4.s12626c4f4");
    check_field_offset(lv, s12626c4f5, ABISELECT(32,16), "S12626C4.s12626c4f5");
    check_field_offset(lv, s12626c4f6, ABISELECT(34,18), "S12626C4.s12626c4f6");
    check_field_offset(lv, s12626c4f7, ABISELECT(66,50), "S12626C4.s12626c4f7");
  }
}
static Arrange_To_Call_Me vS12626C4(Test_S12626C4, "S12626C4", ABISELECT(72,52));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12626C6  {
  ::S13685C9 s12626c6f0;
  void *s12626c6f1;
  ::S13685C9 s12626c6f2;
};
//SIG(-1 S12626C6) C1{ FC2{ Fp FL} Fp FC2}



static void Test_S12626C6()
{
  {
    init_simple_test("S12626C6");
    S12626C6 lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S12626C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12626C6)");
    check_field_offset(lv, s12626c6f0, 0, "S12626C6.s12626c6f0");
    check_field_offset(lv, s12626c6f1, ABISELECT(16,12), "S12626C6.s12626c6f1");
    check_field_offset(lv, s12626c6f2, ABISELECT(24,16), "S12626C6.s12626c6f2");
  }
}
static Arrange_To_Call_Me vS12626C6(Test_S12626C6, "S12626C6", ABISELECT(40,28));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12626C8  {
  char s12626c8f0;
  char s12626c8f1;
  char s12626c8f2;
  char s12626c8f3;
  char s12626c8f4;
  ::S601C11 s12626c8f5;
  ::S601C11 s12626c8f6;
};
//SIG(1 S12626C8) C1{ Fc[5] FC2{ Fp[2]} FC2}



static void Test_S12626C8()
{
  {
    init_simple_test("S12626C8");
    S12626C8 lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S12626C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12626C8)");
    check_field_offset(lv, s12626c8f0, 0, "S12626C8.s12626c8f0");
    check_field_offset(lv, s12626c8f1, 1, "S12626C8.s12626c8f1");
    check_field_offset(lv, s12626c8f2, 2, "S12626C8.s12626c8f2");
    check_field_offset(lv, s12626c8f3, 3, "S12626C8.s12626c8f3");
    check_field_offset(lv, s12626c8f4, 4, "S12626C8.s12626c8f4");
    check_field_offset(lv, s12626c8f5, 8, "S12626C8.s12626c8f5");
    check_field_offset(lv, s12626c8f6, ABISELECT(24,16), "S12626C8.s12626c8f6");
  }
}
static Arrange_To_Call_Me vS12626C8(Test_S12626C8, "S12626C8", ABISELECT(40,24));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

union  S12626C5  {
  ::S12626C6 s12626c5f0;
  ::S12626C8 s12626c5f1;
};
//SIG(1 S12626C5) U1{ FC2{ FC3{ Fp FL} Fp FC3} FC4{ Fc Fc Fc Fc Fc FC5{ Fp Fp} FC5}}

#endif // __cplusplus
#ifdef __cplusplus

struct  S12626C3  {
  ::S12626C4 s12626c3f0;
  long s12626c3f1;
  ::S12626C5 s12626c3f2;
  void *s12626c3f3;
  void *s12626c3f4;
  void *s12626c3f5;
};
//SIG(1 S12626C3) C1{ FC2{ Fl Fs[2] Fl[2] Fs Fc[32] Fs} Fl FU3{ FC4{ FC5{ Fp FL} Fp FC5} FC6{ Fc Fc Fc Fc Fc FC7{ Fp Fp} FC7}} Fp Fp Fp}



static void Test_S12626C3()
{
  {
    init_simple_test("S12626C3");
    S12626C3 lv;
    check2(sizeof(lv), ABISELECT(144,96), "sizeof(S12626C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12626C3)");
    check_field_offset(lv, s12626c3f0, 0, "S12626C3.s12626c3f0");
    check_field_offset(lv, s12626c3f1, ABISELECT(72,52), "S12626C3.s12626c3f1");
    check_field_offset(lv, s12626c3f2, ABISELECT(80,56), "S12626C3.s12626c3f2");
    check_field_offset(lv, s12626c3f3, ABISELECT(120,84), "S12626C3.s12626c3f3");
    check_field_offset(lv, s12626c3f4, ABISELECT(128,88), "S12626C3.s12626c3f4");
    check_field_offset(lv, s12626c3f5, ABISELECT(136,92), "S12626C3.s12626c3f5");
  }
}
static Arrange_To_Call_Me vS12626C3(Test_S12626C3, "S12626C3", ABISELECT(144,96));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12626C11  {
  long s12626c11f0;
  short s12626c11f1;
  short s12626c11f2;
  long s12626c11f3;
};
//SIG(-1 S12626C11) C1{ Fl Fs[2] Fl}



static void Test_S12626C11()
{
  {
    init_simple_test("S12626C11");
    S12626C11 lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S12626C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12626C11)");
    check_field_offset(lv, s12626c11f0, 0, "S12626C11.s12626c11f0");
    check_field_offset(lv, s12626c11f1, ABISELECT(8,4), "S12626C11.s12626c11f1");
    check_field_offset(lv, s12626c11f2, ABISELECT(10,6), "S12626C11.s12626c11f2");
    check_field_offset(lv, s12626c11f3, ABISELECT(16,8), "S12626C11.s12626c11f3");
  }
}
static Arrange_To_Call_Me vS12626C11(Test_S12626C11, "S12626C11", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12626C10  {
  ::S12626C11 s12626c10f0;
  ::S12626C6 s12626c10f1;
  void *s12626c10f2;
  void *s12626c10f3;
};
//SIG(1 S12626C10) C1{ FC2{ Fl Fs[2] Fl} FC3{ FC4{ Fp FL} Fp FC4} Fp[2]}



static void Test_S12626C10()
{
  {
    init_simple_test("S12626C10");
    S12626C10 lv;
    check2(sizeof(lv), ABISELECT(80,48), "sizeof(S12626C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12626C10)");
    check_field_offset(lv, s12626c10f0, 0, "S12626C10.s12626c10f0");
    check_field_offset(lv, s12626c10f1, ABISELECT(24,12), "S12626C10.s12626c10f1");
    check_field_offset(lv, s12626c10f2, ABISELECT(64,40), "S12626C10.s12626c10f2");
    check_field_offset(lv, s12626c10f3, ABISELECT(72,44), "S12626C10.s12626c10f3");
  }
}
static Arrange_To_Call_Me vS12626C10(Test_S12626C10, "S12626C10", ABISELECT(80,48));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12626C13  {
  long s12626c13f0;
  short s12626c13f1;
  short s12626c13f2;
  short s12626c13f3;
  long s12626c13f4;
  long s12626c13f5;
  short s12626c13f6;
  short s12626c13f7;
  char s12626c13f8;
};
//SIG(-1 S12626C13) C1{ Fl Fs[3] Fl[2] Fs[2] Fc}



static void Test_S12626C13()
{
  {
    init_simple_test("S12626C13");
    S12626C13 lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S12626C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12626C13)");
    check_field_offset(lv, s12626c13f0, 0, "S12626C13.s12626c13f0");
    check_field_offset(lv, s12626c13f1, ABISELECT(8,4), "S12626C13.s12626c13f1");
    check_field_offset(lv, s12626c13f2, ABISELECT(10,6), "S12626C13.s12626c13f2");
    check_field_offset(lv, s12626c13f3, ABISELECT(12,8), "S12626C13.s12626c13f3");
    check_field_offset(lv, s12626c13f4, ABISELECT(16,12), "S12626C13.s12626c13f4");
    check_field_offset(lv, s12626c13f5, ABISELECT(24,16), "S12626C13.s12626c13f5");
    check_field_offset(lv, s12626c13f6, ABISELECT(32,20), "S12626C13.s12626c13f6");
    check_field_offset(lv, s12626c13f7, ABISELECT(34,22), "S12626C13.s12626c13f7");
    check_field_offset(lv, s12626c13f8, ABISELECT(36,24), "S12626C13.s12626c13f8");
  }
}
static Arrange_To_Call_Me vS12626C13(Test_S12626C13, "S12626C13", ABISELECT(40,28));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12626C14  {
  char s12626c14f0;
  char s12626c14f1;
  short s12626c14f2;
  short s12626c14f3;
  short s12626c14f4;
};
//SIG(-1 S12626C14) C1{ Fc[2] Fs[3]}



static void Test_S12626C14()
{
  {
    init_simple_test("S12626C14");
    S12626C14 lv;
    check2(sizeof(lv), 8, "sizeof(S12626C14)");
    check2(__alignof__(lv), 2, "__alignof__(S12626C14)");
    check_field_offset(lv, s12626c14f0, 0, "S12626C14.s12626c14f0");
    check_field_offset(lv, s12626c14f1, 1, "S12626C14.s12626c14f1");
    check_field_offset(lv, s12626c14f2, 2, "S12626C14.s12626c14f2");
    check_field_offset(lv, s12626c14f3, 4, "S12626C14.s12626c14f3");
    check_field_offset(lv, s12626c14f4, 6, "S12626C14.s12626c14f4");
  }
}
static Arrange_To_Call_Me vS12626C14(Test_S12626C14, "S12626C14", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12626C12  {
  ::S12626C13 s12626c12f0;
  long s12626c12f1;
  ::S12626C14 s12626c12f2;
};
//SIG(1 S12626C12) C1{ FC2{ Fl Fs[3] Fl[2] Fs[2] Fc} Fl FC3{ Fc[2] Fs[3]}}



static void Test_S12626C12()
{
  {
    init_simple_test("S12626C12");
    S12626C12 lv;
    check2(sizeof(lv), ABISELECT(56,40), "sizeof(S12626C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12626C12)");
    check_field_offset(lv, s12626c12f0, 0, "S12626C12.s12626c12f0");
    check_field_offset(lv, s12626c12f1, ABISELECT(40,28), "S12626C12.s12626c12f1");
    check_field_offset(lv, s12626c12f2, ABISELECT(48,32), "S12626C12.s12626c12f2");
  }
}
static Arrange_To_Call_Me vS12626C12(Test_S12626C12, "S12626C12", ABISELECT(56,40));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12626C16_nt  {
  long s12626c16f0;
};
//SIG(-1 S12626C16_nt) C1{ Fl}



//skip512 S12626C16_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12626C15  {
  ::S12626C16_nt s12626c15f0;
  ::S12626C6 s12626c15f1;
};
//SIG(1 S12626C15) C1{ FC2{ Fl} FC3{ FC4{ Fp FL} Fp FC4}}



static void Test_S12626C15()
{
  {
    init_simple_test("S12626C15");
    S12626C15 lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S12626C15)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12626C15)");
    check_field_offset(lv, s12626c15f0, 0, "S12626C15.s12626c15f0");
    check_field_offset(lv, s12626c15f1, ABISELECT(8,4), "S12626C15.s12626c15f1");
  }
}
static Arrange_To_Call_Me vS12626C15(Test_S12626C15, "S12626C15", ABISELECT(48,32));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12626C17  {
  ::S12626C16_nt s12626c17f0;
};
//SIG(1 S12626C17) C1{ FC2{ Fl}}



static void Test_S12626C17()
{
  {
    init_simple_test("S12626C17");
    S12626C17 lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S12626C17)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12626C17)");
    check_field_offset(lv, s12626c17f0, 0, "S12626C17.s12626c17f0");
  }
}
static Arrange_To_Call_Me vS12626C17(Test_S12626C17, "S12626C17", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12626C20  {
  long s12626c20f0;
};
//SIG(-1 S12626C20) C1{ Fl}



static void Test_S12626C20()
{
  {
    init_simple_test("S12626C20");
    S12626C20 lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S12626C20)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12626C20)");
    check_field_offset(lv, s12626c20f0, 0, "S12626C20.s12626c20f0");
  }
}
static Arrange_To_Call_Me vS12626C20(Test_S12626C20, "S12626C20", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12626C19  {
  ::S12626C20 s12626c19f0;
  void *s12626c19f1;
  void *s12626c19f2;
};
//SIG(1 S12626C19) C1{ FC2{ Fl} Fp[2]}



static void Test_S12626C19()
{
  {
    init_simple_test("S12626C19");
    S12626C19 lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S12626C19)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12626C19)");
    check_field_offset(lv, s12626c19f0, 0, "S12626C19.s12626c19f0");
    check_field_offset(lv, s12626c19f1, ABISELECT(8,4), "S12626C19.s12626c19f1");
    check_field_offset(lv, s12626c19f2, ABISELECT(16,8), "S12626C19.s12626c19f2");
  }
}
static Arrange_To_Call_Me vS12626C19(Test_S12626C19, "S12626C19", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

union  S12626C2  {
  ::S12626C3 s12626c2f0;
  ::S12626C10 s12626c2f1;
  ::S12626C12 s12626c2f2;
  ::S12626C15 s12626c2f3;
  ::S12626C17 s12626c2f4;
  ::S12626C19 s12626c2f5;
  ::S12626C17 s12626c2f6;
};
//SIG(1 S12626C2) U1{ FC2{ FC3{ Fl Fs Fs Fl Fl Fs Fc[32] Fs} Fl FU4{ FC5{ FC6{ Fp FL} Fp FC6} FC7{ Fc Fc Fc Fc Fc FC8{ Fp Fp} FC8}} Fp Fp Fp} FC9{ FC10{ Fl Fs Fs Fl} FC5 Fp Fp} FC11{ FC12{ Fl Fs Fs Fs Fl Fl Fs Fs Fc} Fl FC13{ Fc Fc Fs Fs Fs}} FC14{ FC15{ Fl} FC5} FC16{ FC15} FC17{ FC18{ Fl} Fp Fp} FC16}

#endif // __cplusplus
#ifdef __cplusplus

struct  S12626C1  {
  int s12626c1f0;
  long s12626c1f1;
  ::S12626C2 s12626c1f2;
  void *s12626c1f3;
};
//SIG(1 S12626C1) C1{ Fi Fl FU2{ FC3{ FC4{ Fl Fs Fs Fl Fl Fs Fc[32] Fs} Fl FU5{ FC6{ FC7{ Fp FL} Fp FC7} FC8{ Fc Fc Fc Fc Fc FC9{ Fp Fp} FC9}} Fp Fp Fp} FC10{ FC11{ Fl Fs Fs Fl} FC6 Fp Fp} FC12{ FC13{ Fl Fs Fs Fs Fl Fl Fs Fs Fc} Fl FC14{ Fc Fc Fs Fs Fs}} FC15{ FC16{ Fl} FC6} FC17{ FC16} FC18{ FC19{ Fl} Fp Fp} FC17} Fp}



static void Test_S12626C1()
{
  {
    init_simple_test("S12626C1");
    S12626C1 lv;
    check2(sizeof(lv), ABISELECT(168,108), "sizeof(S12626C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12626C1)");
    check_field_offset(lv, s12626c1f0, 0, "S12626C1.s12626c1f0");
    check_field_offset(lv, s12626c1f1, ABISELECT(8,4), "S12626C1.s12626c1f1");
    check_field_offset(lv, s12626c1f2, ABISELECT(16,8), "S12626C1.s12626c1f2");
    check_field_offset(lv, s12626c1f3, ABISELECT(160,104), "S12626C1.s12626c1f3");
  }
}
static Arrange_To_Call_Me vS12626C1(Test_S12626C1, "S12626C1", ABISELECT(168,108));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6489C2  {
  ::S2120C13_nt s6489c2f0;
  ::S2120C13_nt s6489c2f1;
  void *s6489c2f2;
  int s6489c2f3;
  ::S601C8 s6489c2f4;
  int s6489c2f5:2;
  int s6489c2f6:2;
  unsigned char s6489c2f7:1;
  unsigned char s6489c2f8:1;
  ::S601C53 s6489c2f9;
  ::S601C11 s6489c2f10[2];
  virtual  ~S6489C2(); // _ZN7S6489C2D1Ev
  virtual void  v14(); // _ZN7S6489C23v14Ev
  virtual void  v15(); // _ZN7S6489C23v15Ev
  virtual void  v16(); // _ZN7S6489C23v16Ev
  virtual void  v17(); // _ZN7S6489C23v17Ev
  virtual void  v18(); // _ZN7S6489C23v18Ev
  virtual void  v19(); // _ZN7S6489C23v19Ev
  virtual void  v20(); // _ZN7S6489C23v20Ev
  virtual void  v21(); // _ZN7S6489C23v21Ev
  virtual void  v22(); // _ZN7S6489C23v22Ev
  virtual void  v23(); // _ZN7S6489C23v23Ev
  virtual void  v24(); // _ZN7S6489C23v24Ev
  virtual void  v25(); // _ZN7S6489C23v25Ev
  virtual void  v26(); // _ZN7S6489C23v26Ev
  virtual void  v27(); // _ZN7S6489C23v27Ev
  virtual void  v28(); // _ZN7S6489C23v28Ev
  S6489C2(); // tgen
};
//SIG(-1 S6489C2) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 FC2{ m FC3{ m FL[2]}} FC2 Fp Fi FU4{ m FC5{ Fi:4 Fi:4 Fi:4 Fi:2 Fi:1 Fi:17} Fi} Fi:2 Fi:2 Fc:1 Fc:1 FC6{ m Fp Fp} FC7{ Fp Fp}[2]}


 S6489C2 ::~S6489C2(){ note_dtor("S6489C2", this);}
void  S6489C2 ::v14(){vfunc_called(this, "_ZN7S6489C23v14Ev");}
void  S6489C2 ::v15(){vfunc_called(this, "_ZN7S6489C23v15Ev");}
void  S6489C2 ::v16(){vfunc_called(this, "_ZN7S6489C23v16Ev");}
void  S6489C2 ::v17(){vfunc_called(this, "_ZN7S6489C23v17Ev");}
void  S6489C2 ::v18(){vfunc_called(this, "_ZN7S6489C23v18Ev");}
void  S6489C2 ::v19(){vfunc_called(this, "_ZN7S6489C23v19Ev");}
void  S6489C2 ::v20(){vfunc_called(this, "_ZN7S6489C23v20Ev");}
void  S6489C2 ::v21(){vfunc_called(this, "_ZN7S6489C23v21Ev");}
void  S6489C2 ::v22(){vfunc_called(this, "_ZN7S6489C23v22Ev");}
void  S6489C2 ::v23(){vfunc_called(this, "_ZN7S6489C23v23Ev");}
void  S6489C2 ::v24(){vfunc_called(this, "_ZN7S6489C23v24Ev");}
void  S6489C2 ::v25(){vfunc_called(this, "_ZN7S6489C23v25Ev");}
void  S6489C2 ::v26(){vfunc_called(this, "_ZN7S6489C23v26Ev");}
void  S6489C2 ::v27(){vfunc_called(this, "_ZN7S6489C23v27Ev");}
void  S6489C2 ::v28(){vfunc_called(this, "_ZN7S6489C23v28Ev");}
S6489C2 ::S6489C2(){ note_ctor("S6489C2", this);} // tgen

static void Test_S6489C2()
{
  extern Class_Descriptor cd_S6489C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,20)];
    init_test(&cd_S6489C2, buf);
    S6489C2 *dp, &lv = *(dp=new (buf) S6489C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,76), "sizeof(S6489C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6489C2)");
    check_field_offset(lv, s6489c2f0, ABISELECT(8,4), "S6489C2.s6489c2f0");
    check_field_offset(lv, s6489c2f1, ABISELECT(24,20), "S6489C2.s6489c2f1");
    check_field_offset(lv, s6489c2f2, ABISELECT(40,36), "S6489C2.s6489c2f2");
    check_field_offset(lv, s6489c2f3, ABISELECT(48,40), "S6489C2.s6489c2f3");
    check_field_offset(lv, s6489c2f4, ABISELECT(52,44), "S6489C2.s6489c2f4");
    set_bf_and_test(lv, s6489c2f5, ABISELECT(56,48), 0, 2, 1, "S6489C2");
    set_bf_and_test(lv, s6489c2f5, ABISELECT(56,48), 0, 2, hide_sll(1LL<<1), "S6489C2");
    set_bf_and_test(lv, s6489c2f6, ABISELECT(56,48), 2, 2, 1, "S6489C2");
    set_bf_and_test(lv, s6489c2f6, ABISELECT(56,48), 2, 2, hide_sll(1LL<<1), "S6489C2");
    set_bf_and_test(lv, s6489c2f7, ABISELECT(56,48), 4, 1, 1, "S6489C2");
    set_bf_and_test(lv, s6489c2f8, ABISELECT(56,48), 5, 1, 1, "S6489C2");
    check_field_offset(lv, s6489c2f9, ABISELECT(64,52), "S6489C2.s6489c2f9");
    check_field_offset(lv, s6489c2f10, ABISELECT(80,60), "S6489C2.s6489c2f10");
    test_class_info(&lv, &cd_S6489C2);
    dp->~S6489C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6489C2(Test_S6489C2, "S6489C2", ABISELECT(112,76));

#else // __cplusplus

extern void _ZN7S6489C2C1Ev();
extern void _ZN7S6489C2D1Ev();
Name_Map name_map_S6489C2[] = {
  NSPAIR(_ZN7S6489C2C1Ev),
  NSPAIR(_ZN7S6489C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6489C2[];
extern void _ZN7S6489C2D1Ev();
extern void _ZN7S6489C2D0Ev();
extern void _ZN7S6489C23v14Ev();
extern void _ZN7S6489C23v15Ev();
extern void _ZN7S6489C23v16Ev();
extern void _ZN7S6489C23v17Ev();
extern void _ZN7S6489C23v18Ev();
extern void _ZN7S6489C23v19Ev();
extern void _ZN7S6489C23v20Ev();
extern void _ZN7S6489C23v21Ev();
extern void _ZN7S6489C23v22Ev();
extern void _ZN7S6489C23v23Ev();
extern void _ZN7S6489C23v24Ev();
extern void _ZN7S6489C23v25Ev();
extern void _ZN7S6489C23v26Ev();
extern void _ZN7S6489C23v27Ev();
extern void _ZN7S6489C23v28Ev();
static  VTBL_ENTRY vtc_S6489C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6489C2[0]),
  (VTBL_ENTRY)&_ZN7S6489C2D1Ev,
  (VTBL_ENTRY)&_ZN7S6489C2D0Ev,
  (VTBL_ENTRY)&_ZN7S6489C23v14Ev,
  (VTBL_ENTRY)&_ZN7S6489C23v15Ev,
  (VTBL_ENTRY)&_ZN7S6489C23v16Ev,
  (VTBL_ENTRY)&_ZN7S6489C23v17Ev,
  (VTBL_ENTRY)&_ZN7S6489C23v18Ev,
  (VTBL_ENTRY)&_ZN7S6489C23v19Ev,
  (VTBL_ENTRY)&_ZN7S6489C23v20Ev,
  (VTBL_ENTRY)&_ZN7S6489C23v21Ev,
  (VTBL_ENTRY)&_ZN7S6489C23v22Ev,
  (VTBL_ENTRY)&_ZN7S6489C23v23Ev,
  (VTBL_ENTRY)&_ZN7S6489C23v24Ev,
  (VTBL_ENTRY)&_ZN7S6489C23v25Ev,
  (VTBL_ENTRY)&_ZN7S6489C23v26Ev,
  (VTBL_ENTRY)&_ZN7S6489C23v27Ev,
  (VTBL_ENTRY)&_ZN7S6489C23v28Ev,
};
extern VTBL_ENTRY _ZTI7S6489C2[];
extern  VTBL_ENTRY _ZTV7S6489C2[];
Class_Descriptor cd_S6489C2 = {  "S6489C2", // class name
  0,0,//no base classes
  &(vtc_S6489C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,76), // object size
  NSPAIRA(_ZTI7S6489C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6489C2),19, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6489C1  : S6489C2 {
  unsigned char s6489c1f0:1;
  ::S2120C13_nt s6489c1f1;
  ::S2120C13_nt s6489c1f2;
  ::S2120C13_nt s6489c1f3;
  ::S601C12 s6489c1f4;
  ::S885C13_nt s6489c1f5;
  virtual  ~S6489C1(); // _ZN7S6489C1D1Ev
  virtual void  v1(); // _ZN7S6489C12v1Ev
  virtual void  v2(); // _ZN7S6489C12v2Ev
  virtual void  v3(); // _ZN7S6489C12v3Ev
  virtual void  v4(); // _ZN7S6489C12v4Ev
  virtual void  v5(); // _ZN7S6489C12v5Ev
  virtual void  v6(); // _ZN7S6489C12v6Ev
  virtual void  v7(); // _ZN7S6489C12v7Ev
  virtual void  v8(); // _ZN7S6489C12v8Ev
  virtual void  v9(); // _ZN7S6489C12v9Ev
  virtual void  v10(); // _ZN7S6489C13v10Ev
  virtual void  v11(); // _ZN7S6489C13v11Ev
  virtual void  v12(); // _ZN7S6489C13v12Ev
  virtual void  v13(); // _ZN7S6489C13v13Ev
  S6489C1(); // tgen
};
//SIG(1 S6489C1) C1{ BC2{ vd v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 FC3{ m FC4{ m FL[2]}} FC3 Fp Fi FU5{ m FC6{ Fi:4 Fi:4 Fi:4 Fi:2 Fi:1 Fi:17} Fi} Fi:2 Fi:2 Fc:1 Fc:1 FC7{ m Fp Fp} FC8{ Fp Fp}[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 Fc:1 FC3 FC3 FC3 FC9{ m FC3 FC3} FC10{ m Fp}}


 S6489C1 ::~S6489C1(){ note_dtor("S6489C1", this);}
void  S6489C1 ::v1(){vfunc_called(this, "_ZN7S6489C12v1Ev");}
void  S6489C1 ::v2(){vfunc_called(this, "_ZN7S6489C12v2Ev");}
void  S6489C1 ::v3(){vfunc_called(this, "_ZN7S6489C12v3Ev");}
void  S6489C1 ::v4(){vfunc_called(this, "_ZN7S6489C12v4Ev");}
void  S6489C1 ::v5(){vfunc_called(this, "_ZN7S6489C12v5Ev");}
void  S6489C1 ::v6(){vfunc_called(this, "_ZN7S6489C12v6Ev");}
void  S6489C1 ::v7(){vfunc_called(this, "_ZN7S6489C12v7Ev");}
void  S6489C1 ::v8(){vfunc_called(this, "_ZN7S6489C12v8Ev");}
void  S6489C1 ::v9(){vfunc_called(this, "_ZN7S6489C12v9Ev");}
void  S6489C1 ::v10(){vfunc_called(this, "_ZN7S6489C13v10Ev");}
void  S6489C1 ::v11(){vfunc_called(this, "_ZN7S6489C13v11Ev");}
void  S6489C1 ::v12(){vfunc_called(this, "_ZN7S6489C13v12Ev");}
void  S6489C1 ::v13(){vfunc_called(this, "_ZN7S6489C13v13Ev");}
S6489C1 ::S6489C1(){ note_ctor("S6489C1", this);} // tgen

static void Test_S6489C1()
{
  extern Class_Descriptor cd_S6489C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(27,42)];
    init_test(&cd_S6489C1, buf);
    S6489C1 *dp, &lv = *(dp=new (buf) S6489C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,164), "sizeof(S6489C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6489C1)");
    check_base_class_offset(lv, (S6489C2*), 0, "S6489C1");
    set_bf_and_test(lv, s6489c1f0, ABISELECT(112,76), 0, 1, 1, "S6489C1");
    check_field_offset(lv, s6489c1f1, ABISELECT(120,80), "S6489C1.s6489c1f1");
    check_field_offset(lv, s6489c1f2, ABISELECT(136,96), "S6489C1.s6489c1f2");
    check_field_offset(lv, s6489c1f3, ABISELECT(152,112), "S6489C1.s6489c1f3");
    check_field_offset(lv, s6489c1f4, ABISELECT(168,128), "S6489C1.s6489c1f4");
    check_field_offset(lv, s6489c1f5, ABISELECT(200,160), "S6489C1.s6489c1f5");
    test_class_info(&lv, &cd_S6489C1);
    dp->~S6489C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6489C1(Test_S6489C1, "S6489C1", ABISELECT(208,164));

#else // __cplusplus

extern void _ZN7S6489C1C1Ev();
extern void _ZN7S6489C1D1Ev();
Name_Map name_map_S6489C1[] = {
  NSPAIR(_ZN7S6489C1C1Ev),
  NSPAIR(_ZN7S6489C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6489C2;
extern VTBL_ENTRY _ZTI7S6489C2[];
extern  VTBL_ENTRY _ZTV7S6489C2[];
static Base_Class bases_S6489C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6489C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6489C1[];
extern void _ZN7S6489C1D1Ev();
extern void _ZN7S6489C1D0Ev();
extern void _ZN7S6489C23v14Ev();
extern void _ZN7S6489C23v15Ev();
extern void _ZN7S6489C23v16Ev();
extern void _ZN7S6489C23v17Ev();
extern void _ZN7S6489C23v18Ev();
extern void _ZN7S6489C23v19Ev();
extern void _ZN7S6489C23v20Ev();
extern void _ZN7S6489C23v21Ev();
extern void _ZN7S6489C23v22Ev();
extern void _ZN7S6489C23v23Ev();
extern void _ZN7S6489C23v24Ev();
extern void _ZN7S6489C23v25Ev();
extern void _ZN7S6489C23v26Ev();
extern void _ZN7S6489C23v27Ev();
extern void _ZN7S6489C23v28Ev();
extern void _ZN7S6489C12v1Ev();
extern void _ZN7S6489C12v2Ev();
extern void _ZN7S6489C12v3Ev();
extern void _ZN7S6489C12v4Ev();
extern void _ZN7S6489C12v5Ev();
extern void _ZN7S6489C12v6Ev();
extern void _ZN7S6489C12v7Ev();
extern void _ZN7S6489C12v8Ev();
extern void _ZN7S6489C12v9Ev();
extern void _ZN7S6489C13v10Ev();
extern void _ZN7S6489C13v11Ev();
extern void _ZN7S6489C13v12Ev();
extern void _ZN7S6489C13v13Ev();
static  VTBL_ENTRY vtc_S6489C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6489C1[0]),
  (VTBL_ENTRY)&_ZN7S6489C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6489C1D0Ev,
  (VTBL_ENTRY)&_ZN7S6489C23v14Ev,
  (VTBL_ENTRY)&_ZN7S6489C23v15Ev,
  (VTBL_ENTRY)&_ZN7S6489C23v16Ev,
  (VTBL_ENTRY)&_ZN7S6489C23v17Ev,
  (VTBL_ENTRY)&_ZN7S6489C23v18Ev,
  (VTBL_ENTRY)&_ZN7S6489C23v19Ev,
  (VTBL_ENTRY)&_ZN7S6489C23v20Ev,
  (VTBL_ENTRY)&_ZN7S6489C23v21Ev,
  (VTBL_ENTRY)&_ZN7S6489C23v22Ev,
  (VTBL_ENTRY)&_ZN7S6489C23v23Ev,
  (VTBL_ENTRY)&_ZN7S6489C23v24Ev,
  (VTBL_ENTRY)&_ZN7S6489C23v25Ev,
  (VTBL_ENTRY)&_ZN7S6489C23v26Ev,
  (VTBL_ENTRY)&_ZN7S6489C23v27Ev,
  (VTBL_ENTRY)&_ZN7S6489C23v28Ev,
  (VTBL_ENTRY)&_ZN7S6489C12v1Ev,
  (VTBL_ENTRY)&_ZN7S6489C12v2Ev,
  (VTBL_ENTRY)&_ZN7S6489C12v3Ev,
  (VTBL_ENTRY)&_ZN7S6489C12v4Ev,
  (VTBL_ENTRY)&_ZN7S6489C12v5Ev,
  (VTBL_ENTRY)&_ZN7S6489C12v6Ev,
  (VTBL_ENTRY)&_ZN7S6489C12v7Ev,
  (VTBL_ENTRY)&_ZN7S6489C12v8Ev,
  (VTBL_ENTRY)&_ZN7S6489C12v9Ev,
  (VTBL_ENTRY)&_ZN7S6489C13v10Ev,
  (VTBL_ENTRY)&_ZN7S6489C13v11Ev,
  (VTBL_ENTRY)&_ZN7S6489C13v12Ev,
  (VTBL_ENTRY)&_ZN7S6489C13v13Ev,
};
extern VTBL_ENTRY _ZTI7S6489C1[];
extern  VTBL_ENTRY _ZTV7S6489C1[];
Class_Descriptor cd_S6489C1 = {  "S6489C1", // class name
  bases_S6489C1, 1,
  &(vtc_S6489C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(208,164), // object size
  NSPAIRA(_ZTI7S6489C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6489C1),32, //virtual function table var
  2, // 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  S1200C3_nt  : S3352C21_nt {
  virtual  ~S1200C3_nt(); // _ZN10S1200C3_ntD1Ev
  virtual void  v13(); // _ZN10S1200C3_nt3v13Ev
  S1200C3_nt(); // tgen
};
//SIG(-1 S1200C3_nt) C1{ BC2{ m} vd v1}


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

//skip512 S1200C3_nt

#else // __cplusplus

extern void _ZN10S1200C3_ntC1Ev();
extern void _ZN10S1200C3_ntD1Ev();
Name_Map name_map_S1200C3_nt[] = {
  NSPAIR(_ZN10S1200C3_ntC1Ev),
  NSPAIR(_ZN10S1200C3_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3352C21_nt;
extern VTBL_ENTRY _ZTI11S3352C21_nt[];
static Base_Class bases_S1200C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3352C21_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S1200C3_nt[];
extern void _ZN10S1200C3_ntD1Ev();
extern void _ZN10S1200C3_ntD0Ev();
extern void _ZN10S1200C3_nt3v13Ev();
static  VTBL_ENTRY vtc_S1200C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S1200C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S1200C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S1200C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S1200C3_nt3v13Ev,
};
extern VTBL_ENTRY _ZTI10S1200C3_nt[];
VTBL_ENTRY *P__ZTI10S1200C3_nt = _ZTI10S1200C3_nt; 
extern  VTBL_ENTRY _ZTV10S1200C3_nt[];
Class_Descriptor cd_S1200C3_nt = {  "S1200C3_nt", // class name
  bases_S1200C3_nt, 1,
  &(vtc_S1200C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S1200C3_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S1200C3_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  S1200C2_nt  : S1200C3_nt {
  virtual  ~S1200C2_nt(); // _ZN10S1200C2_ntD1Ev
  virtual void  v14(); // _ZN10S1200C2_nt3v14Ev
  virtual void  v15(); // _ZN10S1200C2_nt3v15Ev
  virtual void  v16(); // _ZN10S1200C2_nt3v16Ev
  virtual void  v17(); // _ZN10S1200C2_nt3v17Ev
  virtual void  v18(); // _ZN10S1200C2_nt3v18Ev
  S1200C2_nt(); // tgen
};
//SIG(-1 S1200C2_nt) C1{ BC2{ BC3{ m} vd v6} vd v1 v2 v3 v4 v5}


 S1200C2_nt ::~S1200C2_nt(){ note_dtor("S1200C2_nt", this);}
void  S1200C2_nt ::v14(){vfunc_called(this, "_ZN10S1200C2_nt3v14Ev");}
void  S1200C2_nt ::v15(){vfunc_called(this, "_ZN10S1200C2_nt3v15Ev");}
void  S1200C2_nt ::v16(){vfunc_called(this, "_ZN10S1200C2_nt3v16Ev");}
void  S1200C2_nt ::v17(){vfunc_called(this, "_ZN10S1200C2_nt3v17Ev");}
void  S1200C2_nt ::v18(){vfunc_called(this, "_ZN10S1200C2_nt3v18Ev");}
S1200C2_nt ::S1200C2_nt(){ note_ctor("S1200C2_nt", this);} // tgen

//skip512 S1200C2_nt

#else // __cplusplus

extern void _ZN10S1200C2_ntC1Ev();
extern void _ZN10S1200C2_ntD1Ev();
Name_Map name_map_S1200C2_nt[] = {
  NSPAIR(_ZN10S1200C2_ntC1Ev),
  NSPAIR(_ZN10S1200C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3352C21_nt;
extern VTBL_ENTRY _ZTI11S3352C21_nt[];
extern Class_Descriptor cd_S1200C3_nt;
extern VTBL_ENTRY _ZTI10S1200C3_nt[];
extern  VTBL_ENTRY _ZTV10S1200C3_nt[];
static Base_Class bases_S1200C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3352C21_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1200C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S1200C2_nt[];
extern void _ZN10S1200C2_ntD1Ev();
extern void _ZN10S1200C2_ntD0Ev();
extern void _ZN10S1200C3_nt3v13Ev();
extern void _ZN10S1200C2_nt3v14Ev();
extern void _ZN10S1200C2_nt3v15Ev();
extern void _ZN10S1200C2_nt3v16Ev();
extern void _ZN10S1200C2_nt3v17Ev();
extern void _ZN10S1200C2_nt3v18Ev();
static  VTBL_ENTRY vtc_S1200C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S1200C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S1200C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S1200C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S1200C3_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S1200C2_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S1200C2_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S1200C2_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S1200C2_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S1200C2_nt3v18Ev,
};
extern VTBL_ENTRY _ZTI10S1200C2_nt[];
VTBL_ENTRY *P__ZTI10S1200C2_nt = _ZTI10S1200C2_nt; 
extern  VTBL_ENTRY _ZTV10S1200C2_nt[];
Class_Descriptor cd_S1200C2_nt = {  "S1200C2_nt", // class name
  bases_S1200C2_nt, 2,
  &(vtc_S1200C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S1200C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S1200C2_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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1200C5  {
  virtual  ~S1200C5(); // _ZN7S1200C5D1Ev
  virtual void  v19(); // _ZN7S1200C53v19Ev
  virtual void  v20(); // _ZN7S1200C53v20Ev
  virtual void  v21(); // _ZN7S1200C53v21Ev
  virtual void  v22(); // _ZN7S1200C53v22Ev
  S1200C5(); // tgen
};
//SIG(-1 S1200C5) C1{ vd v1 v2 v3 v4}


 S1200C5 ::~S1200C5(){ note_dtor("S1200C5", this);}
void  S1200C5 ::v19(){vfunc_called(this, "_ZN7S1200C53v19Ev");}
void  S1200C5 ::v20(){vfunc_called(this, "_ZN7S1200C53v20Ev");}
void  S1200C5 ::v21(){vfunc_called(this, "_ZN7S1200C53v21Ev");}
void  S1200C5 ::v22(){vfunc_called(this, "_ZN7S1200C53v22Ev");}
S1200C5 ::S1200C5(){ note_ctor("S1200C5", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S1200C5C1Ev();
extern void _ZN7S1200C5D1Ev();
Name_Map name_map_S1200C5[] = {
  NSPAIR(_ZN7S1200C5C1Ev),
  NSPAIR(_ZN7S1200C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1200C5[];
extern void _ZN7S1200C5D1Ev();
extern void _ZN7S1200C5D0Ev();
extern void _ZN7S1200C53v19Ev();
extern void _ZN7S1200C53v20Ev();
extern void _ZN7S1200C53v21Ev();
extern void _ZN7S1200C53v22Ev();
static  VTBL_ENTRY vtc_S1200C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1200C5[0]),
  (VTBL_ENTRY)&_ZN7S1200C5D1Ev,
  (VTBL_ENTRY)&_ZN7S1200C5D0Ev,
  (VTBL_ENTRY)&_ZN7S1200C53v19Ev,
  (VTBL_ENTRY)&_ZN7S1200C53v20Ev,
  (VTBL_ENTRY)&_ZN7S1200C53v21Ev,
  (VTBL_ENTRY)&_ZN7S1200C53v22Ev,
};
extern VTBL_ENTRY _ZTI7S1200C5[];
extern  VTBL_ENTRY _ZTV7S1200C5[];
Class_Descriptor cd_S1200C5 = {  "S1200C5", // class name
  0,0,//no base classes
  &(vtc_S1200C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S1200C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1200C5),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1200C6_nt  {
  virtual  ~S1200C6_nt(); // _ZN10S1200C6_ntD1Ev
  virtual void  v23(); // _ZN10S1200C6_nt3v23Ev
  virtual void  v24(); // _ZN10S1200C6_nt3v24Ev
  virtual void  v25(); // _ZN10S1200C6_nt3v25Ev
  S1200C6_nt(); // tgen
};
//SIG(-1 S1200C6_nt) C1{ vd v1 v2 v3}


 S1200C6_nt ::~S1200C6_nt(){ note_dtor("S1200C6_nt", this);}
void  S1200C6_nt ::v23(){vfunc_called(this, "_ZN10S1200C6_nt3v23Ev");}
void  S1200C6_nt ::v24(){vfunc_called(this, "_ZN10S1200C6_nt3v24Ev");}
void  S1200C6_nt ::v25(){vfunc_called(this, "_ZN10S1200C6_nt3v25Ev");}
S1200C6_nt ::S1200C6_nt(){ note_ctor("S1200C6_nt", this);} // tgen

//skip512 S1200C6_nt

#else // __cplusplus

extern void _ZN10S1200C6_ntC1Ev();
extern void _ZN10S1200C6_ntD1Ev();
Name_Map name_map_S1200C6_nt[] = {
  NSPAIR(_ZN10S1200C6_ntC1Ev),
  NSPAIR(_ZN10S1200C6_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S1200C6_nt[];
extern void _ZN10S1200C6_ntD1Ev();
extern void _ZN10S1200C6_ntD0Ev();
extern void _ZN10S1200C6_nt3v23Ev();
extern void _ZN10S1200C6_nt3v24Ev();
extern void _ZN10S1200C6_nt3v25Ev();
static  VTBL_ENTRY vtc_S1200C6_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S1200C6_nt[0]),
  (VTBL_ENTRY)&_ZN10S1200C6_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S1200C6_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S1200C6_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S1200C6_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S1200C6_nt3v25Ev,
};
extern VTBL_ENTRY _ZTI10S1200C6_nt[];
VTBL_ENTRY *P__ZTI10S1200C6_nt = _ZTI10S1200C6_nt; 
extern  VTBL_ENTRY _ZTV10S1200C6_nt[];
Class_Descriptor cd_S1200C6_nt = {  "S1200C6_nt", // class name
  0,0,//no base classes
  &(vtc_S1200C6_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S1200C6_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S1200C6_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  S1200C8_nt  : S1200C3_nt {
  virtual  ~S1200C8_nt(); // _ZN10S1200C8_ntD1Ev
  virtual void  v35(); // _ZN10S1200C8_nt3v35Ev
  virtual void  v36(); // _ZN10S1200C8_nt3v36Ev
  virtual void  v37(); // _ZN10S1200C8_nt3v37Ev
  virtual void  v38(); // _ZN10S1200C8_nt3v38Ev
  virtual void  v39(); // _ZN10S1200C8_nt3v39Ev
  virtual void  v40(); // _ZN10S1200C8_nt3v40Ev
  virtual void  v41(); // _ZN10S1200C8_nt3v41Ev
  virtual void  v42(); // _ZN10S1200C8_nt3v42Ev
  S1200C8_nt(); // tgen
};
//SIG(-1 S1200C8_nt) C1{ BC2{ BC3{ m} vd v9} vd v1 v2 v3 v4 v5 v6 v7 v8}


 S1200C8_nt ::~S1200C8_nt(){ note_dtor("S1200C8_nt", this);}
void  S1200C8_nt ::v35(){vfunc_called(this, "_ZN10S1200C8_nt3v35Ev");}
void  S1200C8_nt ::v36(){vfunc_called(this, "_ZN10S1200C8_nt3v36Ev");}
void  S1200C8_nt ::v37(){vfunc_called(this, "_ZN10S1200C8_nt3v37Ev");}
void  S1200C8_nt ::v38(){vfunc_called(this, "_ZN10S1200C8_nt3v38Ev");}
void  S1200C8_nt ::v39(){vfunc_called(this, "_ZN10S1200C8_nt3v39Ev");}
void  S1200C8_nt ::v40(){vfunc_called(this, "_ZN10S1200C8_nt3v40Ev");}
void  S1200C8_nt ::v41(){vfunc_called(this, "_ZN10S1200C8_nt3v41Ev");}
void  S1200C8_nt ::v42(){vfunc_called(this, "_ZN10S1200C8_nt3v42Ev");}
S1200C8_nt ::S1200C8_nt(){ note_ctor("S1200C8_nt", this);} // tgen

//skip512 S1200C8_nt

#else // __cplusplus

extern void _ZN10S1200C8_ntC1Ev();
extern void _ZN10S1200C8_ntD1Ev();
Name_Map name_map_S1200C8_nt[] = {
  NSPAIR(_ZN10S1200C8_ntC1Ev),
  NSPAIR(_ZN10S1200C8_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3352C21_nt;
extern VTBL_ENTRY _ZTI11S3352C21_nt[];
extern Class_Descriptor cd_S1200C3_nt;
extern VTBL_ENTRY _ZTI10S1200C3_nt[];
extern  VTBL_ENTRY _ZTV10S1200C3_nt[];
static Base_Class bases_S1200C8_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3352C21_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1200C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S1200C8_nt[];
extern void _ZN10S1200C8_ntD1Ev();
extern void _ZN10S1200C8_ntD0Ev();
extern void _ZN10S1200C3_nt3v13Ev();
extern void _ZN10S1200C8_nt3v35Ev();
extern void _ZN10S1200C8_nt3v36Ev();
extern void _ZN10S1200C8_nt3v37Ev();
extern void _ZN10S1200C8_nt3v38Ev();
extern void _ZN10S1200C8_nt3v39Ev();
extern void _ZN10S1200C8_nt3v40Ev();
extern void _ZN10S1200C8_nt3v41Ev();
extern void _ZN10S1200C8_nt3v42Ev();
static  VTBL_ENTRY vtc_S1200C8_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S1200C8_nt[0]),
  (VTBL_ENTRY)&_ZN10S1200C8_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S1200C8_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S1200C3_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S1200C8_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S1200C8_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S1200C8_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S1200C8_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S1200C8_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S1200C8_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S1200C8_nt3v41Ev,
  (VTBL_ENTRY)&_ZN10S1200C8_nt3v42Ev,
};
extern VTBL_ENTRY _ZTI10S1200C8_nt[];
VTBL_ENTRY *P__ZTI10S1200C8_nt = _ZTI10S1200C8_nt; 
extern  VTBL_ENTRY _ZTV10S1200C8_nt[];
Class_Descriptor cd_S1200C8_nt = {  "S1200C8_nt", // class name
  bases_S1200C8_nt, 2,
  &(vtc_S1200C8_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S1200C8_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S1200C8_nt),13, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1200C10_nt  {
  short s1200c10f0;
  int s1200c10f1;
  void *s1200c10f2;
  int s1200c10f3;
};
//SIG(1 S1200C10_nt) C1{ Fs Fi Fp Fi}



//skip512 S1200C10_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

union  S1200C9_nt  {
  short s1200c9f0[15];
  ::S1200C10_nt s1200c9f1;
};
//SIG(1 S1200C9_nt) U1{ Fs[15] FC2{ Fs Fi Fp Fi}}

#endif // __cplusplus
#ifdef __cplusplus

struct  S1200C7_nt  : S1200C8_nt {
  char s1200c7f0[2];
  ::S1200C9_nt s1200c7f1;
  virtual  ~S1200C7_nt(); // _ZN10S1200C7_ntD1Ev
  virtual void  v26(); // _ZN10S1200C7_nt3v26Ev
  virtual void  v27(); // _ZN10S1200C7_nt3v27Ev
  virtual void  v28(); // _ZN10S1200C7_nt3v28Ev
  virtual void  v29(); // _ZN10S1200C7_nt3v29Ev
  virtual void  v30(); // _ZN10S1200C7_nt3v30Ev
  virtual void  v31(); // _ZN10S1200C7_nt3v31Ev
  virtual void  v32(); // _ZN10S1200C7_nt3v32Ev
  virtual void  v33(); // _ZN10S1200C7_nt3v33Ev
  virtual void  v34(); // _ZN10S1200C7_nt3v34Ev
  S1200C7_nt(); // tgen
};
//SIG(-1 S1200C7_nt) C1{ BC2{ BC3{ BC4{ m} vd v10} vd v11 v12 v13 v14 v15 v16 v17 v18} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 Fc[2] FU5{ Fs[15] FC6{ Fs Fi Fp Fi}}}


 S1200C7_nt ::~S1200C7_nt(){ note_dtor("S1200C7_nt", this);}
void  S1200C7_nt ::v26(){vfunc_called(this, "_ZN10S1200C7_nt3v26Ev");}
void  S1200C7_nt ::v27(){vfunc_called(this, "_ZN10S1200C7_nt3v27Ev");}
void  S1200C7_nt ::v28(){vfunc_called(this, "_ZN10S1200C7_nt3v28Ev");}
void  S1200C7_nt ::v29(){vfunc_called(this, "_ZN10S1200C7_nt3v29Ev");}
void  S1200C7_nt ::v30(){vfunc_called(this, "_ZN10S1200C7_nt3v30Ev");}
void  S1200C7_nt ::v31(){vfunc_called(this, "_ZN10S1200C7_nt3v31Ev");}
void  S1200C7_nt ::v32(){vfunc_called(this, "_ZN10S1200C7_nt3v32Ev");}
void  S1200C7_nt ::v33(){vfunc_called(this, "_ZN10S1200C7_nt3v33Ev");}
void  S1200C7_nt ::v34(){vfunc_called(this, "_ZN10S1200C7_nt3v34Ev");}
S1200C7_nt ::S1200C7_nt(){ note_ctor("S1200C7_nt", this);} // tgen

//skip512 S1200C7_nt

#else // __cplusplus

extern void _ZN10S1200C7_ntC1Ev();
extern void _ZN10S1200C7_ntD1Ev();
Name_Map name_map_S1200C7_nt[] = {
  NSPAIR(_ZN10S1200C7_ntC1Ev),
  NSPAIR(_ZN10S1200C7_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3352C21_nt;
extern VTBL_ENTRY _ZTI11S3352C21_nt[];
extern Class_Descriptor cd_S1200C3_nt;
extern VTBL_ENTRY _ZTI10S1200C3_nt[];
extern  VTBL_ENTRY _ZTV10S1200C3_nt[];
extern Class_Descriptor cd_S1200C8_nt;
extern VTBL_ENTRY _ZTI10S1200C8_nt[];
extern  VTBL_ENTRY _ZTV10S1200C8_nt[];
static Base_Class bases_S1200C7_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3352C21_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1200C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S1200C8_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI10S1200C7_nt[];
extern void _ZN10S1200C7_ntD1Ev();
extern void _ZN10S1200C7_ntD0Ev();
extern void _ZN10S1200C3_nt3v13Ev();
extern void _ZN10S1200C8_nt3v35Ev();
extern void _ZN10S1200C8_nt3v36Ev();
extern void _ZN10S1200C8_nt3v37Ev();
extern void _ZN10S1200C8_nt3v38Ev();
extern void _ZN10S1200C8_nt3v39Ev();
extern void _ZN10S1200C8_nt3v40Ev();
extern void _ZN10S1200C8_nt3v41Ev();
extern void _ZN10S1200C8_nt3v42Ev();
extern void _ZN10S1200C7_nt3v26Ev();
extern void _ZN10S1200C7_nt3v27Ev();
extern void _ZN10S1200C7_nt3v28Ev();
extern void _ZN10S1200C7_nt3v29Ev();
extern void _ZN10S1200C7_nt3v30Ev();
extern void _ZN10S1200C7_nt3v31Ev();
extern void _ZN10S1200C7_nt3v32Ev();
extern void _ZN10S1200C7_nt3v33Ev();
extern void _ZN10S1200C7_nt3v34Ev();
static  VTBL_ENTRY vtc_S1200C7_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S1200C7_nt[0]),
  (VTBL_ENTRY)&_ZN10S1200C7_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S1200C7_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S1200C3_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S1200C8_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S1200C8_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S1200C8_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S1200C8_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S1200C8_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S1200C8_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S1200C8_nt3v41Ev,
  (VTBL_ENTRY)&_ZN10S1200C8_nt3v42Ev,
  (VTBL_ENTRY)&_ZN10S1200C7_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S1200C7_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S1200C7_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S1200C7_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S1200C7_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S1200C7_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S1200C7_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S1200C7_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S1200C7_nt3v34Ev,
};
extern VTBL_ENTRY _ZTI10S1200C7_nt[];
VTBL_ENTRY *P__ZTI10S1200C7_nt = _ZTI10S1200C7_nt; 
extern  VTBL_ENTRY _ZTV10S1200C7_nt[];
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1200C1  : S1200C2_nt , S1200C5 , S1200C6_nt {
  ::S1200C7_nt s1200c1f0;
  void *s1200c1f1;
  int s1200c1f2;
  int s1200c1f3;
  int s1200c1f4;
  virtual  ~S1200C1(); // _ZN7S1200C1D1Ev
  virtual void  v1(); // _ZN7S1200C12v1Ev
  virtual void  v2(); // _ZN7S1200C12v2Ev
  virtual void  v3(); // _ZN7S1200C12v3Ev
  virtual void  v4(); // _ZN7S1200C12v4Ev
  virtual void  v5(); // _ZN7S1200C12v5Ev
  virtual void  v6(); // _ZN7S1200C12v6Ev
  virtual void  v7(); // _ZN7S1200C12v7Ev
  virtual void  v8(); // _ZN7S1200C12v8Ev
  virtual void  v9(); // _ZN7S1200C12v9Ev
  virtual void  v10(); // _ZN7S1200C13v10Ev
  virtual void  v11(); // _ZN7S1200C13v11Ev
  virtual void  v12(); // _ZN7S1200C13v12Ev
  S1200C1(); // tgen
};
//SIG(1 S1200C1) C1{ BC2{ BC3{ BC4{ m} vd v13} vd v14 v15 v16 v17 v18} BC5{ vd v19 v20 v21 v22} BC6{ vd v23 v24 v25} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 FC7{ BC8{ BC3 vd v35 v36 v37 v38 v39 v40 v41 v42} vd v26 v27 v28 v29 v30 v31 v32 v33 v34 Fc[2] FU9{ Fs[15] FC10{ Fs Fi Fp Fi}}} Fp Fi Fi Fi}


 S1200C1 ::~S1200C1(){ note_dtor("S1200C1", this);}
void  S1200C1 ::v1(){vfunc_called(this, "_ZN7S1200C12v1Ev");}
void  S1200C1 ::v2(){vfunc_called(this, "_ZN7S1200C12v2Ev");}
void  S1200C1 ::v3(){vfunc_called(this, "_ZN7S1200C12v3Ev");}
void  S1200C1 ::v4(){vfunc_called(this, "_ZN7S1200C12v4Ev");}
void  S1200C1 ::v5(){vfunc_called(this, "_ZN7S1200C12v5Ev");}
void  S1200C1 ::v6(){vfunc_called(this, "_ZN7S1200C12v6Ev");}
void  S1200C1 ::v7(){vfunc_called(this, "_ZN7S1200C12v7Ev");}
void  S1200C1 ::v8(){vfunc_called(this, "_ZN7S1200C12v8Ev");}
void  S1200C1 ::v9(){vfunc_called(this, "_ZN7S1200C12v9Ev");}
void  S1200C1 ::v10(){vfunc_called(this, "_ZN7S1200C13v10Ev");}
void  S1200C1 ::v11(){vfunc_called(this, "_ZN7S1200C13v11Ev");}
void  S1200C1 ::v12(){vfunc_called(this, "_ZN7S1200C13v12Ev");}
S1200C1 ::S1200C1(){ note_ctor("S1200C1", this);} // tgen

static void Test_S1200C1()
{
  extern Class_Descriptor cd_S1200C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,18)];
    init_test(&cd_S1200C1, buf);
    S1200C1 *dp, &lv = *(dp=new (buf) S1200C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,68), "sizeof(S1200C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1200C1)");
    check_base_class_offset(lv, (S3352C21_nt*)(S1200C3_nt*)(S1200C2_nt*), 0, "S1200C1");
    check_base_class_offset(lv, (S1200C3_nt*)(S1200C2_nt*), 0, "S1200C1");
    check_base_class_offset(lv, (S1200C2_nt*), 0, "S1200C1");
    check_base_class_offset(lv, (S1200C5*), ABISELECT(8,4), "S1200C1");
    check_base_class_offset(lv, (S1200C6_nt*), ABISELECT(16,8), "S1200C1");
    check_field_offset(lv, s1200c1f0, ABISELECT(24,12), "S1200C1.s1200c1f0");
    check_field_offset(lv, s1200c1f1, ABISELECT(72,52), "S1200C1.s1200c1f1");
    check_field_offset(lv, s1200c1f2, ABISELECT(80,56), "S1200C1.s1200c1f2");
    check_field_offset(lv, s1200c1f3, ABISELECT(84,60), "S1200C1.s1200c1f3");
    check_field_offset(lv, s1200c1f4, ABISELECT(88,64), "S1200C1.s1200c1f4");
    test_class_info(&lv, &cd_S1200C1);
    dp->~S1200C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1200C1(Test_S1200C1, "S1200C1", ABISELECT(96,68));

#else // __cplusplus

extern void _ZN7S1200C1C1Ev();
extern void _ZN7S1200C1D1Ev();
Name_Map name_map_S1200C1[] = {
  NSPAIR(_ZN7S1200C1C1Ev),
  NSPAIR(_ZN7S1200C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3352C21_nt;
extern VTBL_ENTRY _ZTI11S3352C21_nt[];
extern Class_Descriptor cd_S1200C3_nt;
extern VTBL_ENTRY _ZTI10S1200C3_nt[];
extern  VTBL_ENTRY _ZTV10S1200C3_nt[];
extern Class_Descriptor cd_S1200C2_nt;
extern VTBL_ENTRY _ZTI10S1200C2_nt[];
extern  VTBL_ENTRY _ZTV10S1200C2_nt[];
extern Class_Descriptor cd_S1200C5;
extern VTBL_ENTRY _ZTI7S1200C5[];
extern  VTBL_ENTRY _ZTV7S1200C5[];
extern Class_Descriptor cd_S1200C6_nt;
extern VTBL_ENTRY _ZTI10S1200C6_nt[];
extern  VTBL_ENTRY _ZTV10S1200C6_nt[];
static Base_Class bases_S1200C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3352C21_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1200C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S1200C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S1200C5,    ABISELECT(8,4), //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
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S1200C6_nt,    ABISELECT(16,8), //bcp->offset
    30, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1200C1[];
extern void _ZN7S1200C1D1Ev();
extern void _ZN7S1200C1D0Ev();
extern void _ZN10S1200C3_nt3v13Ev();
extern void _ZN10S1200C2_nt3v14Ev();
extern void _ZN10S1200C2_nt3v15Ev();
extern void _ZN10S1200C2_nt3v16Ev();
extern void _ZN10S1200C2_nt3v17Ev();
extern void _ZN10S1200C2_nt3v18Ev();
extern void _ZN7S1200C12v1Ev();
extern void _ZN7S1200C12v2Ev();
extern void _ZN7S1200C12v3Ev();
extern void _ZN7S1200C12v4Ev();
extern void _ZN7S1200C12v5Ev();
extern void _ZN7S1200C12v6Ev();
extern void _ZN7S1200C12v7Ev();
extern void _ZN7S1200C12v8Ev();
extern void _ZN7S1200C12v9Ev();
extern void _ZN7S1200C13v10Ev();
extern void _ZN7S1200C13v11Ev();
extern void _ZN7S1200C13v12Ev();
extern void ABISELECT(_ZThn8_N7S1200C1D1Ev,_ZThn4_N7S1200C1D1Ev)();
extern void ABISELECT(_ZThn8_N7S1200C1D0Ev,_ZThn4_N7S1200C1D0Ev)();
extern void _ZN7S1200C53v19Ev();
extern void _ZN7S1200C53v20Ev();
extern void _ZN7S1200C53v21Ev();
extern void _ZN7S1200C53v22Ev();
extern void ABISELECT(_ZThn16_N7S1200C1D1Ev,_ZThn8_N7S1200C1D1Ev)();
extern void ABISELECT(_ZThn16_N7S1200C1D0Ev,_ZThn8_N7S1200C1D0Ev)();
extern void _ZN10S1200C6_nt3v23Ev();
extern void _ZN10S1200C6_nt3v24Ev();
extern void _ZN10S1200C6_nt3v25Ev();
static  VTBL_ENTRY vtc_S1200C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1200C1[0]),
  (VTBL_ENTRY)&_ZN7S1200C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1200C1D0Ev,
  (VTBL_ENTRY)&_ZN10S1200C3_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S1200C2_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S1200C2_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S1200C2_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S1200C2_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S1200C2_nt3v18Ev,
  (VTBL_ENTRY)&_ZN7S1200C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1200C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1200C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1200C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1200C12v5Ev,
  (VTBL_ENTRY)&_ZN7S1200C12v6Ev,
  (VTBL_ENTRY)&_ZN7S1200C12v7Ev,
  (VTBL_ENTRY)&_ZN7S1200C12v8Ev,
  (VTBL_ENTRY)&_ZN7S1200C12v9Ev,
  (VTBL_ENTRY)&_ZN7S1200C13v10Ev,
  (VTBL_ENTRY)&_ZN7S1200C13v11Ev,
  (VTBL_ENTRY)&_ZN7S1200C13v12Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S1200C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S1200C1D1Ev,_ZThn4_N7S1200C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S1200C1D0Ev,_ZThn4_N7S1200C1D0Ev),
  (VTBL_ENTRY)&_ZN7S1200C53v19Ev,
  (VTBL_ENTRY)&_ZN7S1200C53v20Ev,
  (VTBL_ENTRY)&_ZN7S1200C53v21Ev,
  (VTBL_ENTRY)&_ZN7S1200C53v22Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S1200C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S1200C1D1Ev,_ZThn8_N7S1200C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S1200C1D0Ev,_ZThn8_N7S1200C1D0Ev),
  (VTBL_ENTRY)&_ZN10S1200C6_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S1200C6_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S1200C6_nt3v25Ev,
};
extern VTBL_ENTRY _ZTI7S1200C1[];
extern  VTBL_ENTRY _ZTV7S1200C1[];
Class_Descriptor cd_S1200C1 = {  "S1200C1", // class name
  bases_S1200C1, 5,
  &(vtc_S1200C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,68), // object size
  NSPAIRA(_ZTI7S1200C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S1200C1),37, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4827C3_nt  {
  ::S2120C20_nt s4827c3f0;
  int s4827c3f1[2];
  char s4827c3f2;
  virtual  ~S4827C3_nt(); // _ZN10S4827C3_ntD1Ev
  virtual void  v3(); // _ZN10S4827C3_nt2v3Ev
  virtual void  v4(); // _ZN10S4827C3_nt2v4Ev
  virtual void  v5(); // _ZN10S4827C3_nt2v5Ev
  S4827C3_nt(); // tgen
};
//SIG(-1 S4827C3_nt) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4827C3_nt ::~S4827C3_nt(){ note_dtor("S4827C3_nt", this);}
void  S4827C3_nt ::v3(){vfunc_called(this, "_ZN10S4827C3_nt2v3Ev");}
void  S4827C3_nt ::v4(){vfunc_called(this, "_ZN10S4827C3_nt2v4Ev");}
void  S4827C3_nt ::v5(){vfunc_called(this, "_ZN10S4827C3_nt2v5Ev");}
S4827C3_nt ::S4827C3_nt(){ note_ctor("S4827C3_nt", this);} // tgen

//skip512 S4827C3_nt

#else // __cplusplus

extern void _ZN10S4827C3_ntC1Ev();
extern void _ZN10S4827C3_ntD1Ev();
Name_Map name_map_S4827C3_nt[] = {
  NSPAIR(_ZN10S4827C3_ntC1Ev),
  NSPAIR(_ZN10S4827C3_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S4827C3_nt[];
extern void _ZN10S4827C3_ntD1Ev();
extern void _ZN10S4827C3_ntD0Ev();
extern void _ZN10S4827C3_nt2v3Ev();
extern void _ZN10S4827C3_nt2v4Ev();
extern void _ZN10S4827C3_nt2v5Ev();
static  VTBL_ENTRY vtc_S4827C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S4827C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S4827C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S4827C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S4827C3_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S4827C3_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S4827C3_nt2v5Ev,
};
extern VTBL_ENTRY _ZTI10S4827C3_nt[];
VTBL_ENTRY *P__ZTI10S4827C3_nt = _ZTI10S4827C3_nt; 
extern  VTBL_ENTRY _ZTV10S4827C3_nt[];
Class_Descriptor cd_S4827C3_nt = {  "S4827C3_nt", // class name
  0,0,//no base classes
  &(vtc_S4827C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI10S4827C3_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S4827C3_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  S4827C2_nt  : S4827C3_nt {
  void *s4827c2f0[3];
  __tsi64 s4827c2f1;
  virtual  ~S4827C2_nt(); // _ZN10S4827C2_ntD1Ev
  virtual void  v6(); // _ZN10S4827C2_nt2v6Ev
  virtual void  v7(); // _ZN10S4827C2_nt2v7Ev
  S4827C2_nt(); // tgen
};
//SIG(-1 S4827C2_nt) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} vd v1 v2 Fp[3] FL}


 S4827C2_nt ::~S4827C2_nt(){ note_dtor("S4827C2_nt", this);}
void  S4827C2_nt ::v6(){vfunc_called(this, "_ZN10S4827C2_nt2v6Ev");}
void  S4827C2_nt ::v7(){vfunc_called(this, "_ZN10S4827C2_nt2v7Ev");}
S4827C2_nt ::S4827C2_nt(){ note_ctor("S4827C2_nt", this);} // tgen

//skip512 S4827C2_nt

#else // __cplusplus

extern void _ZN10S4827C2_ntC1Ev();
extern void _ZN10S4827C2_ntD1Ev();
Name_Map name_map_S4827C2_nt[] = {
  NSPAIR(_ZN10S4827C2_ntC1Ev),
  NSPAIR(_ZN10S4827C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4827C3_nt;
extern VTBL_ENTRY _ZTI10S4827C3_nt[];
extern  VTBL_ENTRY _ZTV10S4827C3_nt[];
static Base_Class bases_S4827C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4827C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S4827C2_nt[];
extern void _ZN10S4827C2_ntD1Ev();
extern void _ZN10S4827C2_ntD0Ev();
extern void _ZN10S4827C3_nt2v3Ev();
extern void _ZN10S4827C3_nt2v4Ev();
extern void _ZN10S4827C3_nt2v5Ev();
extern void _ZN10S4827C2_nt2v6Ev();
extern void _ZN10S4827C2_nt2v7Ev();
static  VTBL_ENTRY vtc_S4827C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S4827C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S4827C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S4827C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S4827C3_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S4827C3_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S4827C3_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S4827C2_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S4827C2_nt2v7Ev,
};
extern VTBL_ENTRY _ZTI10S4827C2_nt[];
VTBL_ENTRY *P__ZTI10S4827C2_nt = _ZTI10S4827C2_nt; 
extern  VTBL_ENTRY _ZTV10S4827C2_nt[];
Class_Descriptor cd_S4827C2_nt = {  "S4827C2_nt", // class name
  bases_S4827C2_nt, 1,
  &(vtc_S4827C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI10S4827C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S4827C2_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  S4827C8_nt  {
  __tsi64 s4827c8f0[2];
  char s4827c8f1;
  int s4827c8f2;
  ::S2120C20_nt s4827c8f3;
  ::S2120C20_nt s4827c8f4;
  ::S2120C20_nt s4827c8f5;
  ::S2120C20_nt s4827c8f6;
  ::S2120C20_nt s4827c8f7;
  ::S2120C20_nt s4827c8f8;
  ::S2120C20_nt s4827c8f9;
  ::S2120C20_nt s4827c8f10;
  ::S2120C20_nt s4827c8f11;
  ::S2120C20_nt s4827c8f12;
  ::S2120C20_nt s4827c8f13;
  ::S2120C20_nt s4827c8f14;
  int s4827c8f15[3];
  ::S2120C20_nt s4827c8f16;
  ::S2120C20_nt s4827c8f17;
  ::S2120C20_nt s4827c8f18;
  __tsi64 s4827c8f19[2];
  int s4827c8f20[4];
  ::S2120C20_nt s4827c8f21;
  ::S2120C20_nt s4827c8f22;
  int s4827c8f23[2];
  __tsi64 s4827c8f24;
  int s4827c8f25[5];
  __tsi64 s4827c8f26;
  char s4827c8f27;
  void  mf4827c8(); // _ZN10S4827C8_nt8mf4827c8Ev
};
//SIG(-1 S4827C8_nt) C1{ m FL[2] Fc Fi FC2{ m Fp Fi FC3{ m}} FC2 FC2 FC2 FC2 FC2 FC2 FC2 FC2 FC2 FC2 FC2 Fi[3] FC2 FC2 FC2 FL[2] Fi[4] FC2 FC2 Fi[2] FL Fi[5] FL Fc}


void  S4827C8_nt ::mf4827c8(){}

//skip512 S4827C8_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4827C7  {
  int s4827c7f0[4];
  ::S4827C8_nt s4827c7f1;
  ::S2120C20_nt s4827c7f2;
  ::S885C13_nt s4827c7f3;
  void  mf4827c7(); // _ZN7S4827C78mf4827c7Ev
};
//SIG(-1 S4827C7) C1{ m Fi[4] FC2{ m FL[2] Fc Fi FC3{ m Fp Fi FC4{ m}} FC3 FC3 FC3 FC3 FC3 FC3 FC3 FC3 FC3 FC3 FC3 Fi[3] FC3 FC3 FC3 FL[2] Fi[4] FC3 FC3 Fi[2] FL Fi[5] FL Fc} FC3 FC5{ m Fp}}


void  S4827C7 ::mf4827c7(){}

static void Test_S4827C7()
{
  {
    init_simple_test("S4827C7");
    S4827C7 lv;
    check2(sizeof(lv), ABISELECT(440,352), "sizeof(S4827C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4827C7)");
    check_field_offset(lv, s4827c7f0, 0, "S4827C7.s4827c7f0");
    check_field_offset(lv, s4827c7f1, 16, "S4827C7.s4827c7f1");
    check_field_offset(lv, s4827c7f2, ABISELECT(416,336), "S4827C7.s4827c7f2");
    check_field_offset(lv, s4827c7f3, ABISELECT(432,348), "S4827C7.s4827c7f3");
  }
}
static Arrange_To_Call_Me vS4827C7(Test_S4827C7, "S4827C7", ABISELECT(440,352));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4827C1  : S4827C2_nt {
  ::S885C13_nt s4827c1f0;
  void *s4827c1f1;
  ::S2120C20_nt s4827c1f2;
  void *s4827c1f3;
  ::S2120C20_nt s4827c1f4;
  ::S2120C20_nt s4827c1f5;
  int s4827c1f6;
  ::S4827C7 s4827c1f7;
  int s4827c1f8[2];
  virtual  ~S4827C1(); // _ZN7S4827C1D1Ev
  virtual void  v1(); // _ZN7S4827C12v1Ev
  virtual void  v2(); // _ZN7S4827C12v2Ev
  S4827C1(); // tgen
};
//SIG(1 S4827C1) C1{ BC2{ BC3{ vd v3 v4 v5 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} vd v6 v7 Fp[3] FL} vd v1 v2 FC6{ m Fp} Fp FC4 Fp FC4 FC4 Fi FC7{ m Fi[4] FC8{ m FL[2] Fc Fi FC4 FC4 FC4 FC4 FC4 FC4 FC4 FC4 FC4 FC4 FC4 FC4 Fi[3] FC4 FC4 FC4 FL[2] Fi[4] FC4 FC4 Fi[2] FL Fi[5] FL Fc} FC4 FC6} Fi[2]}


 S4827C1 ::~S4827C1(){ note_dtor("S4827C1", this);}
void  S4827C1 ::v1(){vfunc_called(this, "_ZN7S4827C12v1Ev");}
void  S4827C1 ::v2(){vfunc_called(this, "_ZN7S4827C12v2Ev");}
S4827C1 ::S4827C1(){ note_ctor("S4827C1", this);} // tgen

static void Test_S4827C1()
{
  extern Class_Descriptor cd_S4827C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(76,116)];
    init_test(&cd_S4827C1, buf);
    S4827C1 *dp, &lv = *(dp=new (buf) S4827C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(600,460), "sizeof(S4827C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4827C1)");
    check_base_class_offset(lv, (S4827C3_nt*)(S4827C2_nt*), 0, "S4827C1");
    check_base_class_offset(lv, (S4827C2_nt*), 0, "S4827C1");
    check_field_offset(lv, s4827c1f0, ABISELECT(72,48), "S4827C1.s4827c1f0");
    check_field_offset(lv, s4827c1f1, ABISELECT(80,52), "S4827C1.s4827c1f1");
    check_field_offset(lv, s4827c1f2, ABISELECT(88,56), "S4827C1.s4827c1f2");
    check_field_offset(lv, s4827c1f3, ABISELECT(104,68), "S4827C1.s4827c1f3");
    check_field_offset(lv, s4827c1f4, ABISELECT(112,72), "S4827C1.s4827c1f4");
    check_field_offset(lv, s4827c1f5, ABISELECT(128,84), "S4827C1.s4827c1f5");
    check_field_offset(lv, s4827c1f6, ABISELECT(144,96), "S4827C1.s4827c1f6");
    check_field_offset(lv, s4827c1f7, ABISELECT(152,100), "S4827C1.s4827c1f7");
    check_field_offset(lv, s4827c1f8, ABISELECT(592,452), "S4827C1.s4827c1f8");
    test_class_info(&lv, &cd_S4827C1);
    dp->~S4827C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4827C1(Test_S4827C1, "S4827C1", ABISELECT(600,460));

#else // __cplusplus

extern void _ZN7S4827C1C1Ev();
extern void _ZN7S4827C1D1Ev();
Name_Map name_map_S4827C1[] = {
  NSPAIR(_ZN7S4827C1C1Ev),
  NSPAIR(_ZN7S4827C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4827C3_nt;
extern VTBL_ENTRY _ZTI10S4827C3_nt[];
extern  VTBL_ENTRY _ZTV10S4827C3_nt[];
extern Class_Descriptor cd_S4827C2_nt;
extern VTBL_ENTRY _ZTI10S4827C2_nt[];
extern  VTBL_ENTRY _ZTV10S4827C2_nt[];
static Base_Class bases_S4827C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4827C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4827C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S4827C1[];
extern void _ZN7S4827C1D1Ev();
extern void _ZN7S4827C1D0Ev();
extern void _ZN10S4827C3_nt2v3Ev();
extern void _ZN10S4827C3_nt2v4Ev();
extern void _ZN10S4827C3_nt2v5Ev();
extern void _ZN10S4827C2_nt2v6Ev();
extern void _ZN10S4827C2_nt2v7Ev();
extern void _ZN7S4827C12v1Ev();
extern void _ZN7S4827C12v2Ev();
static  VTBL_ENTRY vtc_S4827C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4827C1[0]),
  (VTBL_ENTRY)&_ZN7S4827C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4827C1D0Ev,
  (VTBL_ENTRY)&_ZN10S4827C3_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S4827C3_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S4827C3_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S4827C2_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S4827C2_nt2v7Ev,
  (VTBL_ENTRY)&_ZN7S4827C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4827C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S4827C1[];
extern  VTBL_ENTRY _ZTV7S4827C1[];
Class_Descriptor cd_S4827C1 = {  "S4827C1", // class name
  bases_S4827C1, 2,
  &(vtc_S4827C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(600,460), // object size
  NSPAIRA(_ZTI7S4827C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4827C1),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20555C5  {
  virtual  ~S20555C5(); // _ZN8S20555C5D1Ev
  virtual void  v12(); // _ZN8S20555C53v12Ev
  virtual void  v13(); // _ZN8S20555C53v13Ev
  virtual void  v14(); // _ZN8S20555C53v14Ev
  virtual void  v15(); // _ZN8S20555C53v15Ev
  virtual void  v16(); // _ZN8S20555C53v16Ev
  virtual void  v17(); // _ZN8S20555C53v17Ev
  S20555C5(); // tgen
};
//SIG(-1 S20555C5) C1{ vd v1 v2 v3 v4 v5 v6}


 S20555C5 ::~S20555C5(){ note_dtor("S20555C5", this);}
void  S20555C5 ::v12(){vfunc_called(this, "_ZN8S20555C53v12Ev");}
void  S20555C5 ::v13(){vfunc_called(this, "_ZN8S20555C53v13Ev");}
void  S20555C5 ::v14(){vfunc_called(this, "_ZN8S20555C53v14Ev");}
void  S20555C5 ::v15(){vfunc_called(this, "_ZN8S20555C53v15Ev");}
void  S20555C5 ::v16(){vfunc_called(this, "_ZN8S20555C53v16Ev");}
void  S20555C5 ::v17(){vfunc_called(this, "_ZN8S20555C53v17Ev");}
S20555C5 ::S20555C5(){ note_ctor("S20555C5", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S20555C5C1Ev();
extern void _ZN8S20555C5D1Ev();
Name_Map name_map_S20555C5[] = {
  NSPAIR(_ZN8S20555C5C1Ev),
  NSPAIR(_ZN8S20555C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20555C5[];
extern void _ZN8S20555C5D1Ev();
extern void _ZN8S20555C5D0Ev();
extern void _ZN8S20555C53v12Ev();
extern void _ZN8S20555C53v13Ev();
extern void _ZN8S20555C53v14Ev();
extern void _ZN8S20555C53v15Ev();
extern void _ZN8S20555C53v16Ev();
extern void _ZN8S20555C53v17Ev();
static  VTBL_ENTRY vtc_S20555C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20555C5[0]),
  (VTBL_ENTRY)&_ZN8S20555C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20555C5D0Ev,
  (VTBL_ENTRY)&_ZN8S20555C53v12Ev,
  (VTBL_ENTRY)&_ZN8S20555C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20555C53v14Ev,
  (VTBL_ENTRY)&_ZN8S20555C53v15Ev,
  (VTBL_ENTRY)&_ZN8S20555C53v16Ev,
  (VTBL_ENTRY)&_ZN8S20555C53v17Ev,
};
extern VTBL_ENTRY _ZTI8S20555C5[];
extern  VTBL_ENTRY _ZTV8S20555C5[];
Class_Descriptor cd_S20555C5 = {  "S20555C5", // class name
  0,0,//no base classes
  &(vtc_S20555C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20555C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20555C5),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20555C4  {
  ::S20555C5 s20555c4f0;
  int s20555c4f1;
  virtual void  v6(); // _ZN8S20555C42v6Ev
  virtual void  v7(); // _ZN8S20555C42v7Ev
  virtual void  v8(); // _ZN8S20555C42v8Ev
  virtual void  v9(); // _ZN8S20555C42v9Ev
  virtual void  v10(); // _ZN8S20555C43v10Ev
  virtual void  v11(); // _ZN8S20555C43v11Ev
  ~S20555C4(); // tgen
  S20555C4(); // tgen
};
//SIG(-1 S20555C4) C1{ v1 v2 v3 v4 v5 v6 FC2{ vd v7 v8 v9 v10 v11 v12} Fi}


void  S20555C4 ::v6(){vfunc_called(this, "_ZN8S20555C42v6Ev");}
void  S20555C4 ::v7(){vfunc_called(this, "_ZN8S20555C42v7Ev");}
void  S20555C4 ::v8(){vfunc_called(this, "_ZN8S20555C42v8Ev");}
void  S20555C4 ::v9(){vfunc_called(this, "_ZN8S20555C42v9Ev");}
void  S20555C4 ::v10(){vfunc_called(this, "_ZN8S20555C43v10Ev");}
void  S20555C4 ::v11(){vfunc_called(this, "_ZN8S20555C43v11Ev");}
S20555C4 ::~S20555C4(){ note_dtor("S20555C4", this);} // tgen
S20555C4 ::S20555C4(){ note_ctor("S20555C4", this);} // tgen

static void Test_S20555C4()
{
  extern Class_Descriptor cd_S20555C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S20555C4, buf);
    S20555C4 *dp, &lv = *(dp=new (buf) S20555C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S20555C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20555C4)");
    check_field_offset(lv, s20555c4f0, ABISELECT(8,4), "S20555C4.s20555c4f0");
    check_field_offset(lv, s20555c4f1, ABISELECT(16,8), "S20555C4.s20555c4f1");
    test_class_info(&lv, &cd_S20555C4);
    dp->~S20555C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20555C4(Test_S20555C4, "S20555C4", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S20555C4C1Ev();
extern void _ZN8S20555C4D1Ev();
Name_Map name_map_S20555C4[] = {
  NSPAIR(_ZN8S20555C4C1Ev),
  NSPAIR(_ZN8S20555C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20555C4[];
extern void _ZN8S20555C42v6Ev();
extern void _ZN8S20555C42v7Ev();
extern void _ZN8S20555C42v8Ev();
extern void _ZN8S20555C42v9Ev();
extern void _ZN8S20555C43v10Ev();
extern void _ZN8S20555C43v11Ev();
static  VTBL_ENTRY vtc_S20555C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20555C4[0]),
  (VTBL_ENTRY)&_ZN8S20555C42v6Ev,
  (VTBL_ENTRY)&_ZN8S20555C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20555C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20555C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20555C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20555C43v11Ev,
};
extern VTBL_ENTRY _ZTI8S20555C4[];
extern  VTBL_ENTRY _ZTV8S20555C4[];
Class_Descriptor cd_S20555C4 = {  "S20555C4", // class name
  0,0,//no base classes
  &(vtc_S20555C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S20555C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20555C4),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  S20555C3  : S20555C4 , S20555C5 {
  virtual  ~S20555C3(); // _ZN8S20555C3D1Ev
  virtual void  v18(); // _ZN8S20555C33v18Ev
  virtual void  v19(); // _ZN8S20555C33v19Ev
  virtual void  v20(); // _ZN8S20555C33v20Ev
  virtual void  v21(); // _ZN8S20555C33v21Ev
  virtual void  v22(); // _ZN8S20555C33v22Ev
  S20555C3(); // tgen
};
//SIG(-1 S20555C3) C1{ BC2{ v6 v7 v8 v9 v10 v11 FC3{ vd v12 v13 v14 v15 v16 v17} Fi} BC3 vd v1 v2 v3 v4 v5}


 S20555C3 ::~S20555C3(){ note_dtor("S20555C3", this);}
void  S20555C3 ::v18(){vfunc_called(this, "_ZN8S20555C33v18Ev");}
void  S20555C3 ::v19(){vfunc_called(this, "_ZN8S20555C33v19Ev");}
void  S20555C3 ::v20(){vfunc_called(this, "_ZN8S20555C33v20Ev");}
void  S20555C3 ::v21(){vfunc_called(this, "_ZN8S20555C33v21Ev");}
void  S20555C3 ::v22(){vfunc_called(this, "_ZN8S20555C33v22Ev");}
S20555C3 ::S20555C3(){ note_ctor("S20555C3", this);} // tgen

static void Test_S20555C3()
{
  extern Class_Descriptor cd_S20555C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S20555C3, buf);
    S20555C3 *dp, &lv = *(dp=new (buf) S20555C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S20555C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20555C3)");
    check_base_class_offset(lv, (S20555C4*), 0, "S20555C3");
    check_base_class_offset(lv, (S20555C5*), ABISELECT(24,12), "S20555C3");
    test_class_info(&lv, &cd_S20555C3);
    dp->~S20555C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20555C3(Test_S20555C3, "S20555C3", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S20555C3C1Ev();
extern void _ZN8S20555C3D1Ev();
Name_Map name_map_S20555C3[] = {
  NSPAIR(_ZN8S20555C3C1Ev),
  NSPAIR(_ZN8S20555C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20555C4;
extern VTBL_ENTRY _ZTI8S20555C4[];
extern  VTBL_ENTRY _ZTV8S20555C4[];
extern Class_Descriptor cd_S20555C5;
extern VTBL_ENTRY _ZTI8S20555C5[];
extern  VTBL_ENTRY _ZTV8S20555C5[];
static Base_Class bases_S20555C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20555C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S20555C5,    ABISELECT(24,12), //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
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20555C3[];
extern void _ZN8S20555C42v6Ev();
extern void _ZN8S20555C42v7Ev();
extern void _ZN8S20555C42v8Ev();
extern void _ZN8S20555C42v9Ev();
extern void _ZN8S20555C43v10Ev();
extern void _ZN8S20555C43v11Ev();
extern void _ZN8S20555C3D1Ev();
extern void _ZN8S20555C3D0Ev();
extern void _ZN8S20555C33v18Ev();
extern void _ZN8S20555C33v19Ev();
extern void _ZN8S20555C33v20Ev();
extern void _ZN8S20555C33v21Ev();
extern void _ZN8S20555C33v22Ev();
extern void ABISELECT(_ZThn24_N8S20555C3D1Ev,_ZThn12_N8S20555C3D1Ev)();
extern void ABISELECT(_ZThn24_N8S20555C3D0Ev,_ZThn12_N8S20555C3D0Ev)();
extern void _ZN8S20555C53v12Ev();
extern void _ZN8S20555C53v13Ev();
extern void _ZN8S20555C53v14Ev();
extern void _ZN8S20555C53v15Ev();
extern void _ZN8S20555C53v16Ev();
extern void _ZN8S20555C53v17Ev();
static  VTBL_ENTRY vtc_S20555C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20555C3[0]),
  (VTBL_ENTRY)&_ZN8S20555C42v6Ev,
  (VTBL_ENTRY)&_ZN8S20555C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20555C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20555C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20555C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20555C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20555C3D1Ev,
  (VTBL_ENTRY)&_ZN8S20555C3D0Ev,
  (VTBL_ENTRY)&_ZN8S20555C33v18Ev,
  (VTBL_ENTRY)&_ZN8S20555C33v19Ev,
  (VTBL_ENTRY)&_ZN8S20555C33v20Ev,
  (VTBL_ENTRY)&_ZN8S20555C33v21Ev,
  (VTBL_ENTRY)&_ZN8S20555C33v22Ev,
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20555C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S20555C3D1Ev,_ZThn12_N8S20555C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S20555C3D0Ev,_ZThn12_N8S20555C3D0Ev),
  (VTBL_ENTRY)&_ZN8S20555C53v12Ev,
  (VTBL_ENTRY)&_ZN8S20555C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20555C53v14Ev,
  (VTBL_ENTRY)&_ZN8S20555C53v15Ev,
  (VTBL_ENTRY)&_ZN8S20555C53v16Ev,
  (VTBL_ENTRY)&_ZN8S20555C53v17Ev,
};
extern VTBL_ENTRY _ZTI8S20555C3[];
extern  VTBL_ENTRY _ZTV8S20555C3[];
Class_Descriptor cd_S20555C3 = {  "S20555C3", // class name
  bases_S20555C3, 2,
  &(vtc_S20555C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S20555C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20555C3),25, //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  S20555C6  {
  ::S601C21_nt s20555c6f0;
  void *s20555c6f1;
  virtual void  v23(); // _ZN8S20555C63v23Ev
  virtual void  v24(); // _ZN8S20555C63v24Ev
  virtual void  v25(); // _ZN8S20555C63v25Ev
  virtual void  v26(); // _ZN8S20555C63v26Ev
  virtual void  v27(); // _ZN8S20555C63v27Ev
  ~S20555C6(); // tgen
  S20555C6(); // tgen
};
//SIG(-1 S20555C6) C1{ v1 v2 v3 v4 v5 FC2{} Fp}


void  S20555C6 ::v23(){vfunc_called(this, "_ZN8S20555C63v23Ev");}
void  S20555C6 ::v24(){vfunc_called(this, "_ZN8S20555C63v24Ev");}
void  S20555C6 ::v25(){vfunc_called(this, "_ZN8S20555C63v25Ev");}
void  S20555C6 ::v26(){vfunc_called(this, "_ZN8S20555C63v26Ev");}
void  S20555C6 ::v27(){vfunc_called(this, "_ZN8S20555C63v27Ev");}
S20555C6 ::~S20555C6(){ note_dtor("S20555C6", this);} // tgen
S20555C6 ::S20555C6(){ note_ctor("S20555C6", this);} // tgen

static void Test_S20555C6()
{
  extern Class_Descriptor cd_S20555C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S20555C6, buf);
    S20555C6 *dp, &lv = *(dp=new (buf) S20555C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S20555C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20555C6)");
    check_field_offset(lv, s20555c6f0, ABISELECT(8,4), "S20555C6.s20555c6f0");
    check_field_offset(lv, s20555c6f1, ABISELECT(16,8), "S20555C6.s20555c6f1");
    test_class_info(&lv, &cd_S20555C6);
    dp->~S20555C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20555C6(Test_S20555C6, "S20555C6", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S20555C6C1Ev();
extern void _ZN8S20555C6D1Ev();
Name_Map name_map_S20555C6[] = {
  NSPAIR(_ZN8S20555C6C1Ev),
  NSPAIR(_ZN8S20555C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20555C6[];
extern void _ZN8S20555C63v23Ev();
extern void _ZN8S20555C63v24Ev();
extern void _ZN8S20555C63v25Ev();
extern void _ZN8S20555C63v26Ev();
extern void _ZN8S20555C63v27Ev();
static  VTBL_ENTRY vtc_S20555C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20555C6[0]),
  (VTBL_ENTRY)&_ZN8S20555C63v23Ev,
  (VTBL_ENTRY)&_ZN8S20555C63v24Ev,
  (VTBL_ENTRY)&_ZN8S20555C63v25Ev,
  (VTBL_ENTRY)&_ZN8S20555C63v26Ev,
  (VTBL_ENTRY)&_ZN8S20555C63v27Ev,
};
extern VTBL_ENTRY _ZTI8S20555C6[];
extern  VTBL_ENTRY _ZTV8S20555C6[];
Class_Descriptor cd_S20555C6 = {  "S20555C6", // class name
  0,0,//no base classes
  &(vtc_S20555C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S20555C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20555C6),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  S20555C2  : virtual S20555C3 , virtual S20555C6 {
  virtual  ~S20555C2(); // _ZN8S20555C2D2Ev
  virtual void  v28(); // _ZN8S20555C23v28Ev
  virtual void  v29(); // _ZN8S20555C23v29Ev
  virtual void  v30(); // _ZN8S20555C23v30Ev
  virtual void  v31(); // _ZN8S20555C23v31Ev
  virtual void  v32(); // _ZN8S20555C23v32Ev
  virtual void  v33(); // _ZN8S20555C23v33Ev
  S20555C2(); // tgen
};
//SIG(-1 S20555C2) C1{ VBC2{ BC3{ v7 v8 v9 v10 v11 v12 FC4{ vd v13 v14 v15 v16 v17 v18} Fi} BC4 vd v19 v20 v21 v22 v23} VBC5{ v24 v25 v26 v27 v28 FC6{} Fp} vd v1 v2 v3 v4 v5 v6}


 S20555C2 ::~S20555C2(){ note_dtor("S20555C2", this);}
void  S20555C2 ::v28(){vfunc_called(this, "_ZN8S20555C23v28Ev");}
void  S20555C2 ::v29(){vfunc_called(this, "_ZN8S20555C23v29Ev");}
void  S20555C2 ::v30(){vfunc_called(this, "_ZN8S20555C23v30Ev");}
void  S20555C2 ::v31(){vfunc_called(this, "_ZN8S20555C23v31Ev");}
void  S20555C2 ::v32(){vfunc_called(this, "_ZN8S20555C23v32Ev");}
void  S20555C2 ::v33(){vfunc_called(this, "_ZN8S20555C23v33Ev");}
S20555C2 ::S20555C2(){ note_ctor("S20555C2", this);} // tgen

static void Test_S20555C2()
{
  extern Class_Descriptor cd_S20555C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[9];
    init_test(&cd_S20555C2, buf);
    S20555C2 *dp, &lv = *(dp=new (buf) S20555C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S20555C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20555C2)");
    check_base_class_offset(lv, (S20555C4*)(S20555C3*), ABISELECT(8,4), "S20555C2");
    check_base_class_offset(lv, (S20555C5*)(S20555C3*), ABISELECT(32,16), "S20555C2");
    check_base_class_offset(lv, (S20555C3*), ABISELECT(8,4), "S20555C2");
    check_base_class_offset(lv, (S20555C6*), ABISELECT(40,20), "S20555C2");
    test_class_info(&lv, &cd_S20555C2);
    dp->~S20555C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20555C2(Test_S20555C2, "S20555C2", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN8S20555C2C1Ev();
extern void _ZN8S20555C2D2Ev();
Name_Map name_map_S20555C2[] = {
  NSPAIR(_ZN8S20555C2C1Ev),
  NSPAIR(_ZN8S20555C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20555C4;
extern VTBL_ENTRY _ZTI8S20555C4[];
extern  VTBL_ENTRY _ZTV8S20555C4[];
extern Class_Descriptor cd_S20555C5;
extern VTBL_ENTRY _ZTI8S20555C5[];
extern  VTBL_ENTRY _ZTV8S20555C5[];
extern Class_Descriptor cd_S20555C3;
extern VTBL_ENTRY _ZTI8S20555C3[];
extern  VTBL_ENTRY _ZTV8S20555C3[];
extern Class_Descriptor cd_S20555C6;
extern VTBL_ENTRY _ZTI8S20555C6[];
extern  VTBL_ENTRY _ZTV8S20555C6[];
static Base_Class bases_S20555C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20555C4,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20555C5,    ABISELECT(32,16), //bcp->offset
    45, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20555C3,    ABISELECT(8,4), //bcp->offset
    12, //bcp->virtual_function_table_offset
    20, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20555C6,    ABISELECT(40,20), //bcp->offset
    55, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20555C2[];
extern void _ZN8S20555C2D1Ev();
extern void _ZN8S20555C2D0Ev();
extern void _ZN8S20555C23v28Ev();
extern void _ZN8S20555C23v29Ev();
extern void _ZN8S20555C23v30Ev();
extern void _ZN8S20555C23v31Ev();
extern void _ZN8S20555C23v32Ev();
extern void _ZN8S20555C23v33Ev();
extern void _ZN8S20555C42v6Ev();
extern void _ZN8S20555C42v7Ev();
extern void _ZN8S20555C42v8Ev();
extern void _ZN8S20555C42v9Ev();
extern void _ZN8S20555C43v10Ev();
extern void _ZN8S20555C43v11Ev();
extern void ABISELECT(_ZTv0_n72_N8S20555C2D1Ev,_ZTv0_n36_N8S20555C2D1Ev)();
extern void ABISELECT(_ZThn8_N8S20555C2D1Ev,_ZThn4_N8S20555C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S20555C2D0Ev,_ZTv0_n36_N8S20555C2D0Ev)();
extern void ABISELECT(_ZThn8_N8S20555C2D0Ev,_ZThn4_N8S20555C2D0Ev)() __attribute__((weak));
extern void _ZN8S20555C33v18Ev();
extern void _ZN8S20555C33v19Ev();
extern void _ZN8S20555C33v20Ev();
extern void _ZN8S20555C33v21Ev();
extern void _ZN8S20555C33v22Ev();
extern void ABISELECT(_ZTvn24_n72_N8S20555C2D1Ev,_ZTvn12_n36_N8S20555C2D1Ev)();
extern void ABISELECT(_ZTvn24_n72_N8S20555C2D0Ev,_ZTvn12_n36_N8S20555C2D0Ev)();
extern void _ZN8S20555C53v12Ev();
extern void _ZN8S20555C53v13Ev();
extern void _ZN8S20555C53v14Ev();
extern void _ZN8S20555C53v15Ev();
extern void _ZN8S20555C53v16Ev();
extern void _ZN8S20555C53v17Ev();
extern void _ZN8S20555C63v23Ev();
extern void _ZN8S20555C63v24Ev();
extern void _ZN8S20555C63v25Ev();
extern void _ZN8S20555C63v26Ev();
extern void _ZN8S20555C63v27Ev();
static  VTBL_ENTRY vtc_S20555C2[] = {
  ABISELECT(40,20),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20555C2[0]),
  (VTBL_ENTRY)&_ZN8S20555C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20555C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20555C23v28Ev,
  (VTBL_ENTRY)&_ZN8S20555C23v29Ev,
  (VTBL_ENTRY)&_ZN8S20555C23v30Ev,
  (VTBL_ENTRY)&_ZN8S20555C23v31Ev,
  (VTBL_ENTRY)&_ZN8S20555C23v32Ev,
  (VTBL_ENTRY)&_ZN8S20555C23v33Ev,
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20555C2[0]),
  (VTBL_ENTRY)&_ZN8S20555C42v6Ev,
  (VTBL_ENTRY)&_ZN8S20555C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20555C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20555C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20555C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20555C43v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20555C2D1Ev,_ZTv0_n36_N8S20555C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20555C2D0Ev,_ZTv0_n36_N8S20555C2D0Ev),
  (VTBL_ENTRY)&_ZN8S20555C33v18Ev,
  (VTBL_ENTRY)&_ZN8S20555C33v19Ev,
  (VTBL_ENTRY)&_ZN8S20555C33v20Ev,
  (VTBL_ENTRY)&_ZN8S20555C33v21Ev,
  (VTBL_ENTRY)&_ZN8S20555C33v22Ev,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S20555C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N8S20555C2D1Ev,_ZTvn12_n36_N8S20555C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N8S20555C2D0Ev,_ZTvn12_n36_N8S20555C2D0Ev),
  (VTBL_ENTRY)&_ZN8S20555C53v12Ev,
  (VTBL_ENTRY)&_ZN8S20555C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20555C53v14Ev,
  (VTBL_ENTRY)&_ZN8S20555C53v15Ev,
  (VTBL_ENTRY)&_ZN8S20555C53v16Ev,
  (VTBL_ENTRY)&_ZN8S20555C53v17Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S20555C2[0]),
  (VTBL_ENTRY)&_ZN8S20555C63v23Ev,
  (VTBL_ENTRY)&_ZN8S20555C63v24Ev,
  (VTBL_ENTRY)&_ZN8S20555C63v25Ev,
  (VTBL_ENTRY)&_ZN8S20555C63v26Ev,
  (VTBL_ENTRY)&_ZN8S20555C63v27Ev,
};
extern VTBL_ENTRY _ZTV8S20555C2[];
static  VTT_ENTRY vtt_S20555C2[] = {
  {&(_ZTV8S20555C2[4]),  4,67},
  {&(_ZTV8S20555C2[32]),  32,67},
  {&(_ZTV8S20555C2[47]),  47,67},
  {&(_ZTV8S20555C2[62]),  62,67},
};
extern VTBL_ENTRY _ZTI8S20555C2[];
extern  VTBL_ENTRY _ZTV8S20555C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20555C2[];
static VTBL_ENTRY alt_thunk_names18[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20555C2D0Ev,_ZTv0_n36_N8S20555C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20555C2D0Ev,_ZThn4_N8S20555C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20555C2D1Ev,_ZTv0_n36_N8S20555C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20555C2D1Ev,_ZThn4_N8S20555C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20555C2 = {  "S20555C2", // class name
  bases_S20555C2, 4,
  &(vtc_S20555C2[0]), // expected_vtbl_contents
  &(vtt_S20555C2[0]), // expected_vtt_contents
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI8S20555C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20555C2),67, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20555C2),4, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names18,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20555C9  {
  ::S601C21_nt s20555c9f0;
  virtual void  v34(); // _ZN8S20555C93v34Ev
  virtual void  v35(); // _ZN8S20555C93v35Ev
  virtual void  v36(); // _ZN8S20555C93v36Ev
  virtual void  v37(); // _ZN8S20555C93v37Ev
  ~S20555C9(); // tgen
  S20555C9(); // tgen
};
//SIG(-1 S20555C9) C1{ v1 v2 v3 v4 FC2{}}


void  S20555C9 ::v34(){vfunc_called(this, "_ZN8S20555C93v34Ev");}
void  S20555C9 ::v35(){vfunc_called(this, "_ZN8S20555C93v35Ev");}
void  S20555C9 ::v36(){vfunc_called(this, "_ZN8S20555C93v36Ev");}
void  S20555C9 ::v37(){vfunc_called(this, "_ZN8S20555C93v37Ev");}
S20555C9 ::~S20555C9(){ note_dtor("S20555C9", this);} // tgen
S20555C9 ::S20555C9(){ note_ctor("S20555C9", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S20555C9C1Ev();
extern void _ZN8S20555C9D1Ev();
Name_Map name_map_S20555C9[] = {
  NSPAIR(_ZN8S20555C9C1Ev),
  NSPAIR(_ZN8S20555C9D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20555C9[];
extern void _ZN8S20555C93v34Ev();
extern void _ZN8S20555C93v35Ev();
extern void _ZN8S20555C93v36Ev();
extern void _ZN8S20555C93v37Ev();
static  VTBL_ENTRY vtc_S20555C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20555C9[0]),
  (VTBL_ENTRY)&_ZN8S20555C93v34Ev,
  (VTBL_ENTRY)&_ZN8S20555C93v35Ev,
  (VTBL_ENTRY)&_ZN8S20555C93v36Ev,
  (VTBL_ENTRY)&_ZN8S20555C93v37Ev,
};
extern VTBL_ENTRY _ZTI8S20555C9[];
extern  VTBL_ENTRY _ZTV8S20555C9[];
Class_Descriptor cd_S20555C9 = {  "S20555C9", // class name
  0,0,//no base classes
  &(vtc_S20555C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S20555C9),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20555C9),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20555C10  : S20555C6 {
  ::S20555C6 s20555c10f0;
  virtual void  v38(); // _ZN9S20555C103v38Ev
  virtual void  v39(); // _ZN9S20555C103v39Ev
  virtual void  v40(); // _ZN9S20555C103v40Ev
  virtual void  v41(); // _ZN9S20555C103v41Ev
  virtual void  v42(); // _ZN9S20555C103v42Ev
  virtual void  v43(); // _ZN9S20555C103v43Ev
  virtual void  v44(); // _ZN9S20555C103v44Ev
  ~S20555C10(); // tgen
  S20555C10(); // tgen
};
//SIG(-1 S20555C10) C1{ BC2{ v8 v9 v10 v11 v12 FC3{} Fp} v1 v2 v3 v4 v5 v6 v7 FC2}


void  S20555C10 ::v38(){vfunc_called(this, "_ZN9S20555C103v38Ev");}
void  S20555C10 ::v39(){vfunc_called(this, "_ZN9S20555C103v39Ev");}
void  S20555C10 ::v40(){vfunc_called(this, "_ZN9S20555C103v40Ev");}
void  S20555C10 ::v41(){vfunc_called(this, "_ZN9S20555C103v41Ev");}
void  S20555C10 ::v42(){vfunc_called(this, "_ZN9S20555C103v42Ev");}
void  S20555C10 ::v43(){vfunc_called(this, "_ZN9S20555C103v43Ev");}
void  S20555C10 ::v44(){vfunc_called(this, "_ZN9S20555C103v44Ev");}
S20555C10 ::~S20555C10(){ note_dtor("S20555C10", this);} // tgen
S20555C10 ::S20555C10(){ note_ctor("S20555C10", this);} // tgen

static void Test_S20555C10()
{
  extern Class_Descriptor cd_S20555C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[7];
    init_test(&cd_S20555C10, buf);
    S20555C10 *dp, &lv = *(dp=new (buf) S20555C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S20555C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20555C10)");
    check_base_class_offset(lv, (S20555C6*), 0, "S20555C10");
    check_field_offset(lv, s20555c10f0, ABISELECT(24,12), "S20555C10.s20555c10f0");
    test_class_info(&lv, &cd_S20555C10);
    dp->~S20555C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20555C10(Test_S20555C10, "S20555C10", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN9S20555C10C1Ev();
extern void _ZN9S20555C10D1Ev();
Name_Map name_map_S20555C10[] = {
  NSPAIR(_ZN9S20555C10C1Ev),
  NSPAIR(_ZN9S20555C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20555C6;
extern VTBL_ENTRY _ZTI8S20555C6[];
extern  VTBL_ENTRY _ZTV8S20555C6[];
static Base_Class bases_S20555C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20555C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20555C10[];
extern void _ZN8S20555C63v23Ev();
extern void _ZN8S20555C63v24Ev();
extern void _ZN8S20555C63v25Ev();
extern void _ZN8S20555C63v26Ev();
extern void _ZN8S20555C63v27Ev();
extern void _ZN9S20555C103v38Ev();
extern void _ZN9S20555C103v39Ev();
extern void _ZN9S20555C103v40Ev();
extern void _ZN9S20555C103v41Ev();
extern void _ZN9S20555C103v42Ev();
extern void _ZN9S20555C103v43Ev();
extern void _ZN9S20555C103v44Ev();
static  VTBL_ENTRY vtc_S20555C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S20555C10[0]),
  (VTBL_ENTRY)&_ZN8S20555C63v23Ev,
  (VTBL_ENTRY)&_ZN8S20555C63v24Ev,
  (VTBL_ENTRY)&_ZN8S20555C63v25Ev,
  (VTBL_ENTRY)&_ZN8S20555C63v26Ev,
  (VTBL_ENTRY)&_ZN8S20555C63v27Ev,
  (VTBL_ENTRY)&_ZN9S20555C103v38Ev,
  (VTBL_ENTRY)&_ZN9S20555C103v39Ev,
  (VTBL_ENTRY)&_ZN9S20555C103v40Ev,
  (VTBL_ENTRY)&_ZN9S20555C103v41Ev,
  (VTBL_ENTRY)&_ZN9S20555C103v42Ev,
  (VTBL_ENTRY)&_ZN9S20555C103v43Ev,
  (VTBL_ENTRY)&_ZN9S20555C103v44Ev,
};
extern VTBL_ENTRY _ZTI9S20555C10[];
extern  VTBL_ENTRY _ZTV9S20555C10[];
Class_Descriptor cd_S20555C10 = {  "S20555C10", // class name
  bases_S20555C10, 1,
  &(vtc_S20555C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI9S20555C10),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S20555C10),14, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20555C8  : S20555C9 , virtual S20555C10 {
  virtual  ~S20555C8(); // _ZN8S20555C8D2Ev
  virtual void  v45(); // _ZN8S20555C83v45Ev
  S20555C8(); // tgen
};
//SIG(-1 S20555C8) C1{ BC2{ v2 v3 v4 v5 FC3{}} VBC4{ BC5{ v6 v7 v8 v9 v10 FC3 Fp} v11 v12 v13 v14 v15 v16 v17 FC5} vd v1}


 S20555C8 ::~S20555C8(){ note_dtor("S20555C8", this);}
void  S20555C8 ::v45(){vfunc_called(this, "_ZN8S20555C83v45Ev");}
S20555C8 ::S20555C8(){ note_ctor("S20555C8", this);} // tgen

static void Test_S20555C8()
{
  extern Class_Descriptor cd_S20555C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[9];
    init_test(&cd_S20555C8, buf);
    S20555C8 *dp, &lv = *(dp=new (buf) S20555C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S20555C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20555C8)");
    check_base_class_offset(lv, (S20555C9*), 0, "S20555C8");
    check_base_class_offset(lv, (S20555C6*)(S20555C10*), ABISELECT(16,8), "S20555C8");
    check_base_class_offset(lv, (S20555C10*), ABISELECT(16,8), "S20555C8");
    test_class_info(&lv, &cd_S20555C8);
    dp->~S20555C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20555C8(Test_S20555C8, "S20555C8", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN8S20555C8C1Ev();
extern void _ZN8S20555C8D2Ev();
Name_Map name_map_S20555C8[] = {
  NSPAIR(_ZN8S20555C8C1Ev),
  NSPAIR(_ZN8S20555C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20555C9;
extern VTBL_ENTRY _ZTI8S20555C9[];
extern  VTBL_ENTRY _ZTV8S20555C9[];
extern Class_Descriptor cd_S20555C6;
extern VTBL_ENTRY _ZTI8S20555C6[];
extern  VTBL_ENTRY _ZTV8S20555C6[];
extern Class_Descriptor cd_S20555C10;
extern VTBL_ENTRY _ZTI9S20555C10[];
extern  VTBL_ENTRY _ZTV9S20555C10[];
static Base_Class bases_S20555C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20555C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20555C6,    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, 0},
  {&cd_S20555C10,    ABISELECT(16,8), //bcp->offset
    10, //bcp->virtual_function_table_offset
    14, //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 _ZTI8S20555C8[];
extern void _ZN8S20555C93v34Ev();
extern void _ZN8S20555C93v35Ev();
extern void _ZN8S20555C93v36Ev();
extern void _ZN8S20555C93v37Ev();
extern void _ZN8S20555C8D1Ev();
extern void _ZN8S20555C8D0Ev();
extern void _ZN8S20555C83v45Ev();
extern void _ZN8S20555C63v23Ev();
extern void _ZN8S20555C63v24Ev();
extern void _ZN8S20555C63v25Ev();
extern void _ZN8S20555C63v26Ev();
extern void _ZN8S20555C63v27Ev();
extern void _ZN9S20555C103v38Ev();
extern void _ZN9S20555C103v39Ev();
extern void _ZN9S20555C103v40Ev();
extern void _ZN9S20555C103v41Ev();
extern void _ZN9S20555C103v42Ev();
extern void _ZN9S20555C103v43Ev();
extern void _ZN9S20555C103v44Ev();
static  VTBL_ENTRY vtc_S20555C8[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20555C8[0]),
  (VTBL_ENTRY)&_ZN8S20555C93v34Ev,
  (VTBL_ENTRY)&_ZN8S20555C93v35Ev,
  (VTBL_ENTRY)&_ZN8S20555C93v36Ev,
  (VTBL_ENTRY)&_ZN8S20555C93v37Ev,
  (VTBL_ENTRY)&_ZN8S20555C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20555C8D0Ev,
  (VTBL_ENTRY)&_ZN8S20555C83v45Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20555C8[0]),
  (VTBL_ENTRY)&_ZN8S20555C63v23Ev,
  (VTBL_ENTRY)&_ZN8S20555C63v24Ev,
  (VTBL_ENTRY)&_ZN8S20555C63v25Ev,
  (VTBL_ENTRY)&_ZN8S20555C63v26Ev,
  (VTBL_ENTRY)&_ZN8S20555C63v27Ev,
  (VTBL_ENTRY)&_ZN9S20555C103v38Ev,
  (VTBL_ENTRY)&_ZN9S20555C103v39Ev,
  (VTBL_ENTRY)&_ZN9S20555C103v40Ev,
  (VTBL_ENTRY)&_ZN9S20555C103v41Ev,
  (VTBL_ENTRY)&_ZN9S20555C103v42Ev,
  (VTBL_ENTRY)&_ZN9S20555C103v43Ev,
  (VTBL_ENTRY)&_ZN9S20555C103v44Ev,
};
extern VTBL_ENTRY _ZTV8S20555C8[];
static  VTT_ENTRY vtt_S20555C8[] = {
  {&(_ZTV8S20555C8[3]),  3,36},
  {&(_ZTV8S20555C8[24]),  24,36},
};
extern VTBL_ENTRY _ZTI8S20555C8[];
extern  VTBL_ENTRY _ZTV8S20555C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20555C8[];
Class_Descriptor cd_S20555C8 = {  "S20555C8", // class name
  bases_S20555C8, 3,
  &(vtc_S20555C8[0]), // expected_vtbl_contents
  &(vtt_S20555C8[0]), // expected_vtt_contents
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI8S20555C8),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20555C8),36, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20555C8),2, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20555C1  : virtual S20555C2 , virtual S20555C8 {
  void *s20555c1f0;
  virtual  ~S20555C1(); // _ZN8S20555C1D2Ev
  virtual void  v1(); // _ZN8S20555C12v1Ev
  virtual void  v2(); // _ZN8S20555C12v2Ev
  virtual void  v3(); // _ZN8S20555C12v3Ev
  virtual void  v4(); // _ZN8S20555C12v4Ev
  virtual void  v5(); // _ZN8S20555C12v5Ev
  S20555C1(); // tgen
};
//SIG(1 S20555C1) C1{ VBC2{ VBC3{ BC4{ v6 v7 v8 v9 v10 v11 FC5{ vd v12 v13 v14 v15 v16 v17} Fi} BC5 vd v18 v19 v20 v21 v22} VBC6{ v23 v24 v25 v26 v27 FC7{} Fp} vd v28 v29 v30 v31 v32 v33} VBC8{ BC9{ v34 v35 v36 v37 FC7} VBC10{ BC6 v38 v39 v40 v41 v42 v43 v44 FC6} vd v45} vd v1 v2 v3 v4 v5 Fp}


 S20555C1 ::~S20555C1(){ note_dtor("S20555C1", this);}
void  S20555C1 ::v1(){vfunc_called(this, "_ZN8S20555C12v1Ev");}
void  S20555C1 ::v2(){vfunc_called(this, "_ZN8S20555C12v2Ev");}
void  S20555C1 ::v3(){vfunc_called(this, "_ZN8S20555C12v3Ev");}
void  S20555C1 ::v4(){vfunc_called(this, "_ZN8S20555C12v4Ev");}
void  S20555C1 ::v5(){vfunc_called(this, "_ZN8S20555C12v5Ev");}
S20555C1 ::S20555C1(){ note_ctor("S20555C1", this);} // tgen

static void Test_S20555C1()
{
  extern Class_Descriptor cd_S20555C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[18];
    init_test(&cd_S20555C1, buf);
    S20555C1 *dp, &lv = *(dp=new (buf) S20555C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,68), "sizeof(S20555C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20555C1)");
    check_base_class_offset(lv, (S20555C4*)(S20555C3*), ABISELECT(16,8), "S20555C1");
    check_base_class_offset(lv, (S20555C5*)(S20555C3*), ABISELECT(40,20), "S20555C1");
    check_base_class_offset(lv, (S20555C3*)(S20555C2*), ABISELECT(16,8), "S20555C1");
    check_base_class_offset(lv, (S20555C6*)(S20555C2*), ABISELECT(48,24), "S20555C1");
    check_base_class_offset(lv, (S20555C2*), 0, "S20555C1");
    check_base_class_offset(lv, (S20555C9*)(S20555C8*), ABISELECT(72,36), "S20555C1");
    check_base_class_offset(lv, (S20555C6*)(S20555C10*), ABISELECT(88,44), "S20555C1");
    check_base_class_offset(lv, (S20555C10*)(S20555C8*), ABISELECT(88,44), "S20555C1");
    check_base_class_offset(lv, (S20555C8*), ABISELECT(72,36), "S20555C1");
    check_field_offset(lv, s20555c1f0, ABISELECT(8,4), "S20555C1.s20555c1f0");
    test_class_info(&lv, &cd_S20555C1);
    dp->~S20555C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20555C1(Test_S20555C1, "S20555C1", ABISELECT(136,68));

#else // __cplusplus

extern void _ZN8S20555C1C1Ev();
extern void _ZN8S20555C1D2Ev();
Name_Map name_map_S20555C1[] = {
  NSPAIR(_ZN8S20555C1C1Ev),
  NSPAIR(_ZN8S20555C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20555C4;
extern VTBL_ENTRY _ZTI8S20555C4[];
extern  VTBL_ENTRY _ZTV8S20555C4[];
extern Class_Descriptor cd_S20555C5;
extern VTBL_ENTRY _ZTI8S20555C5[];
extern  VTBL_ENTRY _ZTV8S20555C5[];
extern Class_Descriptor cd_S20555C3;
extern VTBL_ENTRY _ZTI8S20555C3[];
extern  VTBL_ENTRY _ZTV8S20555C3[];
extern Class_Descriptor cd_S20555C6;
extern VTBL_ENTRY _ZTI8S20555C6[];
extern  VTBL_ENTRY _ZTV8S20555C6[];
extern Class_Descriptor cd_S20555C2;
extern VTBL_ENTRY _ZTI8S20555C2[];
extern  VTBL_ENTRY _ZTV8S20555C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20555C2[];
extern Class_Descriptor cd_S20555C9;
extern VTBL_ENTRY _ZTI8S20555C9[];
extern  VTBL_ENTRY _ZTV8S20555C9[];
extern Class_Descriptor cd_S20555C6;
extern VTBL_ENTRY _ZTI8S20555C6[];
extern  VTBL_ENTRY _ZTV8S20555C6[];
extern Class_Descriptor cd_S20555C10;
extern VTBL_ENTRY _ZTI9S20555C10[];
extern  VTBL_ENTRY _ZTV9S20555C10[];
extern Class_Descriptor cd_S20555C8;
extern VTBL_ENTRY _ZTI8S20555C8[];
extern  VTBL_ENTRY _ZTV8S20555C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20555C8[];
static Base_Class bases_S20555C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20555C4,    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, 0},
  {&cd_S20555C5,    ABISELECT(40,20), //bcp->offset
    60, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20555C3,    ABISELECT(16,8), //bcp->offset
    27, //bcp->virtual_function_table_offset
    20, //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
    4, //immediately_derived
  0, 1},
  {&cd_S20555C6,    ABISELECT(48,24), //bcp->offset
    70, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20555C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20555C9,    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
    8, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20555C6,    ABISELECT(88,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20555C10,    ABISELECT(88,44), //bcp->offset
    98, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S20555C8,    ABISELECT(72,36), //bcp->offset
    82, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20555C1[];
extern void _ZN8S20555C1D1Ev();
extern void _ZN8S20555C1D0Ev();
extern void _ZN8S20555C23v28Ev();
extern void _ZN8S20555C23v29Ev();
extern void _ZN8S20555C23v30Ev();
extern void _ZN8S20555C23v31Ev();
extern void _ZN8S20555C23v32Ev();
extern void _ZN8S20555C23v33Ev();
extern void _ZN8S20555C12v1Ev();
extern void _ZN8S20555C12v2Ev();
extern void _ZN8S20555C12v3Ev();
extern void _ZN8S20555C12v4Ev();
extern void _ZN8S20555C12v5Ev();
extern void _ZN8S20555C42v6Ev();
extern void _ZN8S20555C42v7Ev();
extern void _ZN8S20555C42v8Ev();
extern void _ZN8S20555C42v9Ev();
extern void _ZN8S20555C43v10Ev();
extern void _ZN8S20555C43v11Ev();
extern void ABISELECT(_ZTv0_n72_N8S20555C1D1Ev,_ZTv0_n36_N8S20555C1D1Ev)();
extern void ABISELECT(_ZThn16_N8S20555C1D1Ev,_ZThn8_N8S20555C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S20555C1D0Ev,_ZTv0_n36_N8S20555C1D0Ev)();
extern void ABISELECT(_ZThn16_N8S20555C1D0Ev,_ZThn8_N8S20555C1D0Ev)() __attribute__((weak));
extern void _ZN8S20555C33v18Ev();
extern void _ZN8S20555C33v19Ev();
extern void _ZN8S20555C33v20Ev();
extern void _ZN8S20555C33v21Ev();
extern void _ZN8S20555C33v22Ev();
extern void ABISELECT(_ZTvn24_n72_N8S20555C1D1Ev,_ZTvn12_n36_N8S20555C1D1Ev)();
extern void ABISELECT(_ZTvn24_n72_N8S20555C1D0Ev,_ZTvn12_n36_N8S20555C1D0Ev)();
extern void _ZN8S20555C53v12Ev();
extern void _ZN8S20555C53v13Ev();
extern void _ZN8S20555C53v14Ev();
extern void _ZN8S20555C53v15Ev();
extern void _ZN8S20555C53v16Ev();
extern void _ZN8S20555C53v17Ev();
extern void _ZN8S20555C63v23Ev();
extern void _ZN8S20555C63v24Ev();
extern void _ZN8S20555C63v25Ev();
extern void _ZN8S20555C63v26Ev();
extern void _ZN8S20555C63v27Ev();
extern void _ZN8S20555C93v34Ev();
extern void _ZN8S20555C93v35Ev();
extern void _ZN8S20555C93v36Ev();
extern void _ZN8S20555C93v37Ev();
extern void ABISELECT(_ZTv0_n64_N8S20555C1D1Ev,_ZTv0_n32_N8S20555C1D1Ev)();
extern void ABISELECT(_ZThn72_N8S20555C1D1Ev,_ZThn36_N8S20555C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S20555C1D0Ev,_ZTv0_n32_N8S20555C1D0Ev)();
extern void ABISELECT(_ZThn72_N8S20555C1D0Ev,_ZThn36_N8S20555C1D0Ev)() __attribute__((weak));
extern void _ZN8S20555C83v45Ev();
extern void _ZN8S20555C63v23Ev();
extern void _ZN8S20555C63v24Ev();
extern void _ZN8S20555C63v25Ev();
extern void _ZN8S20555C63v26Ev();
extern void _ZN8S20555C63v27Ev();
extern void _ZN9S20555C103v38Ev();
extern void _ZN9S20555C103v39Ev();
extern void _ZN9S20555C103v40Ev();
extern void _ZN9S20555C103v41Ev();
extern void _ZN9S20555C103v42Ev();
extern void _ZN9S20555C103v43Ev();
extern void _ZN9S20555C103v44Ev();
static  VTBL_ENTRY vtc_S20555C1[] = {
  ABISELECT(88,44),
  ABISELECT(72,36),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(48,24),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20555C1[0]),
  (VTBL_ENTRY)&_ZN8S20555C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20555C1D0Ev,
  (VTBL_ENTRY)&_ZN8S20555C23v28Ev,
  (VTBL_ENTRY)&_ZN8S20555C23v29Ev,
  (VTBL_ENTRY)&_ZN8S20555C23v30Ev,
  (VTBL_ENTRY)&_ZN8S20555C23v31Ev,
  (VTBL_ENTRY)&_ZN8S20555C23v32Ev,
  (VTBL_ENTRY)&_ZN8S20555C23v33Ev,
  (VTBL_ENTRY)&_ZN8S20555C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20555C12v2Ev,
  (VTBL_ENTRY)&_ZN8S20555C12v3Ev,
  (VTBL_ENTRY)&_ZN8S20555C12v4Ev,
  (VTBL_ENTRY)&_ZN8S20555C12v5Ev,
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20555C1[0]),
  (VTBL_ENTRY)&_ZN8S20555C42v6Ev,
  (VTBL_ENTRY)&_ZN8S20555C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20555C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20555C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20555C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20555C43v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20555C1D1Ev,_ZTv0_n36_N8S20555C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20555C1D0Ev,_ZTv0_n36_N8S20555C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20555C33v18Ev,
  (VTBL_ENTRY)&_ZN8S20555C33v19Ev,
  (VTBL_ENTRY)&_ZN8S20555C33v20Ev,
  (VTBL_ENTRY)&_ZN8S20555C33v21Ev,
  (VTBL_ENTRY)&_ZN8S20555C33v22Ev,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S20555C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N8S20555C1D1Ev,_ZTvn12_n36_N8S20555C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N8S20555C1D0Ev,_ZTvn12_n36_N8S20555C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20555C53v12Ev,
  (VTBL_ENTRY)&_ZN8S20555C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20555C53v14Ev,
  (VTBL_ENTRY)&_ZN8S20555C53v15Ev,
  (VTBL_ENTRY)&_ZN8S20555C53v16Ev,
  (VTBL_ENTRY)&_ZN8S20555C53v17Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S20555C1[0]),
  (VTBL_ENTRY)&_ZN8S20555C63v23Ev,
  (VTBL_ENTRY)&_ZN8S20555C63v24Ev,
  (VTBL_ENTRY)&_ZN8S20555C63v25Ev,
  (VTBL_ENTRY)&_ZN8S20555C63v26Ev,
  (VTBL_ENTRY)&_ZN8S20555C63v27Ev,
  0,
  ABISELECT(-72,-36),
  0,
  0,
  0,
  0,
  ABISELECT(16,8),
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI8S20555C1[0]),
  (VTBL_ENTRY)&_ZN8S20555C93v34Ev,
  (VTBL_ENTRY)&_ZN8S20555C93v35Ev,
  (VTBL_ENTRY)&_ZN8S20555C93v36Ev,
  (VTBL_ENTRY)&_ZN8S20555C93v37Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S20555C1D1Ev,_ZTv0_n32_N8S20555C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S20555C1D0Ev,_ZTv0_n32_N8S20555C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20555C83v45Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-88,-44),
  (VTBL_ENTRY)&(_ZTI8S20555C1[0]),
  (VTBL_ENTRY)&_ZN8S20555C63v23Ev,
  (VTBL_ENTRY)&_ZN8S20555C63v24Ev,
  (VTBL_ENTRY)&_ZN8S20555C63v25Ev,
  (VTBL_ENTRY)&_ZN8S20555C63v26Ev,
  (VTBL_ENTRY)&_ZN8S20555C63v27Ev,
  (VTBL_ENTRY)&_ZN9S20555C103v38Ev,
  (VTBL_ENTRY)&_ZN9S20555C103v39Ev,
  (VTBL_ENTRY)&_ZN9S20555C103v40Ev,
  (VTBL_ENTRY)&_ZN9S20555C103v41Ev,
  (VTBL_ENTRY)&_ZN9S20555C103v42Ev,
  (VTBL_ENTRY)&_ZN9S20555C103v43Ev,
  (VTBL_ENTRY)&_ZN9S20555C103v44Ev,
};
extern VTBL_ENTRY _ZTV8S20555C1[];
extern void _ZN8S20555C2D1Ev();
extern void _ZN8S20555C2D0Ev();
extern void _ZN8S20555C23v28Ev();
extern void _ZN8S20555C23v29Ev();
extern void _ZN8S20555C23v30Ev();
extern void _ZN8S20555C23v31Ev();
extern void _ZN8S20555C23v32Ev();
extern void _ZN8S20555C23v33Ev();
static  VTBL_ENTRY _tg__ZTV8S20555C2__8S20555C1[] = {
  ABISELECT(48,24),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20555C2[0]),
  (VTBL_ENTRY)&_ZN8S20555C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20555C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20555C23v28Ev,
  (VTBL_ENTRY)&_ZN8S20555C23v29Ev,
  (VTBL_ENTRY)&_ZN8S20555C23v30Ev,
  (VTBL_ENTRY)&_ZN8S20555C23v31Ev,
  (VTBL_ENTRY)&_ZN8S20555C23v32Ev,
  (VTBL_ENTRY)&_ZN8S20555C23v33Ev,
};
extern void _ZN8S20555C42v6Ev();
extern void _ZN8S20555C42v7Ev();
extern void _ZN8S20555C42v8Ev();
extern void _ZN8S20555C42v9Ev();
extern void _ZN8S20555C43v10Ev();
extern void _ZN8S20555C43v11Ev();
extern void ABISELECT(_ZTv0_n72_N8S20555C2D1Ev,_ZTv0_n36_N8S20555C2D1Ev)();
extern void ABISELECT(_ZThn16_N8S20555C2D1Ev,_ZThn8_N8S20555C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S20555C2D0Ev,_ZTv0_n36_N8S20555C2D0Ev)();
extern void ABISELECT(_ZThn16_N8S20555C2D0Ev,_ZThn8_N8S20555C2D0Ev)() __attribute__((weak));
extern void _ZN8S20555C33v18Ev();
extern void _ZN8S20555C33v19Ev();
extern void _ZN8S20555C33v20Ev();
extern void _ZN8S20555C33v21Ev();
extern void _ZN8S20555C33v22Ev();
static  VTBL_ENTRY _tg__ZTV8S20555C3__8S20555C2__8S20555C1[] = {
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20555C2[0]),
  (VTBL_ENTRY)&_ZN8S20555C42v6Ev,
  (VTBL_ENTRY)&_ZN8S20555C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20555C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20555C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20555C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20555C43v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20555C2D1Ev,_ZTv0_n36_N8S20555C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20555C2D0Ev,_ZTv0_n36_N8S20555C2D0Ev),
  (VTBL_ENTRY)&_ZN8S20555C33v18Ev,
  (VTBL_ENTRY)&_ZN8S20555C33v19Ev,
  (VTBL_ENTRY)&_ZN8S20555C33v20Ev,
  (VTBL_ENTRY)&_ZN8S20555C33v21Ev,
  (VTBL_ENTRY)&_ZN8S20555C33v22Ev,
};
extern void ABISELECT(_ZTvn24_n72_N8S20555C2D1Ev,_ZTvn12_n36_N8S20555C2D1Ev)();
extern void ABISELECT(_ZTvn24_n72_N8S20555C2D0Ev,_ZTvn12_n36_N8S20555C2D0Ev)();
extern void _ZN8S20555C53v12Ev();
extern void _ZN8S20555C53v13Ev();
extern void _ZN8S20555C53v14Ev();
extern void _ZN8S20555C53v15Ev();
extern void _ZN8S20555C53v16Ev();
extern void _ZN8S20555C53v17Ev();
static  VTBL_ENTRY _tg__ZTV8S20555C58S20555C3__8S20555C2__8S20555C1[] = {
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S20555C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N8S20555C2D1Ev,_ZTvn12_n36_N8S20555C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N8S20555C2D0Ev,_ZTvn12_n36_N8S20555C2D0Ev),
  (VTBL_ENTRY)&_ZN8S20555C53v12Ev,
  (VTBL_ENTRY)&_ZN8S20555C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20555C53v14Ev,
  (VTBL_ENTRY)&_ZN8S20555C53v15Ev,
  (VTBL_ENTRY)&_ZN8S20555C53v16Ev,
  (VTBL_ENTRY)&_ZN8S20555C53v17Ev,
};
extern void _ZN8S20555C63v23Ev();
extern void _ZN8S20555C63v24Ev();
extern void _ZN8S20555C63v25Ev();
extern void _ZN8S20555C63v26Ev();
extern void _ZN8S20555C63v27Ev();
static  VTBL_ENTRY _tg__ZTV8S20555C6__8S20555C2__8S20555C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S20555C2[0]),
  (VTBL_ENTRY)&_ZN8S20555C63v23Ev,
  (VTBL_ENTRY)&_ZN8S20555C63v24Ev,
  (VTBL_ENTRY)&_ZN8S20555C63v25Ev,
  (VTBL_ENTRY)&_ZN8S20555C63v26Ev,
  (VTBL_ENTRY)&_ZN8S20555C63v27Ev,
};
extern void _ZN8S20555C93v34Ev();
extern void _ZN8S20555C93v35Ev();
extern void _ZN8S20555C93v36Ev();
extern void _ZN8S20555C93v37Ev();
extern void _ZN8S20555C8D1Ev();
extern void _ZN8S20555C8D0Ev();
extern void _ZN8S20555C83v45Ev();
static  VTBL_ENTRY _tg__ZTV8S20555C8__8S20555C1[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20555C8[0]),
  (VTBL_ENTRY)&_ZN8S20555C93v34Ev,
  (VTBL_ENTRY)&_ZN8S20555C93v35Ev,
  (VTBL_ENTRY)&_ZN8S20555C93v36Ev,
  (VTBL_ENTRY)&_ZN8S20555C93v37Ev,
  (VTBL_ENTRY)&_ZN8S20555C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20555C8D0Ev,
  (VTBL_ENTRY)&_ZN8S20555C83v45Ev,
};
extern void _ZN8S20555C63v23Ev();
extern void _ZN8S20555C63v24Ev();
extern void _ZN8S20555C63v25Ev();
extern void _ZN8S20555C63v26Ev();
extern void _ZN8S20555C63v27Ev();
extern void _ZN9S20555C103v38Ev();
extern void _ZN9S20555C103v39Ev();
extern void _ZN9S20555C103v40Ev();
extern void _ZN9S20555C103v41Ev();
extern void _ZN9S20555C103v42Ev();
extern void _ZN9S20555C103v43Ev();
extern void _ZN9S20555C103v44Ev();
static  VTBL_ENTRY _tg__ZTV9S20555C10__8S20555C8__8S20555C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20555C8[0]),
  (VTBL_ENTRY)&_ZN8S20555C63v23Ev,
  (VTBL_ENTRY)&_ZN8S20555C63v24Ev,
  (VTBL_ENTRY)&_ZN8S20555C63v25Ev,
  (VTBL_ENTRY)&_ZN8S20555C63v26Ev,
  (VTBL_ENTRY)&_ZN8S20555C63v27Ev,
  (VTBL_ENTRY)&_ZN9S20555C103v38Ev,
  (VTBL_ENTRY)&_ZN9S20555C103v39Ev,
  (VTBL_ENTRY)&_ZN9S20555C103v40Ev,
  (VTBL_ENTRY)&_ZN9S20555C103v41Ev,
  (VTBL_ENTRY)&_ZN9S20555C103v42Ev,
  (VTBL_ENTRY)&_ZN9S20555C103v43Ev,
  (VTBL_ENTRY)&_ZN9S20555C103v44Ev,
};
static  VTT_ENTRY vtt_S20555C1[] = {
  {&(_ZTV8S20555C1[14]),  14,124},
  {&(_ZTV8S20555C1[14]),  14,124},
  {&(_ZTV8S20555C1[47]),  47,124},
  {&(_ZTV8S20555C1[62]),  62,124},
  {&(_ZTV8S20555C1[77]),  77,124},
  {&(_ZTV8S20555C1[91]),  91,124},
  {&(_ZTV8S20555C1[112]),  112,124},
  {&(_tg__ZTV8S20555C2__8S20555C1[4]),  4,12},
  {&(_tg__ZTV8S20555C3__8S20555C2__8S20555C1[20]),  20,33},
  {&(_tg__ZTV8S20555C58S20555C3__8S20555C2__8S20555C1[2]),  2,10},
  {&(_tg__ZTV8S20555C6__8S20555C2__8S20555C1[7]),  7,12},
  {&(_tg__ZTV8S20555C8__8S20555C1[3]),  3,10},
  {&(_tg__ZTV9S20555C10__8S20555C8__8S20555C1[14]),  14,26},
};
extern VTBL_ENTRY _ZTI8S20555C1[];
extern  VTBL_ENTRY _ZTV8S20555C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20555C1[];
static VTBL_ENTRY alt_thunk_names19[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20555C2D0Ev,_ZTv0_n36_N8S20555C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20555C2D0Ev,_ZThn8_N8S20555C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20555C2D1Ev,_ZTv0_n36_N8S20555C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20555C2D1Ev,_ZThn8_N8S20555C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S20555C1D0Ev,_ZTv0_n32_N8S20555C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S20555C1D0Ev,_ZThn36_N8S20555C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S20555C1D1Ev,_ZTv0_n32_N8S20555C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S20555C1D1Ev,_ZThn36_N8S20555C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20555C1D0Ev,_ZTv0_n36_N8S20555C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20555C1D0Ev,_ZThn8_N8S20555C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20555C1D1Ev,_ZTv0_n36_N8S20555C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20555C1D1Ev,_ZThn8_N8S20555C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20555C1 = {  "S20555C1", // class name
  bases_S20555C1, 9,
  &(vtc_S20555C1[0]), // expected_vtbl_contents
  &(vtt_S20555C1[0]), // expected_vtt_contents
  ABISELECT(136,68), // object size
  NSPAIRA(_ZTI8S20555C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20555C1),124, //virtual function table var
  14, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20555C1),13, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names19,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12627C4  {
  short s12627c4f0;
  short s12627c4f1;
  short s12627c4f2;
  long s12627c4f3;
  long s12627c4f4;
  short s12627c4f5;
  char s12627c4f6[32];
  short s12627c4f7;
};
//SIG(-1 S12627C4) C1{ Fs[3] Fl[2] Fs Fc[32] Fs}



static void Test_S12627C4()
{
  {
    init_simple_test("S12627C4");
    S12627C4 lv;
    check2(sizeof(lv), ABISELECT(64,52), "sizeof(S12627C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12627C4)");
    check_field_offset(lv, s12627c4f0, 0, "S12627C4.s12627c4f0");
    check_field_offset(lv, s12627c4f1, 2, "S12627C4.s12627c4f1");
    check_field_offset(lv, s12627c4f2, 4, "S12627C4.s12627c4f2");
    check_field_offset(lv, s12627c4f3, 8, "S12627C4.s12627c4f3");
    check_field_offset(lv, s12627c4f4, ABISELECT(16,12), "S12627C4.s12627c4f4");
    check_field_offset(lv, s12627c4f5, ABISELECT(24,16), "S12627C4.s12627c4f5");
    check_field_offset(lv, s12627c4f6, ABISELECT(26,18), "S12627C4.s12627c4f6");
    check_field_offset(lv, s12627c4f7, ABISELECT(58,50), "S12627C4.s12627c4f7");
  }
}
static Arrange_To_Call_Me vS12627C4(Test_S12627C4, "S12627C4", ABISELECT(64,52));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12627C3  {
  ::S12627C4 s12627c3f0;
  void *s12627c3f1;
  void *s12627c3f2;
  void *s12627c3f3;
  void *s12627c3f4;
  void *s12627c3f5;
  void *s12627c3f6;
};
//SIG(1 S12627C3) C1{ FC2{ Fs[3] Fl[2] Fs Fc[32] Fs} Fp[6]}



static void Test_S12627C3()
{
  {
    init_simple_test("S12627C3");
    S12627C3 lv;
    check2(sizeof(lv), ABISELECT(112,76), "sizeof(S12627C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12627C3)");
    check_field_offset(lv, s12627c3f0, 0, "S12627C3.s12627c3f0");
    check_field_offset(lv, s12627c3f1, ABISELECT(64,52), "S12627C3.s12627c3f1");
    check_field_offset(lv, s12627c3f2, ABISELECT(72,56), "S12627C3.s12627c3f2");
    check_field_offset(lv, s12627c3f3, ABISELECT(80,60), "S12627C3.s12627c3f3");
    check_field_offset(lv, s12627c3f4, ABISELECT(88,64), "S12627C3.s12627c3f4");
    check_field_offset(lv, s12627c3f5, ABISELECT(96,68), "S12627C3.s12627c3f5");
    check_field_offset(lv, s12627c3f6, ABISELECT(104,72), "S12627C3.s12627c3f6");
  }
}
static Arrange_To_Call_Me vS12627C3(Test_S12627C3, "S12627C3", ABISELECT(112,76));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12627C6  {
  short s12627c6f0;
  short s12627c6f1;
  short s12627c6f2;
  long s12627c6f3;
};
//SIG(-1 S12627C6) C1{ Fs[3] Fl}



static void Test_S12627C6()
{
  {
    init_simple_test("S12627C6");
    S12627C6 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S12627C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12627C6)");
    check_field_offset(lv, s12627c6f0, 0, "S12627C6.s12627c6f0");
    check_field_offset(lv, s12627c6f1, 2, "S12627C6.s12627c6f1");
    check_field_offset(lv, s12627c6f2, 4, "S12627C6.s12627c6f2");
    check_field_offset(lv, s12627c6f3, 8, "S12627C6.s12627c6f3");
  }
}
static Arrange_To_Call_Me vS12627C6(Test_S12627C6, "S12627C6", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12627C5  {
  ::S12627C6 s12627c5f0;
  void *s12627c5f1;
  void *s12627c5f2;
  void *s12627c5f3;
  void *s12627c5f4;
  void *s12627c5f5;
  void *s12627c5f6;
};
//SIG(1 S12627C5) C1{ FC2{ Fs[3] Fl} Fp[6]}



static void Test_S12627C5()
{
  {
    init_simple_test("S12627C5");
    S12627C5 lv;
    check2(sizeof(lv), ABISELECT(64,36), "sizeof(S12627C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12627C5)");
    check_field_offset(lv, s12627c5f0, 0, "S12627C5.s12627c5f0");
    check_field_offset(lv, s12627c5f1, ABISELECT(16,12), "S12627C5.s12627c5f1");
    check_field_offset(lv, s12627c5f2, ABISELECT(24,16), "S12627C5.s12627c5f2");
    check_field_offset(lv, s12627c5f3, ABISELECT(32,20), "S12627C5.s12627c5f3");
    check_field_offset(lv, s12627c5f4, ABISELECT(40,24), "S12627C5.s12627c5f4");
    check_field_offset(lv, s12627c5f5, ABISELECT(48,28), "S12627C5.s12627c5f5");
    check_field_offset(lv, s12627c5f6, ABISELECT(56,32), "S12627C5.s12627c5f6");
  }
}
static Arrange_To_Call_Me vS12627C5(Test_S12627C5, "S12627C5", ABISELECT(64,36));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12627C8  {
  short s12627c8f0;
  short s12627c8f1;
  short s12627c8f2;
  short s12627c8f3;
  long s12627c8f4;
  long s12627c8f5;
  short s12627c8f6;
  short s12627c8f7;
  char s12627c8f8;
};
//SIG(-1 S12627C8) C1{ Fs[4] Fl[2] Fs[2] Fc}



static void Test_S12627C8()
{
  {
    init_simple_test("S12627C8");
    S12627C8 lv;
    check2(sizeof(lv), ABISELECT(32,24), "sizeof(S12627C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12627C8)");
    check_field_offset(lv, s12627c8f0, 0, "S12627C8.s12627c8f0");
    check_field_offset(lv, s12627c8f1, 2, "S12627C8.s12627c8f1");
    check_field_offset(lv, s12627c8f2, 4, "S12627C8.s12627c8f2");
    check_field_offset(lv, s12627c8f3, 6, "S12627C8.s12627c8f3");
    check_field_offset(lv, s12627c8f4, 8, "S12627C8.s12627c8f4");
    check_field_offset(lv, s12627c8f5, ABISELECT(16,12), "S12627C8.s12627c8f5");
    check_field_offset(lv, s12627c8f6, ABISELECT(24,16), "S12627C8.s12627c8f6");
    check_field_offset(lv, s12627c8f7, ABISELECT(26,18), "S12627C8.s12627c8f7");
    check_field_offset(lv, s12627c8f8, ABISELECT(28,20), "S12627C8.s12627c8f8");
  }
}
static Arrange_To_Call_Me vS12627C8(Test_S12627C8, "S12627C8", ABISELECT(32,24));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12627C7  {
  ::S12627C8 s12627c7f0;
  void *s12627c7f1;
};
//SIG(1 S12627C7) C1{ FC2{ Fs[4] Fl[2] Fs[2] Fc} Fp}



static void Test_S12627C7()
{
  {
    init_simple_test("S12627C7");
    S12627C7 lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S12627C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12627C7)");
    check_field_offset(lv, s12627c7f0, 0, "S12627C7.s12627c7f0");
    check_field_offset(lv, s12627c7f1, ABISELECT(32,24), "S12627C7.s12627c7f1");
  }
}
static Arrange_To_Call_Me vS12627C7(Test_S12627C7, "S12627C7", ABISELECT(40,28));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12627C9  {
  ::S13685C15_nt s12627c9f0;
  void *s12627c9f1;
};
//SIG(1 S12627C9) C1{ FC2{ Fs} Fp}



static void Test_S12627C9()
{
  {
    init_simple_test("S12627C9");
    S12627C9 lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S12627C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12627C9)");
    check_field_offset(lv, s12627c9f0, 0, "S12627C9.s12627c9f0");
    check_field_offset(lv, s12627c9f1, ABISELECT(8,4), "S12627C9.s12627c9f1");
  }
}
static Arrange_To_Call_Me vS12627C9(Test_S12627C9, "S12627C9", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12627C12  {
  short s12627c12f0;
};
//SIG(-1 S12627C12) C1{ Fs}



static void Test_S12627C12()
{
  {
    init_simple_test("S12627C12");
    S12627C12 lv;
    check2(sizeof(lv), 2, "sizeof(S12627C12)");
    check2(__alignof__(lv), 2, "__alignof__(S12627C12)");
    check_field_offset(lv, s12627c12f0, 0, "S12627C12.s12627c12f0");
  }
}
static Arrange_To_Call_Me vS12627C12(Test_S12627C12, "S12627C12", 2);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12627C11  {
  ::S12627C12 s12627c11f0;
};
//SIG(1 S12627C11) C1{ FC2{ Fs}}



static void Test_S12627C11()
{
  {
    init_simple_test("S12627C11");
    S12627C11 lv;
    check2(sizeof(lv), 2, "sizeof(S12627C11)");
    check2(__alignof__(lv), 2, "__alignof__(S12627C11)");
    check_field_offset(lv, s12627c11f0, 0, "S12627C11.s12627c11f0");
  }
}
static Arrange_To_Call_Me vS12627C11(Test_S12627C11, "S12627C11", 2);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12627C13  {
  ::S12627C12 s12627c13f0;
  void *s12627c13f1;
  void *s12627c13f2;
};
//SIG(1 S12627C13) C1{ FC2{ Fs} Fp[2]}



static void Test_S12627C13()
{
  {
    init_simple_test("S12627C13");
    S12627C13 lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S12627C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12627C13)");
    check_field_offset(lv, s12627c13f0, 0, "S12627C13.s12627c13f0");
    check_field_offset(lv, s12627c13f1, ABISELECT(8,4), "S12627C13.s12627c13f1");
    check_field_offset(lv, s12627c13f2, ABISELECT(16,8), "S12627C13.s12627c13f2");
  }
}
static Arrange_To_Call_Me vS12627C13(Test_S12627C13, "S12627C13", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12627C18  {
  short s12627c18f0;
  ::S13685C9 s12627c18f1;
  ::S13685C9 s12627c18f2;
  ::S13685C9 s12627c18f3;
};
//SIG(-1 S12627C18) C1{ Fs FC2{ Fp FL} FC2 FC2}



static void Test_S12627C18()
{
  {
    init_simple_test("S12627C18");
    S12627C18 lv;
    check2(sizeof(lv), ABISELECT(56,40), "sizeof(S12627C18)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12627C18)");
    check_field_offset(lv, s12627c18f0, 0, "S12627C18.s12627c18f0");
    check_field_offset(lv, s12627c18f1, ABISELECT(8,4), "S12627C18.s12627c18f1");
    check_field_offset(lv, s12627c18f2, ABISELECT(24,16), "S12627C18.s12627c18f2");
    check_field_offset(lv, s12627c18f3, ABISELECT(40,28), "S12627C18.s12627c18f3");
  }
}
static Arrange_To_Call_Me vS12627C18(Test_S12627C18, "S12627C18", ABISELECT(56,40));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12627C17  {
  ::S12627C18 s12627c17f0;
  void *s12627c17f1;
  void *s12627c17f2;
  void *s12627c17f3;
};
//SIG(1 S12627C17) C1{ FC2{ Fs FC3{ Fp FL} FC3 FC3} Fp[3]}



static void Test_S12627C17()
{
  {
    init_simple_test("S12627C17");
    S12627C17 lv;
    check2(sizeof(lv), ABISELECT(80,52), "sizeof(S12627C17)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12627C17)");
    check_field_offset(lv, s12627c17f0, 0, "S12627C17.s12627c17f0");
    check_field_offset(lv, s12627c17f1, ABISELECT(56,40), "S12627C17.s12627c17f1");
    check_field_offset(lv, s12627c17f2, ABISELECT(64,44), "S12627C17.s12627c17f2");
    check_field_offset(lv, s12627c17f3, ABISELECT(72,48), "S12627C17.s12627c17f3");
  }
}
static Arrange_To_Call_Me vS12627C17(Test_S12627C17, "S12627C17", ABISELECT(80,52));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

union  S12627C2  {
  ::S12627C3 s12627c2f0;
  ::S12627C5 s12627c2f1;
  ::S12627C7 s12627c2f2;
  ::S12627C9 s12627c2f3;
  ::S12627C11 s12627c2f4;
  ::S12627C13 s12627c2f5;
  ::S12627C11 s12627c2f6;
  ::S12627C17 s12627c2f7;
};
//SIG(1 S12627C2) U1{ FC2{ FC3{ Fs Fs Fs Fl Fl Fs Fc[32] Fs} Fp Fp Fp Fp Fp Fp} FC4{ FC5{ Fs Fs Fs Fl} Fp Fp Fp Fp Fp Fp} FC6{ FC7{ Fs Fs Fs Fs Fl Fl Fs Fs Fc} Fp} FC8{ FC9{ Fs} Fp} FC10{ FC11{ Fs}} FC12{ FC11 Fp Fp} FC10 FC13{ FC14{ Fs FC15{ Fp FL} FC15 FC15} Fp Fp Fp}}

#endif // __cplusplus
#ifdef __cplusplus

struct  S12627C1  {
  int s12627c1f0;
  long s12627c1f1;
  ::S12627C2 s12627c1f2;
  void *s12627c1f3;
};
//SIG(1 S12627C1) C1{ Fi Fl FU2{ FC3{ FC4{ Fs Fs Fs Fl Fl Fs Fc[32] Fs} Fp Fp Fp Fp Fp Fp} FC5{ FC6{ Fs Fs Fs Fl} Fp Fp Fp Fp Fp Fp} FC7{ FC8{ Fs Fs Fs Fs Fl Fl Fs Fs Fc} Fp} FC9{ FC10{ Fs} Fp} FC11{ FC12{ Fs}} FC13{ FC12 Fp Fp} FC11 FC14{ FC15{ Fs FC16{ Fp FL} FC16 FC16} Fp Fp Fp}} Fp}



static void Test_S12627C1()
{
  {
    init_simple_test("S12627C1");
    S12627C1 lv;
    check2(sizeof(lv), ABISELECT(136,88), "sizeof(S12627C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12627C1)");
    check_field_offset(lv, s12627c1f0, 0, "S12627C1.s12627c1f0");
    check_field_offset(lv, s12627c1f1, ABISELECT(8,4), "S12627C1.s12627c1f1");
    check_field_offset(lv, s12627c1f2, ABISELECT(16,8), "S12627C1.s12627c1f2");
    check_field_offset(lv, s12627c1f3, ABISELECT(128,84), "S12627C1.s12627c1f3");
  }
}
static Arrange_To_Call_Me vS12627C1(Test_S12627C1, "S12627C1", ABISELECT(136,88));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7808C4  {
  ::S601C21_nt s7808c4f0;
  void *s7808c4f1;
  virtual void  v6(); // _ZN7S7808C42v6Ev
  virtual void  v7(); // _ZN7S7808C42v7Ev
  virtual void  v8(); // _ZN7S7808C42v8Ev
  virtual void  v9(); // _ZN7S7808C42v9Ev
  virtual void  v10(); // _ZN7S7808C43v10Ev
  ~S7808C4(); // tgen
  S7808C4(); // tgen
};
//SIG(-1 S7808C4) C1{ v1 v2 v3 v4 v5 FC2{} Fp}


void  S7808C4 ::v6(){vfunc_called(this, "_ZN7S7808C42v6Ev");}
void  S7808C4 ::v7(){vfunc_called(this, "_ZN7S7808C42v7Ev");}
void  S7808C4 ::v8(){vfunc_called(this, "_ZN7S7808C42v8Ev");}
void  S7808C4 ::v9(){vfunc_called(this, "_ZN7S7808C42v9Ev");}
void  S7808C4 ::v10(){vfunc_called(this, "_ZN7S7808C43v10Ev");}
S7808C4 ::~S7808C4(){ note_dtor("S7808C4", this);} // tgen
S7808C4 ::S7808C4(){ note_ctor("S7808C4", this);} // tgen

static void Test_S7808C4()
{
  extern Class_Descriptor cd_S7808C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S7808C4, buf);
    S7808C4 *dp, &lv = *(dp=new (buf) S7808C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S7808C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7808C4)");
    check_field_offset(lv, s7808c4f0, ABISELECT(8,4), "S7808C4.s7808c4f0");
    check_field_offset(lv, s7808c4f1, ABISELECT(16,8), "S7808C4.s7808c4f1");
    test_class_info(&lv, &cd_S7808C4);
    dp->~S7808C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7808C4(Test_S7808C4, "S7808C4", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S7808C4C1Ev();
extern void _ZN7S7808C4D1Ev();
Name_Map name_map_S7808C4[] = {
  NSPAIR(_ZN7S7808C4C1Ev),
  NSPAIR(_ZN7S7808C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7808C4[];
extern void _ZN7S7808C42v6Ev();
extern void _ZN7S7808C42v7Ev();
extern void _ZN7S7808C42v8Ev();
extern void _ZN7S7808C42v9Ev();
extern void _ZN7S7808C43v10Ev();
static  VTBL_ENTRY vtc_S7808C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7808C4[0]),
  (VTBL_ENTRY)&_ZN7S7808C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7808C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7808C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7808C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7808C43v10Ev,
};
extern VTBL_ENTRY _ZTI7S7808C4[];
extern  VTBL_ENTRY _ZTV7S7808C4[];
Class_Descriptor cd_S7808C4 = {  "S7808C4", // class name
  0,0,//no base classes
  &(vtc_S7808C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S7808C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7808C4),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  S7808C9  {
  virtual  ~S7808C9(); // _ZN7S7808C9D1Ev
  virtual void  v17(); // _ZN7S7808C93v17Ev
  virtual void  v18(); // _ZN7S7808C93v18Ev
  virtual void  v19(); // _ZN7S7808C93v19Ev
  virtual void  v20(); // _ZN7S7808C93v20Ev
  virtual void  v21(); // _ZN7S7808C93v21Ev
  virtual void  v22(); // _ZN7S7808C93v22Ev
  S7808C9(); // tgen
};
//SIG(-1 S7808C9) C1{ vd v1 v2 v3 v4 v5 v6}


 S7808C9 ::~S7808C9(){ note_dtor("S7808C9", this);}
void  S7808C9 ::v17(){vfunc_called(this, "_ZN7S7808C93v17Ev");}
void  S7808C9 ::v18(){vfunc_called(this, "_ZN7S7808C93v18Ev");}
void  S7808C9 ::v19(){vfunc_called(this, "_ZN7S7808C93v19Ev");}
void  S7808C9 ::v20(){vfunc_called(this, "_ZN7S7808C93v20Ev");}
void  S7808C9 ::v21(){vfunc_called(this, "_ZN7S7808C93v21Ev");}
void  S7808C9 ::v22(){vfunc_called(this, "_ZN7S7808C93v22Ev");}
S7808C9 ::S7808C9(){ note_ctor("S7808C9", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S7808C9C1Ev();
extern void _ZN7S7808C9D1Ev();
Name_Map name_map_S7808C9[] = {
  NSPAIR(_ZN7S7808C9C1Ev),
  NSPAIR(_ZN7S7808C9D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7808C9[];
extern void _ZN7S7808C9D1Ev();
extern void _ZN7S7808C9D0Ev();
extern void _ZN7S7808C93v17Ev();
extern void _ZN7S7808C93v18Ev();
extern void _ZN7S7808C93v19Ev();
extern void _ZN7S7808C93v20Ev();
extern void _ZN7S7808C93v21Ev();
extern void _ZN7S7808C93v22Ev();
static  VTBL_ENTRY vtc_S7808C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7808C9[0]),
  (VTBL_ENTRY)&_ZN7S7808C9D1Ev,
  (VTBL_ENTRY)&_ZN7S7808C9D0Ev,
  (VTBL_ENTRY)&_ZN7S7808C93v17Ev,
  (VTBL_ENTRY)&_ZN7S7808C93v18Ev,
  (VTBL_ENTRY)&_ZN7S7808C93v19Ev,
  (VTBL_ENTRY)&_ZN7S7808C93v20Ev,
  (VTBL_ENTRY)&_ZN7S7808C93v21Ev,
  (VTBL_ENTRY)&_ZN7S7808C93v22Ev,
};
extern VTBL_ENTRY _ZTI7S7808C9[];
extern  VTBL_ENTRY _ZTV7S7808C9[];
Class_Descriptor cd_S7808C9 = {  "S7808C9", // class name
  0,0,//no base classes
  &(vtc_S7808C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7808C9),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7808C9),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7808C8  {
  ::S7808C9 s7808c8f0;
  int s7808c8f1;
  virtual void  v11(); // _ZN7S7808C83v11Ev
  virtual void  v12(); // _ZN7S7808C83v12Ev
  virtual void  v13(); // _ZN7S7808C83v13Ev
  virtual void  v14(); // _ZN7S7808C83v14Ev
  virtual void  v15(); // _ZN7S7808C83v15Ev
  virtual void  v16(); // _ZN7S7808C83v16Ev
  ~S7808C8(); // tgen
  S7808C8(); // tgen
};
//SIG(-1 S7808C8) C1{ v1 v2 v3 v4 v5 v6 FC2{ vd v7 v8 v9 v10 v11 v12} Fi}


void  S7808C8 ::v11(){vfunc_called(this, "_ZN7S7808C83v11Ev");}
void  S7808C8 ::v12(){vfunc_called(this, "_ZN7S7808C83v12Ev");}
void  S7808C8 ::v13(){vfunc_called(this, "_ZN7S7808C83v13Ev");}
void  S7808C8 ::v14(){vfunc_called(this, "_ZN7S7808C83v14Ev");}
void  S7808C8 ::v15(){vfunc_called(this, "_ZN7S7808C83v15Ev");}
void  S7808C8 ::v16(){vfunc_called(this, "_ZN7S7808C83v16Ev");}
S7808C8 ::~S7808C8(){ note_dtor("S7808C8", this);} // tgen
S7808C8 ::S7808C8(){ note_ctor("S7808C8", this);} // tgen

static void Test_S7808C8()
{
  extern Class_Descriptor cd_S7808C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S7808C8, buf);
    S7808C8 *dp, &lv = *(dp=new (buf) S7808C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S7808C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7808C8)");
    check_field_offset(lv, s7808c8f0, ABISELECT(8,4), "S7808C8.s7808c8f0");
    check_field_offset(lv, s7808c8f1, ABISELECT(16,8), "S7808C8.s7808c8f1");
    test_class_info(&lv, &cd_S7808C8);
    dp->~S7808C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7808C8(Test_S7808C8, "S7808C8", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S7808C8C1Ev();
extern void _ZN7S7808C8D1Ev();
Name_Map name_map_S7808C8[] = {
  NSPAIR(_ZN7S7808C8C1Ev),
  NSPAIR(_ZN7S7808C8D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7808C8[];
extern void _ZN7S7808C83v11Ev();
extern void _ZN7S7808C83v12Ev();
extern void _ZN7S7808C83v13Ev();
extern void _ZN7S7808C83v14Ev();
extern void _ZN7S7808C83v15Ev();
extern void _ZN7S7808C83v16Ev();
static  VTBL_ENTRY vtc_S7808C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7808C8[0]),
  (VTBL_ENTRY)&_ZN7S7808C83v11Ev,
  (VTBL_ENTRY)&_ZN7S7808C83v12Ev,
  (VTBL_ENTRY)&_ZN7S7808C83v13Ev,
  (VTBL_ENTRY)&_ZN7S7808C83v14Ev,
  (VTBL_ENTRY)&_ZN7S7808C83v15Ev,
  (VTBL_ENTRY)&_ZN7S7808C83v16Ev,
};
extern VTBL_ENTRY _ZTI7S7808C8[];
extern  VTBL_ENTRY _ZTV7S7808C8[];
Class_Descriptor cd_S7808C8 = {  "S7808C8", // class name
  0,0,//no base classes
  &(vtc_S7808C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S7808C8),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7808C8),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  S7808C7  : S7808C8 , S7808C9 {
  virtual  ~S7808C7(); // _ZN7S7808C7D1Ev
  virtual void  v23(); // _ZN7S7808C73v23Ev
  virtual void  v24(); // _ZN7S7808C73v24Ev
  virtual void  v25(); // _ZN7S7808C73v25Ev
  virtual void  v26(); // _ZN7S7808C73v26Ev
  virtual void  v27(); // _ZN7S7808C73v27Ev
  S7808C7(); // tgen
};
//SIG(-1 S7808C7) C1{ BC2{ v6 v7 v8 v9 v10 v11 FC3{ vd v12 v13 v14 v15 v16 v17} Fi} BC3 vd v1 v2 v3 v4 v5}


 S7808C7 ::~S7808C7(){ note_dtor("S7808C7", this);}
void  S7808C7 ::v23(){vfunc_called(this, "_ZN7S7808C73v23Ev");}
void  S7808C7 ::v24(){vfunc_called(this, "_ZN7S7808C73v24Ev");}
void  S7808C7 ::v25(){vfunc_called(this, "_ZN7S7808C73v25Ev");}
void  S7808C7 ::v26(){vfunc_called(this, "_ZN7S7808C73v26Ev");}
void  S7808C7 ::v27(){vfunc_called(this, "_ZN7S7808C73v27Ev");}
S7808C7 ::S7808C7(){ note_ctor("S7808C7", this);} // tgen

static void Test_S7808C7()
{
  extern Class_Descriptor cd_S7808C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S7808C7, buf);
    S7808C7 *dp, &lv = *(dp=new (buf) S7808C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S7808C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7808C7)");
    check_base_class_offset(lv, (S7808C8*), 0, "S7808C7");
    check_base_class_offset(lv, (S7808C9*), ABISELECT(24,12), "S7808C7");
    test_class_info(&lv, &cd_S7808C7);
    dp->~S7808C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7808C7(Test_S7808C7, "S7808C7", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S7808C7C1Ev();
extern void _ZN7S7808C7D1Ev();
Name_Map name_map_S7808C7[] = {
  NSPAIR(_ZN7S7808C7C1Ev),
  NSPAIR(_ZN7S7808C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7808C8;
extern VTBL_ENTRY _ZTI7S7808C8[];
extern  VTBL_ENTRY _ZTV7S7808C8[];
extern Class_Descriptor cd_S7808C9;
extern VTBL_ENTRY _ZTI7S7808C9[];
extern  VTBL_ENTRY _ZTV7S7808C9[];
static Base_Class bases_S7808C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7808C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S7808C9,    ABISELECT(24,12), //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
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7808C7[];
extern void _ZN7S7808C83v11Ev();
extern void _ZN7S7808C83v12Ev();
extern void _ZN7S7808C83v13Ev();
extern void _ZN7S7808C83v14Ev();
extern void _ZN7S7808C83v15Ev();
extern void _ZN7S7808C83v16Ev();
extern void _ZN7S7808C7D1Ev();
extern void _ZN7S7808C7D0Ev();
extern void _ZN7S7808C73v23Ev();
extern void _ZN7S7808C73v24Ev();
extern void _ZN7S7808C73v25Ev();
extern void _ZN7S7808C73v26Ev();
extern void _ZN7S7808C73v27Ev();
extern void ABISELECT(_ZThn24_N7S7808C7D1Ev,_ZThn12_N7S7808C7D1Ev)();
extern void ABISELECT(_ZThn24_N7S7808C7D0Ev,_ZThn12_N7S7808C7D0Ev)();
extern void _ZN7S7808C93v17Ev();
extern void _ZN7S7808C93v18Ev();
extern void _ZN7S7808C93v19Ev();
extern void _ZN7S7808C93v20Ev();
extern void _ZN7S7808C93v21Ev();
extern void _ZN7S7808C93v22Ev();
static  VTBL_ENTRY vtc_S7808C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7808C7[0]),
  (VTBL_ENTRY)&_ZN7S7808C83v11Ev,
  (VTBL_ENTRY)&_ZN7S7808C83v12Ev,
  (VTBL_ENTRY)&_ZN7S7808C83v13Ev,
  (VTBL_ENTRY)&_ZN7S7808C83v14Ev,
  (VTBL_ENTRY)&_ZN7S7808C83v15Ev,
  (VTBL_ENTRY)&_ZN7S7808C83v16Ev,
  (VTBL_ENTRY)&_ZN7S7808C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7808C7D0Ev,
  (VTBL_ENTRY)&_ZN7S7808C73v23Ev,
  (VTBL_ENTRY)&_ZN7S7808C73v24Ev,
  (VTBL_ENTRY)&_ZN7S7808C73v25Ev,
  (VTBL_ENTRY)&_ZN7S7808C73v26Ev,
  (VTBL_ENTRY)&_ZN7S7808C73v27Ev,
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S7808C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N7S7808C7D1Ev,_ZThn12_N7S7808C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N7S7808C7D0Ev,_ZThn12_N7S7808C7D0Ev),
  (VTBL_ENTRY)&_ZN7S7808C93v17Ev,
  (VTBL_ENTRY)&_ZN7S7808C93v18Ev,
  (VTBL_ENTRY)&_ZN7S7808C93v19Ev,
  (VTBL_ENTRY)&_ZN7S7808C93v20Ev,
  (VTBL_ENTRY)&_ZN7S7808C93v21Ev,
  (VTBL_ENTRY)&_ZN7S7808C93v22Ev,
};
extern VTBL_ENTRY _ZTI7S7808C7[];
extern  VTBL_ENTRY _ZTV7S7808C7[];
Class_Descriptor cd_S7808C7 = {  "S7808C7", // class name
  bases_S7808C7, 2,
  &(vtc_S7808C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S7808C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7808C7),25, //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  S7808C6  : virtual S7808C7 , virtual S7808C4 {
  virtual  ~S7808C6(); // _ZN7S7808C6D2Ev
  virtual void  v28(); // _ZN7S7808C63v28Ev
  virtual void  v29(); // _ZN7S7808C63v29Ev
  S7808C6(); // tgen
};
//SIG(-1 S7808C6) C1{ VBC2{ BC3{ v3 v4 v5 v6 v7 v8 FC4{ vd v9 v10 v11 v12 v13 v14} Fi} BC4 vd v15 v16 v17 v18 v19} VBC5{ v20 v21 v22 v23 v24 FC6{} Fp} vd v1 v2}


 S7808C6 ::~S7808C6(){ note_dtor("S7808C6", this);}
void  S7808C6 ::v28(){vfunc_called(this, "_ZN7S7808C63v28Ev");}
void  S7808C6 ::v29(){vfunc_called(this, "_ZN7S7808C63v29Ev");}
S7808C6 ::S7808C6(){ note_ctor("S7808C6", this);} // tgen

static void Test_S7808C6()
{
  extern Class_Descriptor cd_S7808C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[9];
    init_test(&cd_S7808C6, buf);
    S7808C6 *dp, &lv = *(dp=new (buf) S7808C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S7808C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7808C6)");
    check_base_class_offset(lv, (S7808C8*)(S7808C7*), ABISELECT(8,4), "S7808C6");
    check_base_class_offset(lv, (S7808C9*)(S7808C7*), ABISELECT(32,16), "S7808C6");
    check_base_class_offset(lv, (S7808C7*), ABISELECT(8,4), "S7808C6");
    check_base_class_offset(lv, (S7808C4*), ABISELECT(40,20), "S7808C6");
    test_class_info(&lv, &cd_S7808C6);
    dp->~S7808C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7808C6(Test_S7808C6, "S7808C6", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN7S7808C6C1Ev();
extern void _ZN7S7808C6D2Ev();
Name_Map name_map_S7808C6[] = {
  NSPAIR(_ZN7S7808C6C1Ev),
  NSPAIR(_ZN7S7808C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7808C8;
extern VTBL_ENTRY _ZTI7S7808C8[];
extern  VTBL_ENTRY _ZTV7S7808C8[];
extern Class_Descriptor cd_S7808C9;
extern VTBL_ENTRY _ZTI7S7808C9[];
extern  VTBL_ENTRY _ZTV7S7808C9[];
extern Class_Descriptor cd_S7808C7;
extern VTBL_ENTRY _ZTI7S7808C7[];
extern  VTBL_ENTRY _ZTV7S7808C7[];
extern Class_Descriptor cd_S7808C4;
extern VTBL_ENTRY _ZTI7S7808C4[];
extern  VTBL_ENTRY _ZTV7S7808C4[];
static Base_Class bases_S7808C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7808C8,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7808C9,    ABISELECT(32,16), //bcp->offset
    41, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7808C7,    ABISELECT(8,4), //bcp->offset
    8, //bcp->virtual_function_table_offset
    20, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7808C4,    ABISELECT(40,20), //bcp->offset
    51, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7808C6[];
extern void _ZN7S7808C6D1Ev();
extern void _ZN7S7808C6D0Ev();
extern void _ZN7S7808C63v28Ev();
extern void _ZN7S7808C63v29Ev();
extern void _ZN7S7808C83v11Ev();
extern void _ZN7S7808C83v12Ev();
extern void _ZN7S7808C83v13Ev();
extern void _ZN7S7808C83v14Ev();
extern void _ZN7S7808C83v15Ev();
extern void _ZN7S7808C83v16Ev();
extern void ABISELECT(_ZTv0_n72_N7S7808C6D1Ev,_ZTv0_n36_N7S7808C6D1Ev)();
extern void ABISELECT(_ZThn8_N7S7808C6D1Ev,_ZThn4_N7S7808C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S7808C6D0Ev,_ZTv0_n36_N7S7808C6D0Ev)();
extern void ABISELECT(_ZThn8_N7S7808C6D0Ev,_ZThn4_N7S7808C6D0Ev)() __attribute__((weak));
extern void _ZN7S7808C73v23Ev();
extern void _ZN7S7808C73v24Ev();
extern void _ZN7S7808C73v25Ev();
extern void _ZN7S7808C73v26Ev();
extern void _ZN7S7808C73v27Ev();
extern void ABISELECT(_ZTvn24_n72_N7S7808C6D1Ev,_ZTvn12_n36_N7S7808C6D1Ev)();
extern void ABISELECT(_ZTvn24_n72_N7S7808C6D0Ev,_ZTvn12_n36_N7S7808C6D0Ev)();
extern void _ZN7S7808C93v17Ev();
extern void _ZN7S7808C93v18Ev();
extern void _ZN7S7808C93v19Ev();
extern void _ZN7S7808C93v20Ev();
extern void _ZN7S7808C93v21Ev();
extern void _ZN7S7808C93v22Ev();
extern void _ZN7S7808C42v6Ev();
extern void _ZN7S7808C42v7Ev();
extern void _ZN7S7808C42v8Ev();
extern void _ZN7S7808C42v9Ev();
extern void _ZN7S7808C43v10Ev();
static  VTBL_ENTRY vtc_S7808C6[] = {
  ABISELECT(40,20),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7808C6[0]),
  (VTBL_ENTRY)&_ZN7S7808C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7808C6D0Ev,
  (VTBL_ENTRY)&_ZN7S7808C63v28Ev,
  (VTBL_ENTRY)&_ZN7S7808C63v29Ev,
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7808C6[0]),
  (VTBL_ENTRY)&_ZN7S7808C83v11Ev,
  (VTBL_ENTRY)&_ZN7S7808C83v12Ev,
  (VTBL_ENTRY)&_ZN7S7808C83v13Ev,
  (VTBL_ENTRY)&_ZN7S7808C83v14Ev,
  (VTBL_ENTRY)&_ZN7S7808C83v15Ev,
  (VTBL_ENTRY)&_ZN7S7808C83v16Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S7808C6D1Ev,_ZTv0_n36_N7S7808C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S7808C6D0Ev,_ZTv0_n36_N7S7808C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7808C73v23Ev,
  (VTBL_ENTRY)&_ZN7S7808C73v24Ev,
  (VTBL_ENTRY)&_ZN7S7808C73v25Ev,
  (VTBL_ENTRY)&_ZN7S7808C73v26Ev,
  (VTBL_ENTRY)&_ZN7S7808C73v27Ev,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S7808C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N7S7808C6D1Ev,_ZTvn12_n36_N7S7808C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N7S7808C6D0Ev,_ZTvn12_n36_N7S7808C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7808C93v17Ev,
  (VTBL_ENTRY)&_ZN7S7808C93v18Ev,
  (VTBL_ENTRY)&_ZN7S7808C93v19Ev,
  (VTBL_ENTRY)&_ZN7S7808C93v20Ev,
  (VTBL_ENTRY)&_ZN7S7808C93v21Ev,
  (VTBL_ENTRY)&_ZN7S7808C93v22Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S7808C6[0]),
  (VTBL_ENTRY)&_ZN7S7808C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7808C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7808C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7808C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7808C43v10Ev,
};
extern VTBL_ENTRY _ZTV7S7808C6[];
static  VTT_ENTRY vtt_S7808C6[] = {
  {&(_ZTV7S7808C6[4]),  4,63},
  {&(_ZTV7S7808C6[28]),  28,63},
  {&(_ZTV7S7808C6[43]),  43,63},
  {&(_ZTV7S7808C6[58]),  58,63},
};
extern VTBL_ENTRY _ZTI7S7808C6[];
extern  VTBL_ENTRY _ZTV7S7808C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7808C6[];
static VTBL_ENTRY alt_thunk_names20[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S7808C6D0Ev,_ZTv0_n36_N7S7808C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7808C6D0Ev,_ZThn4_N7S7808C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S7808C6D1Ev,_ZTv0_n36_N7S7808C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7808C6D1Ev,_ZThn4_N7S7808C6D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7808C6 = {  "S7808C6", // class name
  bases_S7808C6, 4,
  &(vtc_S7808C6[0]), // expected_vtbl_contents
  &(vtt_S7808C6[0]), // expected_vtt_contents
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI7S7808C6),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7808C6),63, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7808C6),4, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names20,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7808C3  : virtual S7808C4 , virtual S7808C6 {
  virtual  ~S7808C3(); // _ZN7S7808C3D2Ev
  virtual void  v30(); // _ZN7S7808C33v30Ev
  S7808C3(); // tgen
};
//SIG(-1 S7808C3) C1{ VBC2{ v2 v3 v4 v5 v6 FC3{} Fp} VBC4{ VBC5{ BC6{ v7 v8 v9 v10 v11 v12 FC7{ vd v13 v14 v15 v16 v17 v18} Fi} BC7 vd v19 v20 v21 v22 v23} VBC2 vd v24 v25} vd v1}


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

static void Test_S7808C3()
{
  extern Class_Descriptor cd_S7808C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[9];
    init_test(&cd_S7808C3, buf);
    S7808C3 *dp, &lv = *(dp=new (buf) S7808C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S7808C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7808C3)");
    check_base_class_offset(lv, (S7808C4*), ABISELECT(8,4), "S7808C3");
    check_base_class_offset(lv, (S7808C4*)(S7808C6*), ABISELECT(8,4), "S7808C3");
    check_base_class_offset(lv, (S7808C8*)(S7808C7*), ABISELECT(32,16), "S7808C3");
    check_base_class_offset(lv, (S7808C9*)(S7808C7*), ABISELECT(56,28), "S7808C3");
    check_base_class_offset(lv, (S7808C7*)(S7808C6*), ABISELECT(32,16), "S7808C3");
    check_base_class_offset(lv, (S7808C6*), 0, "S7808C3");
    test_class_info(&lv, &cd_S7808C3);
    dp->~S7808C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7808C3(Test_S7808C3, "S7808C3", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN7S7808C3C1Ev();
extern void _ZN7S7808C3D2Ev();
Name_Map name_map_S7808C3[] = {
  NSPAIR(_ZN7S7808C3C1Ev),
  NSPAIR(_ZN7S7808C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7808C4;
extern VTBL_ENTRY _ZTI7S7808C4[];
extern  VTBL_ENTRY _ZTV7S7808C4[];
extern Class_Descriptor cd_S7808C8;
extern VTBL_ENTRY _ZTI7S7808C8[];
extern  VTBL_ENTRY _ZTV7S7808C8[];
extern Class_Descriptor cd_S7808C9;
extern VTBL_ENTRY _ZTI7S7808C9[];
extern  VTBL_ENTRY _ZTV7S7808C9[];
extern Class_Descriptor cd_S7808C7;
extern VTBL_ENTRY _ZTI7S7808C7[];
extern  VTBL_ENTRY _ZTV7S7808C7[];
extern Class_Descriptor cd_S7808C6;
extern VTBL_ENTRY _ZTI7S7808C6[];
extern  VTBL_ENTRY _ZTV7S7808C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7808C6[];
static Base_Class bases_S7808C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7808C4,    ABISELECT(8,4), //bcp->offset
    13, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7808C8,    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
    3, //immediately_derived
  0, 0},
  {&cd_S7808C9,    ABISELECT(56,28), //bcp->offset
    58, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7808C7,    ABISELECT(32,16), //bcp->offset
    25, //bcp->virtual_function_table_offset
    20, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7808C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7808C3[];
extern void _ZN7S7808C3D1Ev();
extern void _ZN7S7808C3D0Ev();
extern void _ZN7S7808C63v28Ev();
extern void _ZN7S7808C63v29Ev();
extern void _ZN7S7808C33v30Ev();
extern void _ZN7S7808C42v6Ev();
extern void _ZN7S7808C42v7Ev();
extern void _ZN7S7808C42v8Ev();
extern void _ZN7S7808C42v9Ev();
extern void _ZN7S7808C43v10Ev();
extern void _ZN7S7808C83v11Ev();
extern void _ZN7S7808C83v12Ev();
extern void _ZN7S7808C83v13Ev();
extern void _ZN7S7808C83v14Ev();
extern void _ZN7S7808C83v15Ev();
extern void _ZN7S7808C83v16Ev();
extern void ABISELECT(_ZTv0_n72_N7S7808C3D1Ev,_ZTv0_n36_N7S7808C3D1Ev)();
extern void ABISELECT(_ZThn32_N7S7808C3D1Ev,_ZThn16_N7S7808C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S7808C3D0Ev,_ZTv0_n36_N7S7808C3D0Ev)();
extern void ABISELECT(_ZThn32_N7S7808C3D0Ev,_ZThn16_N7S7808C3D0Ev)() __attribute__((weak));
extern void _ZN7S7808C73v23Ev();
extern void _ZN7S7808C73v24Ev();
extern void _ZN7S7808C73v25Ev();
extern void _ZN7S7808C73v26Ev();
extern void _ZN7S7808C73v27Ev();
extern void ABISELECT(_ZTvn24_n72_N7S7808C3D1Ev,_ZTvn12_n36_N7S7808C3D1Ev)();
extern void ABISELECT(_ZTvn24_n72_N7S7808C3D0Ev,_ZTvn12_n36_N7S7808C3D0Ev)();
extern void _ZN7S7808C93v17Ev();
extern void _ZN7S7808C93v18Ev();
extern void _ZN7S7808C93v19Ev();
extern void _ZN7S7808C93v20Ev();
extern void _ZN7S7808C93v21Ev();
extern void _ZN7S7808C93v22Ev();
static  VTBL_ENTRY vtc_S7808C3[] = {
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7808C3[0]),
  (VTBL_ENTRY)&_ZN7S7808C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7808C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7808C63v28Ev,
  (VTBL_ENTRY)&_ZN7S7808C63v29Ev,
  (VTBL_ENTRY)&_ZN7S7808C33v30Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7808C3[0]),
  (VTBL_ENTRY)&_ZN7S7808C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7808C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7808C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7808C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7808C43v10Ev,
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-16),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S7808C3[0]),
  (VTBL_ENTRY)&_ZN7S7808C83v11Ev,
  (VTBL_ENTRY)&_ZN7S7808C83v12Ev,
  (VTBL_ENTRY)&_ZN7S7808C83v13Ev,
  (VTBL_ENTRY)&_ZN7S7808C83v14Ev,
  (VTBL_ENTRY)&_ZN7S7808C83v15Ev,
  (VTBL_ENTRY)&_ZN7S7808C83v16Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S7808C3D1Ev,_ZTv0_n36_N7S7808C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S7808C3D0Ev,_ZTv0_n36_N7S7808C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7808C73v23Ev,
  (VTBL_ENTRY)&_ZN7S7808C73v24Ev,
  (VTBL_ENTRY)&_ZN7S7808C73v25Ev,
  (VTBL_ENTRY)&_ZN7S7808C73v26Ev,
  (VTBL_ENTRY)&_ZN7S7808C73v27Ev,
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI7S7808C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N7S7808C3D1Ev,_ZTvn12_n36_N7S7808C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N7S7808C3D0Ev,_ZTvn12_n36_N7S7808C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7808C93v17Ev,
  (VTBL_ENTRY)&_ZN7S7808C93v18Ev,
  (VTBL_ENTRY)&_ZN7S7808C93v19Ev,
  (VTBL_ENTRY)&_ZN7S7808C93v20Ev,
  (VTBL_ENTRY)&_ZN7S7808C93v21Ev,
  (VTBL_ENTRY)&_ZN7S7808C93v22Ev,
};
extern VTBL_ENTRY _ZTV7S7808C3[];
extern void _ZN7S7808C6D1Ev();
extern void _ZN7S7808C6D0Ev();
extern void _ZN7S7808C63v28Ev();
extern void _ZN7S7808C63v29Ev();
static  VTBL_ENTRY _tg__ZTV7S7808C6__7S7808C3[] = {
  ABISELECT(8,4),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7808C6[0]),
  (VTBL_ENTRY)&_ZN7S7808C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7808C6D0Ev,
  (VTBL_ENTRY)&_ZN7S7808C63v28Ev,
  (VTBL_ENTRY)&_ZN7S7808C63v29Ev,
};
extern void _ZN7S7808C83v11Ev();
extern void _ZN7S7808C83v12Ev();
extern void _ZN7S7808C83v13Ev();
extern void _ZN7S7808C83v14Ev();
extern void _ZN7S7808C83v15Ev();
extern void _ZN7S7808C83v16Ev();
extern void ABISELECT(_ZTv0_n72_N7S7808C6D1Ev,_ZTv0_n36_N7S7808C6D1Ev)();
extern void ABISELECT(_ZThn32_N7S7808C6D1Ev,_ZThn16_N7S7808C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S7808C6D0Ev,_ZTv0_n36_N7S7808C6D0Ev)();
extern void ABISELECT(_ZThn32_N7S7808C6D0Ev,_ZThn16_N7S7808C6D0Ev)() __attribute__((weak));
extern void _ZN7S7808C73v23Ev();
extern void _ZN7S7808C73v24Ev();
extern void _ZN7S7808C73v25Ev();
extern void _ZN7S7808C73v26Ev();
extern void _ZN7S7808C73v27Ev();
static  VTBL_ENTRY _tg__ZTV7S7808C7__7S7808C6__7S7808C3[] = {
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-16),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S7808C6[0]),
  (VTBL_ENTRY)&_ZN7S7808C83v11Ev,
  (VTBL_ENTRY)&_ZN7S7808C83v12Ev,
  (VTBL_ENTRY)&_ZN7S7808C83v13Ev,
  (VTBL_ENTRY)&_ZN7S7808C83v14Ev,
  (VTBL_ENTRY)&_ZN7S7808C83v15Ev,
  (VTBL_ENTRY)&_ZN7S7808C83v16Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S7808C6D1Ev,_ZTv0_n36_N7S7808C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S7808C6D0Ev,_ZTv0_n36_N7S7808C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7808C73v23Ev,
  (VTBL_ENTRY)&_ZN7S7808C73v24Ev,
  (VTBL_ENTRY)&_ZN7S7808C73v25Ev,
  (VTBL_ENTRY)&_ZN7S7808C73v26Ev,
  (VTBL_ENTRY)&_ZN7S7808C73v27Ev,
};
extern void ABISELECT(_ZTvn24_n72_N7S7808C6D1Ev,_ZTvn12_n36_N7S7808C6D1Ev)();
extern void ABISELECT(_ZTvn24_n72_N7S7808C6D0Ev,_ZTvn12_n36_N7S7808C6D0Ev)();
extern void _ZN7S7808C93v17Ev();
extern void _ZN7S7808C93v18Ev();
extern void _ZN7S7808C93v19Ev();
extern void _ZN7S7808C93v20Ev();
extern void _ZN7S7808C93v21Ev();
extern void _ZN7S7808C93v22Ev();
static  VTBL_ENTRY _tg__ZTV7S7808C97S7808C7__7S7808C6__7S7808C3[] = {
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI7S7808C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N7S7808C6D1Ev,_ZTvn12_n36_N7S7808C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N7S7808C6D0Ev,_ZTvn12_n36_N7S7808C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7808C93v17Ev,
  (VTBL_ENTRY)&_ZN7S7808C93v18Ev,
  (VTBL_ENTRY)&_ZN7S7808C93v19Ev,
  (VTBL_ENTRY)&_ZN7S7808C93v20Ev,
  (VTBL_ENTRY)&_ZN7S7808C93v21Ev,
  (VTBL_ENTRY)&_ZN7S7808C93v22Ev,
};
extern void _ZN7S7808C42v6Ev();
extern void _ZN7S7808C42v7Ev();
extern void _ZN7S7808C42v8Ev();
extern void _ZN7S7808C42v9Ev();
extern void _ZN7S7808C43v10Ev();
static  VTBL_ENTRY _tg__ZTV7S7808C4__7S7808C6__7S7808C3[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7808C6[0]),
  (VTBL_ENTRY)&_ZN7S7808C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7808C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7808C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7808C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7808C43v10Ev,
};
static  VTT_ENTRY vtt_S7808C3[] = {
  {&(_ZTV7S7808C3[8]),  8,68},
  {&(_ZTV7S7808C3[20]),  20,68},
  {&(_ZTV7S7808C3[8]),  8,68},
  {&(_ZTV7S7808C3[45]),  45,68},
  {&(_ZTV7S7808C3[60]),  60,68},
  {&(_tg__ZTV7S7808C6__7S7808C3[4]),  4,8},
  {&(_tg__ZTV7S7808C7__7S7808C6__7S7808C3[20]),  20,33},
  {&(_tg__ZTV7S7808C97S7808C7__7S7808C6__7S7808C3[2]),  2,10},
  {&(_tg__ZTV7S7808C4__7S7808C6__7S7808C3[7]),  7,12},
};
extern VTBL_ENTRY _ZTI7S7808C3[];
extern  VTBL_ENTRY _ZTV7S7808C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7808C3[];
static VTBL_ENTRY alt_thunk_names21[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S7808C6D0Ev,_ZTv0_n36_N7S7808C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7808C6D0Ev,_ZThn16_N7S7808C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S7808C6D1Ev,_ZTv0_n36_N7S7808C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7808C6D1Ev,_ZThn16_N7S7808C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S7808C3D0Ev,_ZTv0_n36_N7S7808C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7808C3D0Ev,_ZThn16_N7S7808C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S7808C3D1Ev,_ZTv0_n36_N7S7808C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7808C3D1Ev,_ZThn16_N7S7808C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7808C3 = {  "S7808C3", // class name
  bases_S7808C3, 5,
  &(vtc_S7808C3[0]), // expected_vtbl_contents
  &(vtt_S7808C3[0]), // expected_vtt_contents
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI7S7808C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7808C3),68, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7808C3),9, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names21,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7808C10  : S7808C4 {
  ::S7808C4 s7808c10f0;
  virtual void  v31(); // _ZN8S7808C103v31Ev
  virtual void  v32(); // _ZN8S7808C103v32Ev
  virtual void  v33(); // _ZN8S7808C103v33Ev
  virtual void  v34(); // _ZN8S7808C103v34Ev
  virtual void  v35(); // _ZN8S7808C103v35Ev
  virtual void  v36(); // _ZN8S7808C103v36Ev
  virtual void  v37(); // _ZN8S7808C103v37Ev
  ~S7808C10(); // tgen
  S7808C10(); // tgen
};
//SIG(-1 S7808C10) C1{ BC2{ v8 v9 v10 v11 v12 FC3{} Fp} v1 v2 v3 v4 v5 v6 v7 FC2}


void  S7808C10 ::v31(){vfunc_called(this, "_ZN8S7808C103v31Ev");}
void  S7808C10 ::v32(){vfunc_called(this, "_ZN8S7808C103v32Ev");}
void  S7808C10 ::v33(){vfunc_called(this, "_ZN8S7808C103v33Ev");}
void  S7808C10 ::v34(){vfunc_called(this, "_ZN8S7808C103v34Ev");}
void  S7808C10 ::v35(){vfunc_called(this, "_ZN8S7808C103v35Ev");}
void  S7808C10 ::v36(){vfunc_called(this, "_ZN8S7808C103v36Ev");}
void  S7808C10 ::v37(){vfunc_called(this, "_ZN8S7808C103v37Ev");}
S7808C10 ::~S7808C10(){ note_dtor("S7808C10", this);} // tgen
S7808C10 ::S7808C10(){ note_ctor("S7808C10", this);} // tgen

static void Test_S7808C10()
{
  extern Class_Descriptor cd_S7808C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[7];
    init_test(&cd_S7808C10, buf);
    S7808C10 *dp, &lv = *(dp=new (buf) S7808C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S7808C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7808C10)");
    check_base_class_offset(lv, (S7808C4*), 0, "S7808C10");
    check_field_offset(lv, s7808c10f0, ABISELECT(24,12), "S7808C10.s7808c10f0");
    test_class_info(&lv, &cd_S7808C10);
    dp->~S7808C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7808C10(Test_S7808C10, "S7808C10", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN8S7808C10C1Ev();
extern void _ZN8S7808C10D1Ev();
Name_Map name_map_S7808C10[] = {
  NSPAIR(_ZN8S7808C10C1Ev),
  NSPAIR(_ZN8S7808C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7808C4;
extern VTBL_ENTRY _ZTI7S7808C4[];
extern  VTBL_ENTRY _ZTV7S7808C4[];
static Base_Class bases_S7808C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7808C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7808C10[];
extern void _ZN7S7808C42v6Ev();
extern void _ZN7S7808C42v7Ev();
extern void _ZN7S7808C42v8Ev();
extern void _ZN7S7808C42v9Ev();
extern void _ZN7S7808C43v10Ev();
extern void _ZN8S7808C103v31Ev();
extern void _ZN8S7808C103v32Ev();
extern void _ZN8S7808C103v33Ev();
extern void _ZN8S7808C103v34Ev();
extern void _ZN8S7808C103v35Ev();
extern void _ZN8S7808C103v36Ev();
extern void _ZN8S7808C103v37Ev();
static  VTBL_ENTRY vtc_S7808C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S7808C10[0]),
  (VTBL_ENTRY)&_ZN7S7808C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7808C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7808C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7808C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7808C43v10Ev,
  (VTBL_ENTRY)&_ZN8S7808C103v31Ev,
  (VTBL_ENTRY)&_ZN8S7808C103v32Ev,
  (VTBL_ENTRY)&_ZN8S7808C103v33Ev,
  (VTBL_ENTRY)&_ZN8S7808C103v34Ev,
  (VTBL_ENTRY)&_ZN8S7808C103v35Ev,
  (VTBL_ENTRY)&_ZN8S7808C103v36Ev,
  (VTBL_ENTRY)&_ZN8S7808C103v37Ev,
};
extern VTBL_ENTRY _ZTI8S7808C10[];
extern  VTBL_ENTRY _ZTV8S7808C10[];
Class_Descriptor cd_S7808C10 = {  "S7808C10", // class name
  bases_S7808C10, 1,
  &(vtc_S7808C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI8S7808C10),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S7808C10),14, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7808C2  : virtual S7808C3 , S7808C10 {
  ::S20555C9 s7808c2f0;
  ~S7808C2(); // tgen
  S7808C2(); // tgen
};
//SIG(-1 S7808C2) C1{ VBC2{ VBC3{ v1 v2 v3 v4 v5 FC4{} Fp} VBC5{ VBC6{ BC7{ v6 v7 v8 v9 v10 v11 FC8{ vd v12 v13 v14 v15 v16 v17} Fi} BC8 vd v18 v19 v20 v21 v22} VBC3 vd v23 v24} vd v25} BC9{ BC3 v26 v27 v28 v29 v30 v31 v32 FC3} FC10{ v33 v34 v35 v36 FC4}}


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

static void Test_S7808C2()
{
  extern Class_Descriptor cd_S7808C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[17];
    init_test(&cd_S7808C2, buf);
    S7808C2 *dp, &lv = *(dp=new (buf) S7808C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,64), "sizeof(S7808C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7808C2)");
    check_base_class_offset(lv, (S7808C4*)(S7808C3*), ABISELECT(72,36), "S7808C2");
    check_base_class_offset(lv, (S7808C4*)(S7808C6*), ABISELECT(72,36), "S7808C2");
    check_base_class_offset(lv, (S7808C8*)(S7808C7*), ABISELECT(96,48), "S7808C2");
    check_base_class_offset(lv, (S7808C9*)(S7808C7*), ABISELECT(120,60), "S7808C2");
    check_base_class_offset(lv, (S7808C7*)(S7808C6*), ABISELECT(96,48), "S7808C2");
    check_base_class_offset(lv, (S7808C6*)(S7808C3*), ABISELECT(64,32), "S7808C2");
    check_base_class_offset(lv, (S7808C3*), ABISELECT(64,32), "S7808C2");
    check_base_class_offset(lv, (S7808C4*)(S7808C10*), 0, "S7808C2");
    check_base_class_offset(lv, (S7808C10*), 0, "S7808C2");
    check_field_offset(lv, s7808c2f0, ABISELECT(48,24), "S7808C2.s7808c2f0");
    test_class_info(&lv, &cd_S7808C2);
    dp->~S7808C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7808C2(Test_S7808C2, "S7808C2", ABISELECT(128,64));

#else // __cplusplus

extern void _ZN7S7808C2C1Ev();
extern void _ZN7S7808C2D1Ev();
Name_Map name_map_S7808C2[] = {
  NSPAIR(_ZN7S7808C2C1Ev),
  NSPAIR(_ZN7S7808C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7808C4;
extern VTBL_ENTRY _ZTI7S7808C4[];
extern  VTBL_ENTRY _ZTV7S7808C4[];
extern Class_Descriptor cd_S7808C8;
extern VTBL_ENTRY _ZTI7S7808C8[];
extern  VTBL_ENTRY _ZTV7S7808C8[];
extern Class_Descriptor cd_S7808C9;
extern VTBL_ENTRY _ZTI7S7808C9[];
extern  VTBL_ENTRY _ZTV7S7808C9[];
extern Class_Descriptor cd_S7808C7;
extern VTBL_ENTRY _ZTI7S7808C7[];
extern  VTBL_ENTRY _ZTV7S7808C7[];
extern Class_Descriptor cd_S7808C6;
extern VTBL_ENTRY _ZTI7S7808C6[];
extern  VTBL_ENTRY _ZTV7S7808C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7808C6[];
extern Class_Descriptor cd_S7808C3;
extern VTBL_ENTRY _ZTI7S7808C3[];
extern  VTBL_ENTRY _ZTV7S7808C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7808C3[];
extern Class_Descriptor cd_S7808C4;
extern VTBL_ENTRY _ZTI7S7808C4[];
extern  VTBL_ENTRY _ZTV7S7808C4[];
extern Class_Descriptor cd_S7808C10;
extern VTBL_ENTRY _ZTI8S7808C10[];
extern  VTBL_ENTRY _ZTV8S7808C10[];
static Base_Class bases_S7808C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7808C4,    ABISELECT(72,36), //bcp->offset
    34, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7808C8,    ABISELECT(96,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7808C9,    ABISELECT(120,60), //bcp->offset
    79, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7808C7,    ABISELECT(96,48), //bcp->offset
    46, //bcp->virtual_function_table_offset
    20, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7808C6,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S7808C3,    ABISELECT(64,32), //bcp->offset
    20, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7808C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S7808C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S7808C2[];
extern void _ZN7S7808C42v6Ev();
extern void _ZN7S7808C42v7Ev();
extern void _ZN7S7808C42v8Ev();
extern void _ZN7S7808C42v9Ev();
extern void _ZN7S7808C43v10Ev();
extern void _ZN8S7808C103v31Ev();
extern void _ZN8S7808C103v32Ev();
extern void _ZN8S7808C103v33Ev();
extern void _ZN8S7808C103v34Ev();
extern void _ZN8S7808C103v35Ev();
extern void _ZN8S7808C103v36Ev();
extern void _ZN8S7808C103v37Ev();
extern void _ZN7S7808C2D1Ev();
extern void _ZN7S7808C2D0Ev();
extern void ABISELECT(_ZTv0_n40_N7S7808C2D1Ev,_ZTv0_n20_N7S7808C2D1Ev)();
extern void ABISELECT(_ZThn64_N7S7808C2D1Ev,_ZThn32_N7S7808C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7808C2D0Ev,_ZTv0_n20_N7S7808C2D0Ev)();
extern void ABISELECT(_ZThn64_N7S7808C2D0Ev,_ZThn32_N7S7808C2D0Ev)() __attribute__((weak));
extern void _ZN7S7808C63v28Ev();
extern void _ZN7S7808C63v29Ev();
extern void _ZN7S7808C33v30Ev();
extern void _ZN7S7808C42v6Ev();
extern void _ZN7S7808C42v7Ev();
extern void _ZN7S7808C42v8Ev();
extern void _ZN7S7808C42v9Ev();
extern void _ZN7S7808C43v10Ev();
extern void _ZN7S7808C83v11Ev();
extern void _ZN7S7808C83v12Ev();
extern void _ZN7S7808C83v13Ev();
extern void _ZN7S7808C83v14Ev();
extern void _ZN7S7808C83v15Ev();
extern void _ZN7S7808C83v16Ev();
extern void ABISELECT(_ZTv0_n72_N7S7808C2D1Ev,_ZTv0_n36_N7S7808C2D1Ev)();
extern void ABISELECT(_ZThn96_N7S7808C2D1Ev,_ZThn48_N7S7808C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S7808C2D0Ev,_ZTv0_n36_N7S7808C2D0Ev)();
extern void ABISELECT(_ZThn96_N7S7808C2D0Ev,_ZThn48_N7S7808C2D0Ev)() __attribute__((weak));
extern void _ZN7S7808C73v23Ev();
extern void _ZN7S7808C73v24Ev();
extern void _ZN7S7808C73v25Ev();
extern void _ZN7S7808C73v26Ev();
extern void _ZN7S7808C73v27Ev();
extern void ABISELECT(_ZTvn24_n72_N7S7808C2D1Ev,_ZTvn12_n36_N7S7808C2D1Ev)();
extern void ABISELECT(_ZTvn24_n72_N7S7808C2D0Ev,_ZTvn12_n36_N7S7808C2D0Ev)();
extern void _ZN7S7808C93v17Ev();
extern void _ZN7S7808C93v18Ev();
extern void _ZN7S7808C93v19Ev();
extern void _ZN7S7808C93v20Ev();
extern void _ZN7S7808C93v21Ev();
extern void _ZN7S7808C93v22Ev();
static  VTBL_ENTRY vtc_S7808C2[] = {
  ABISELECT(96,48),
  ABISELECT(64,32),
  ABISELECT(72,36),
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI7S7808C2[0]),
  (VTBL_ENTRY)&_ZN7S7808C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7808C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7808C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7808C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7808C43v10Ev,
  (VTBL_ENTRY)&_ZN8S7808C103v31Ev,
  (VTBL_ENTRY)&_ZN8S7808C103v32Ev,
  (VTBL_ENTRY)&_ZN8S7808C103v33Ev,
  (VTBL_ENTRY)&_ZN8S7808C103v34Ev,
  (VTBL_ENTRY)&_ZN8S7808C103v35Ev,
  (VTBL_ENTRY)&_ZN8S7808C103v36Ev,
  (VTBL_ENTRY)&_ZN8S7808C103v37Ev,
  (VTBL_ENTRY)&_ZN7S7808C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7808C2D0Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-64,-32),
  ABISELECT(8,4),
  ABISELECT(32,16),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI7S7808C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7808C2D1Ev,_ZTv0_n20_N7S7808C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7808C2D0Ev,_ZTv0_n20_N7S7808C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7808C63v28Ev,
  (VTBL_ENTRY)&_ZN7S7808C63v29Ev,
  (VTBL_ENTRY)&_ZN7S7808C33v30Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI7S7808C2[0]),
  (VTBL_ENTRY)&_ZN7S7808C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7808C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7808C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7808C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7808C43v10Ev,
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-96,-48),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-96,-48),
  (VTBL_ENTRY)&(_ZTI7S7808C2[0]),
  (VTBL_ENTRY)&_ZN7S7808C83v11Ev,
  (VTBL_ENTRY)&_ZN7S7808C83v12Ev,
  (VTBL_ENTRY)&_ZN7S7808C83v13Ev,
  (VTBL_ENTRY)&_ZN7S7808C83v14Ev,
  (VTBL_ENTRY)&_ZN7S7808C83v15Ev,
  (VTBL_ENTRY)&_ZN7S7808C83v16Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S7808C2D1Ev,_ZTv0_n36_N7S7808C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S7808C2D0Ev,_ZTv0_n36_N7S7808C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7808C73v23Ev,
  (VTBL_ENTRY)&_ZN7S7808C73v24Ev,
  (VTBL_ENTRY)&_ZN7S7808C73v25Ev,
  (VTBL_ENTRY)&_ZN7S7808C73v26Ev,
  (VTBL_ENTRY)&_ZN7S7808C73v27Ev,
  ABISELECT(-120,-60),
  (VTBL_ENTRY)&(_ZTI7S7808C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N7S7808C2D1Ev,_ZTvn12_n36_N7S7808C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N7S7808C2D0Ev,_ZTvn12_n36_N7S7808C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7808C93v17Ev,
  (VTBL_ENTRY)&_ZN7S7808C93v18Ev,
  (VTBL_ENTRY)&_ZN7S7808C93v19Ev,
  (VTBL_ENTRY)&_ZN7S7808C93v20Ev,
  (VTBL_ENTRY)&_ZN7S7808C93v21Ev,
  (VTBL_ENTRY)&_ZN7S7808C93v22Ev,
};
extern VTBL_ENTRY _ZTV7S7808C2[];
extern void ABISELECT(_ZTv0_n40_N7S7808C3D1Ev,_ZTv0_n20_N7S7808C3D1Ev)();
extern void _ZN7S7808C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7808C3D0Ev,_ZTv0_n20_N7S7808C3D0Ev)();
extern void _ZN7S7808C3D0Ev() __attribute__((weak));
extern void _ZN7S7808C63v28Ev();
extern void _ZN7S7808C63v29Ev();
extern void _ZN7S7808C33v30Ev();
static  VTBL_ENTRY _tg__ZTV7S7808C3__7S7808C2[] = {
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7808C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7808C3D1Ev,_ZTv0_n20_N7S7808C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7808C3D0Ev,_ZTv0_n20_N7S7808C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7808C63v28Ev,
  (VTBL_ENTRY)&_ZN7S7808C63v29Ev,
  (VTBL_ENTRY)&_ZN7S7808C33v30Ev,
};
extern void _ZN7S7808C42v6Ev();
extern void _ZN7S7808C42v7Ev();
extern void _ZN7S7808C42v8Ev();
extern void _ZN7S7808C42v9Ev();
extern void _ZN7S7808C43v10Ev();
static  VTBL_ENTRY _tg__ZTV7S7808C4__7S7808C3__7S7808C2[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7808C3[0]),
  (VTBL_ENTRY)&_ZN7S7808C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7808C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7808C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7808C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7808C43v10Ev,
};
extern void _ZN7S7808C83v11Ev();
extern void _ZN7S7808C83v12Ev();
extern void _ZN7S7808C83v13Ev();
extern void _ZN7S7808C83v14Ev();
extern void _ZN7S7808C83v15Ev();
extern void _ZN7S7808C83v16Ev();
extern void ABISELECT(_ZTv0_n72_N7S7808C3D1Ev,_ZTv0_n36_N7S7808C3D1Ev)();
extern void ABISELECT(_ZThn32_N7S7808C3D1Ev,_ZThn16_N7S7808C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S7808C3D0Ev,_ZTv0_n36_N7S7808C3D0Ev)();
extern void ABISELECT(_ZThn32_N7S7808C3D0Ev,_ZThn16_N7S7808C3D0Ev)() __attribute__((weak));
extern void _ZN7S7808C73v23Ev();
extern void _ZN7S7808C73v24Ev();
extern void _ZN7S7808C73v25Ev();
extern void _ZN7S7808C73v26Ev();
extern void _ZN7S7808C73v27Ev();
static  VTBL_ENTRY _tg__ZTV7S7808C7__7S7808C3__7S7808C2[] = {
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-16),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S7808C3[0]),
  (VTBL_ENTRY)&_ZN7S7808C83v11Ev,
  (VTBL_ENTRY)&_ZN7S7808C83v12Ev,
  (VTBL_ENTRY)&_ZN7S7808C83v13Ev,
  (VTBL_ENTRY)&_ZN7S7808C83v14Ev,
  (VTBL_ENTRY)&_ZN7S7808C83v15Ev,
  (VTBL_ENTRY)&_ZN7S7808C83v16Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S7808C3D1Ev,_ZTv0_n36_N7S7808C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S7808C3D0Ev,_ZTv0_n36_N7S7808C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7808C73v23Ev,
  (VTBL_ENTRY)&_ZN7S7808C73v24Ev,
  (VTBL_ENTRY)&_ZN7S7808C73v25Ev,
  (VTBL_ENTRY)&_ZN7S7808C73v26Ev,
  (VTBL_ENTRY)&_ZN7S7808C73v27Ev,
};
extern void ABISELECT(_ZTvn24_n72_N7S7808C3D1Ev,_ZTvn12_n36_N7S7808C3D1Ev)();
extern void ABISELECT(_ZTvn24_n72_N7S7808C3D0Ev,_ZTvn12_n36_N7S7808C3D0Ev)();
extern void _ZN7S7808C93v17Ev();
extern void _ZN7S7808C93v18Ev();
extern void _ZN7S7808C93v19Ev();
extern void _ZN7S7808C93v20Ev();
extern void _ZN7S7808C93v21Ev();
extern void _ZN7S7808C93v22Ev();
static  VTBL_ENTRY _tg__ZTV7S7808C97S7808C7__7S7808C3__7S7808C2[] = {
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI7S7808C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N7S7808C3D1Ev,_ZTvn12_n36_N7S7808C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N7S7808C3D0Ev,_ZTvn12_n36_N7S7808C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7808C93v17Ev,
  (VTBL_ENTRY)&_ZN7S7808C93v18Ev,
  (VTBL_ENTRY)&_ZN7S7808C93v19Ev,
  (VTBL_ENTRY)&_ZN7S7808C93v20Ev,
  (VTBL_ENTRY)&_ZN7S7808C93v21Ev,
  (VTBL_ENTRY)&_ZN7S7808C93v22Ev,
};
extern void _ZN7S7808C6D1Ev();
extern void _ZN7S7808C6D0Ev();
extern void _ZN7S7808C63v28Ev();
extern void _ZN7S7808C63v29Ev();
static  VTBL_ENTRY _tg__ZTV7S7808C6__7S7808C2[] = {
  ABISELECT(8,4),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7808C6[0]),
  (VTBL_ENTRY)&_ZN7S7808C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7808C6D0Ev,
  (VTBL_ENTRY)&_ZN7S7808C63v28Ev,
  (VTBL_ENTRY)&_ZN7S7808C63v29Ev,
};
extern void _ZN7S7808C83v11Ev();
extern void _ZN7S7808C83v12Ev();
extern void _ZN7S7808C83v13Ev();
extern void _ZN7S7808C83v14Ev();
extern void _ZN7S7808C83v15Ev();
extern void _ZN7S7808C83v16Ev();
extern void ABISELECT(_ZTv0_n72_N7S7808C6D1Ev,_ZTv0_n36_N7S7808C6D1Ev)();
extern void ABISELECT(_ZThn32_N7S7808C6D1Ev,_ZThn16_N7S7808C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S7808C6D0Ev,_ZTv0_n36_N7S7808C6D0Ev)();
extern void ABISELECT(_ZThn32_N7S7808C6D0Ev,_ZThn16_N7S7808C6D0Ev)() __attribute__((weak));
extern void _ZN7S7808C73v23Ev();
extern void _ZN7S7808C73v24Ev();
extern void _ZN7S7808C73v25Ev();
extern void _ZN7S7808C73v26Ev();
extern void _ZN7S7808C73v27Ev();
static  VTBL_ENTRY _tg__ZTV7S7808C7__7S7808C6__7S7808C2[] = {
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-16),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S7808C6[0]),
  (VTBL_ENTRY)&_ZN7S7808C83v11Ev,
  (VTBL_ENTRY)&_ZN7S7808C83v12Ev,
  (VTBL_ENTRY)&_ZN7S7808C83v13Ev,
  (VTBL_ENTRY)&_ZN7S7808C83v14Ev,
  (VTBL_ENTRY)&_ZN7S7808C83v15Ev,
  (VTBL_ENTRY)&_ZN7S7808C83v16Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S7808C6D1Ev,_ZTv0_n36_N7S7808C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S7808C6D0Ev,_ZTv0_n36_N7S7808C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7808C73v23Ev,
  (VTBL_ENTRY)&_ZN7S7808C73v24Ev,
  (VTBL_ENTRY)&_ZN7S7808C73v25Ev,
  (VTBL_ENTRY)&_ZN7S7808C73v26Ev,
  (VTBL_ENTRY)&_ZN7S7808C73v27Ev,
};
extern void ABISELECT(_ZTvn24_n72_N7S7808C6D1Ev,_ZTvn12_n36_N7S7808C6D1Ev)();
extern void ABISELECT(_ZTvn24_n72_N7S7808C6D0Ev,_ZTvn12_n36_N7S7808C6D0Ev)();
extern void _ZN7S7808C93v17Ev();
extern void _ZN7S7808C93v18Ev();
extern void _ZN7S7808C93v19Ev();
extern void _ZN7S7808C93v20Ev();
extern void _ZN7S7808C93v21Ev();
extern void _ZN7S7808C93v22Ev();
static  VTBL_ENTRY _tg__ZTV7S7808C97S7808C7__7S7808C6__7S7808C2[] = {
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI7S7808C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N7S7808C6D1Ev,_ZTvn12_n36_N7S7808C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N7S7808C6D0Ev,_ZTvn12_n36_N7S7808C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7808C93v17Ev,
  (VTBL_ENTRY)&_ZN7S7808C93v18Ev,
  (VTBL_ENTRY)&_ZN7S7808C93v19Ev,
  (VTBL_ENTRY)&_ZN7S7808C93v20Ev,
  (VTBL_ENTRY)&_ZN7S7808C93v21Ev,
  (VTBL_ENTRY)&_ZN7S7808C93v22Ev,
};
extern void _ZN7S7808C42v6Ev();
extern void _ZN7S7808C42v7Ev();
extern void _ZN7S7808C42v8Ev();
extern void _ZN7S7808C42v9Ev();
extern void _ZN7S7808C43v10Ev();
static  VTBL_ENTRY _tg__ZTV7S7808C4__7S7808C6__7S7808C2[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7808C6[0]),
  (VTBL_ENTRY)&_ZN7S7808C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7808C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7808C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7808C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7808C43v10Ev,
};
static  VTT_ENTRY vtt_S7808C2[] = {
  {&(_ZTV7S7808C2[6]),  6,89},
  {&(_ZTV7S7808C2[29]),  29,89},
  {&(_ZTV7S7808C2[41]),  41,89},
  {&(_ZTV7S7808C2[29]),  29,89},
  {&(_ZTV7S7808C2[66]),  66,89},
  {&(_ZTV7S7808C2[81]),  81,89},
  {&(_tg__ZTV7S7808C3__7S7808C2[8]),  8,13},
  {&(_tg__ZTV7S7808C4__7S7808C3__7S7808C2[7]),  7,12},
  {&(_tg__ZTV7S7808C3__7S7808C2[8]),  8,13},
  {&(_tg__ZTV7S7808C7__7S7808C3__7S7808C2[20]),  20,33},
  {&(_tg__ZTV7S7808C97S7808C7__7S7808C3__7S7808C2[2]),  2,10},
  {&(_tg__ZTV7S7808C6__7S7808C2[4]),  4,8},
  {&(_tg__ZTV7S7808C7__7S7808C6__7S7808C2[20]),  20,33},
  {&(_tg__ZTV7S7808C97S7808C7__7S7808C6__7S7808C2[2]),  2,10},
  {&(_tg__ZTV7S7808C4__7S7808C6__7S7808C2[7]),  7,12},
};
extern VTBL_ENTRY _ZTI7S7808C2[];
extern  VTBL_ENTRY _ZTV7S7808C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7808C2[];
static VTBL_ENTRY alt_thunk_names22[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S7808C6D0Ev,_ZTv0_n36_N7S7808C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7808C6D0Ev,_ZThn16_N7S7808C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S7808C6D1Ev,_ZTv0_n36_N7S7808C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7808C6D1Ev,_ZThn16_N7S7808C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S7808C3D0Ev,_ZTv0_n36_N7S7808C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7808C3D0Ev,_ZThn16_N7S7808C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S7808C3D1Ev,_ZTv0_n36_N7S7808C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7808C3D1Ev,_ZThn16_N7S7808C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7808C3D0Ev,_ZTv0_n20_N7S7808C3D0Ev), // 
  (VTBL_ENTRY)_ZN7S7808C3D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7808C3D1Ev,_ZTv0_n20_N7S7808C3D1Ev), // 
  (VTBL_ENTRY)_ZN7S7808C3D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S7808C2D0Ev,_ZTv0_n36_N7S7808C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N7S7808C2D0Ev,_ZThn48_N7S7808C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S7808C2D1Ev,_ZTv0_n36_N7S7808C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N7S7808C2D1Ev,_ZThn48_N7S7808C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7808C2D0Ev,_ZTv0_n20_N7S7808C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S7808C2D0Ev,_ZThn32_N7S7808C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7808C2D1Ev,_ZTv0_n20_N7S7808C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S7808C2D1Ev,_ZThn32_N7S7808C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7808C2 = {  "S7808C2", // class name
  bases_S7808C2, 8,
  &(vtc_S7808C2[0]), // expected_vtbl_contents
  &(vtt_S7808C2[0]), // expected_vtt_contents
  ABISELECT(128,64), // object size
  NSPAIRA(_ZTI7S7808C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7808C2),89, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7808C2),15, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names22,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7808C1  : S7808C2 {
  void *s7808c1f0;
  virtual  ~S7808C1(); // _ZN7S7808C1D2Ev
  virtual void  v1(); // _ZN7S7808C12v1Ev
  virtual void  v2(); // _ZN7S7808C12v2Ev
  virtual void  v3(); // _ZN7S7808C12v3Ev
  virtual void  v4(); // _ZN7S7808C12v4Ev
  virtual void  v5(); // _ZN7S7808C12v5Ev
  S7808C1(); // tgen
};
//SIG(1 S7808C1) C1{ BC2{ VBC3{ VBC4{ v6 v7 v8 v9 v10 FC5{} Fp} VBC6{ VBC7{ BC8{ v11 v12 v13 v14 v15 v16 FC9{ vd v17 v18 v19 v20 v21 v22} Fi} BC9 vd v23 v24 v25 v26 v27} VBC4 vd v28 v29} vd v30} BC10{ BC4 v31 v32 v33 v34 v35 v36 v37 FC4} FC11{ v38 v39 v40 v41 FC5}} vd v1 v2 v3 v4 v5 Fp}


 S7808C1 ::~S7808C1(){ note_dtor("S7808C1", this);}
void  S7808C1 ::v1(){vfunc_called(this, "_ZN7S7808C12v1Ev");}
void  S7808C1 ::v2(){vfunc_called(this, "_ZN7S7808C12v2Ev");}
void  S7808C1 ::v3(){vfunc_called(this, "_ZN7S7808C12v3Ev");}
void  S7808C1 ::v4(){vfunc_called(this, "_ZN7S7808C12v4Ev");}
void  S7808C1 ::v5(){vfunc_called(this, "_ZN7S7808C12v5Ev");}
S7808C1 ::S7808C1(){ note_ctor("S7808C1", this);} // tgen

static void Test_S7808C1()
{
  extern Class_Descriptor cd_S7808C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[18];
    init_test(&cd_S7808C1, buf);
    S7808C1 *dp, &lv = *(dp=new (buf) S7808C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,68), "sizeof(S7808C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7808C1)");
    check_base_class_offset(lv, (S7808C4*)(S7808C3*), ABISELECT(80,40), "S7808C1");
    check_base_class_offset(lv, (S7808C4*)(S7808C6*), ABISELECT(80,40), "S7808C1");
    check_base_class_offset(lv, (S7808C8*)(S7808C7*), ABISELECT(104,52), "S7808C1");
    check_base_class_offset(lv, (S7808C9*)(S7808C7*), ABISELECT(128,64), "S7808C1");
    check_base_class_offset(lv, (S7808C7*)(S7808C6*), ABISELECT(104,52), "S7808C1");
    check_base_class_offset(lv, (S7808C6*)(S7808C3*), ABISELECT(72,36), "S7808C1");
    check_base_class_offset(lv, (S7808C3*)(S7808C2*), ABISELECT(72,36), "S7808C1");
    check_base_class_offset(lv, (S7808C4*)(S7808C10*)(S7808C2*), 0, "S7808C1");
    check_base_class_offset(lv, (S7808C10*)(S7808C2*), 0, "S7808C1");
    check_base_class_offset(lv, (S7808C2*), 0, "S7808C1");
    check_field_offset(lv, s7808c1f0, ABISELECT(64,32), "S7808C1.s7808c1f0");
    test_class_info(&lv, &cd_S7808C1);
    dp->~S7808C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7808C1(Test_S7808C1, "S7808C1", ABISELECT(136,68));

#else // __cplusplus

extern void _ZN7S7808C1C1Ev();
extern void _ZN7S7808C1D2Ev();
Name_Map name_map_S7808C1[] = {
  NSPAIR(_ZN7S7808C1C1Ev),
  NSPAIR(_ZN7S7808C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7808C4;
extern VTBL_ENTRY _ZTI7S7808C4[];
extern  VTBL_ENTRY _ZTV7S7808C4[];
extern Class_Descriptor cd_S7808C8;
extern VTBL_ENTRY _ZTI7S7808C8[];
extern  VTBL_ENTRY _ZTV7S7808C8[];
extern Class_Descriptor cd_S7808C9;
extern VTBL_ENTRY _ZTI7S7808C9[];
extern  VTBL_ENTRY _ZTV7S7808C9[];
extern Class_Descriptor cd_S7808C7;
extern VTBL_ENTRY _ZTI7S7808C7[];
extern  VTBL_ENTRY _ZTV7S7808C7[];
extern Class_Descriptor cd_S7808C6;
extern VTBL_ENTRY _ZTI7S7808C6[];
extern  VTBL_ENTRY _ZTV7S7808C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7808C6[];
extern Class_Descriptor cd_S7808C3;
extern VTBL_ENTRY _ZTI7S7808C3[];
extern  VTBL_ENTRY _ZTV7S7808C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7808C3[];
extern Class_Descriptor cd_S7808C4;
extern VTBL_ENTRY _ZTI7S7808C4[];
extern  VTBL_ENTRY _ZTV7S7808C4[];
extern Class_Descriptor cd_S7808C10;
extern VTBL_ENTRY _ZTI8S7808C10[];
extern  VTBL_ENTRY _ZTV8S7808C10[];
extern Class_Descriptor cd_S7808C2;
extern VTBL_ENTRY _ZTI7S7808C2[];
extern  VTBL_ENTRY _ZTV7S7808C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7808C2[];
static Base_Class bases_S7808C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7808C4,    ABISELECT(80,40), //bcp->offset
    39, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7808C8,    ABISELECT(104,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7808C9,    ABISELECT(128,64), //bcp->offset
    84, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7808C7,    ABISELECT(104,52), //bcp->offset
    51, //bcp->virtual_function_table_offset
    20, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7808C6,    ABISELECT(72,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S7808C3,    ABISELECT(72,36), //bcp->offset
    25, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S7808C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S7808C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S7808C2,    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
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7808C1[];
extern void _ZN7S7808C42v6Ev();
extern void _ZN7S7808C42v7Ev();
extern void _ZN7S7808C42v8Ev();
extern void _ZN7S7808C42v9Ev();
extern void _ZN7S7808C43v10Ev();
extern void _ZN8S7808C103v31Ev();
extern void _ZN8S7808C103v32Ev();
extern void _ZN8S7808C103v33Ev();
extern void _ZN8S7808C103v34Ev();
extern void _ZN8S7808C103v35Ev();
extern void _ZN8S7808C103v36Ev();
extern void _ZN8S7808C103v37Ev();
extern void _ZN7S7808C1D1Ev();
extern void _ZN7S7808C1D0Ev();
extern void _ZN7S7808C12v1Ev();
extern void _ZN7S7808C12v2Ev();
extern void _ZN7S7808C12v3Ev();
extern void _ZN7S7808C12v4Ev();
extern void _ZN7S7808C12v5Ev();
extern void ABISELECT(_ZTv0_n40_N7S7808C1D1Ev,_ZTv0_n20_N7S7808C1D1Ev)();
extern void ABISELECT(_ZThn72_N7S7808C1D1Ev,_ZThn36_N7S7808C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7808C1D0Ev,_ZTv0_n20_N7S7808C1D0Ev)();
extern void ABISELECT(_ZThn72_N7S7808C1D0Ev,_ZThn36_N7S7808C1D0Ev)() __attribute__((weak));
extern void _ZN7S7808C63v28Ev();
extern void _ZN7S7808C63v29Ev();
extern void _ZN7S7808C33v30Ev();
extern void _ZN7S7808C42v6Ev();
extern void _ZN7S7808C42v7Ev();
extern void _ZN7S7808C42v8Ev();
extern void _ZN7S7808C42v9Ev();
extern void _ZN7S7808C43v10Ev();
extern void _ZN7S7808C83v11Ev();
extern void _ZN7S7808C83v12Ev();
extern void _ZN7S7808C83v13Ev();
extern void _ZN7S7808C83v14Ev();
extern void _ZN7S7808C83v15Ev();
extern void _ZN7S7808C83v16Ev();
extern void ABISELECT(_ZTv0_n72_N7S7808C1D1Ev,_ZTv0_n36_N7S7808C1D1Ev)();
extern void ABISELECT(_ZThn104_N7S7808C1D1Ev,_ZThn52_N7S7808C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S7808C1D0Ev,_ZTv0_n36_N7S7808C1D0Ev)();
extern void ABISELECT(_ZThn104_N7S7808C1D0Ev,_ZThn52_N7S7808C1D0Ev)() __attribute__((weak));
extern void _ZN7S7808C73v23Ev();
extern void _ZN7S7808C73v24Ev();
extern void _ZN7S7808C73v25Ev();
extern void _ZN7S7808C73v26Ev();
extern void _ZN7S7808C73v27Ev();
extern void ABISELECT(_ZTvn24_n72_N7S7808C1D1Ev,_ZTvn12_n36_N7S7808C1D1Ev)();
extern void ABISELECT(_ZTvn24_n72_N7S7808C1D0Ev,_ZTvn12_n36_N7S7808C1D0Ev)();
extern void _ZN7S7808C93v17Ev();
extern void _ZN7S7808C93v18Ev();
extern void _ZN7S7808C93v19Ev();
extern void _ZN7S7808C93v20Ev();
extern void _ZN7S7808C93v21Ev();
extern void _ZN7S7808C93v22Ev();
static  VTBL_ENTRY vtc_S7808C1[] = {
  ABISELECT(104,52),
  ABISELECT(72,36),
  ABISELECT(80,40),
  ABISELECT(72,36),
  0,
  (VTBL_ENTRY)&(_ZTI7S7808C1[0]),
  (VTBL_ENTRY)&_ZN7S7808C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7808C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7808C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7808C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7808C43v10Ev,
  (VTBL_ENTRY)&_ZN8S7808C103v31Ev,
  (VTBL_ENTRY)&_ZN8S7808C103v32Ev,
  (VTBL_ENTRY)&_ZN8S7808C103v33Ev,
  (VTBL_ENTRY)&_ZN8S7808C103v34Ev,
  (VTBL_ENTRY)&_ZN8S7808C103v35Ev,
  (VTBL_ENTRY)&_ZN8S7808C103v36Ev,
  (VTBL_ENTRY)&_ZN8S7808C103v37Ev,
  (VTBL_ENTRY)&_ZN7S7808C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7808C1D0Ev,
  (VTBL_ENTRY)&_ZN7S7808C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7808C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7808C12v3Ev,
  (VTBL_ENTRY)&_ZN7S7808C12v4Ev,
  (VTBL_ENTRY)&_ZN7S7808C12v5Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-72,-36),
  ABISELECT(8,4),
  ABISELECT(32,16),
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI7S7808C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7808C1D1Ev,_ZTv0_n20_N7S7808C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7808C1D0Ev,_ZTv0_n20_N7S7808C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7808C63v28Ev,
  (VTBL_ENTRY)&_ZN7S7808C63v29Ev,
  (VTBL_ENTRY)&_ZN7S7808C33v30Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI7S7808C1[0]),
  (VTBL_ENTRY)&_ZN7S7808C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7808C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7808C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7808C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7808C43v10Ev,
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-104,-52),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-104,-52),
  (VTBL_ENTRY)&(_ZTI7S7808C1[0]),
  (VTBL_ENTRY)&_ZN7S7808C83v11Ev,
  (VTBL_ENTRY)&_ZN7S7808C83v12Ev,
  (VTBL_ENTRY)&_ZN7S7808C83v13Ev,
  (VTBL_ENTRY)&_ZN7S7808C83v14Ev,
  (VTBL_ENTRY)&_ZN7S7808C83v15Ev,
  (VTBL_ENTRY)&_ZN7S7808C83v16Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S7808C1D1Ev,_ZTv0_n36_N7S7808C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S7808C1D0Ev,_ZTv0_n36_N7S7808C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7808C73v23Ev,
  (VTBL_ENTRY)&_ZN7S7808C73v24Ev,
  (VTBL_ENTRY)&_ZN7S7808C73v25Ev,
  (VTBL_ENTRY)&_ZN7S7808C73v26Ev,
  (VTBL_ENTRY)&_ZN7S7808C73v27Ev,
  ABISELECT(-128,-64),
  (VTBL_ENTRY)&(_ZTI7S7808C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N7S7808C1D1Ev,_ZTvn12_n36_N7S7808C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N7S7808C1D0Ev,_ZTvn12_n36_N7S7808C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7808C93v17Ev,
  (VTBL_ENTRY)&_ZN7S7808C93v18Ev,
  (VTBL_ENTRY)&_ZN7S7808C93v19Ev,
  (VTBL_ENTRY)&_ZN7S7808C93v20Ev,
  (VTBL_ENTRY)&_ZN7S7808C93v21Ev,
  (VTBL_ENTRY)&_ZN7S7808C93v22Ev,
};
extern VTBL_ENTRY _ZTV7S7808C1[];
extern void _ZN7S7808C42v6Ev();
extern void _ZN7S7808C42v7Ev();
extern void _ZN7S7808C42v8Ev();
extern void _ZN7S7808C42v9Ev();
extern void _ZN7S7808C43v10Ev();
extern void _ZN8S7808C103v31Ev();
extern void _ZN8S7808C103v32Ev();
extern void _ZN8S7808C103v33Ev();
extern void _ZN8S7808C103v34Ev();
extern void _ZN8S7808C103v35Ev();
extern void _ZN8S7808C103v36Ev();
extern void _ZN8S7808C103v37Ev();
extern void _ZN7S7808C2D1Ev();
extern void _ZN7S7808C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7808C2__7S7808C1[] = {
  ABISELECT(104,52),
  ABISELECT(72,36),
  ABISELECT(80,40),
  ABISELECT(72,36),
  0,
  (VTBL_ENTRY)&(_ZTI7S7808C2[0]),
  (VTBL_ENTRY)&_ZN7S7808C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7808C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7808C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7808C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7808C43v10Ev,
  (VTBL_ENTRY)&_ZN8S7808C103v31Ev,
  (VTBL_ENTRY)&_ZN8S7808C103v32Ev,
  (VTBL_ENTRY)&_ZN8S7808C103v33Ev,
  (VTBL_ENTRY)&_ZN8S7808C103v34Ev,
  (VTBL_ENTRY)&_ZN8S7808C103v35Ev,
  (VTBL_ENTRY)&_ZN8S7808C103v36Ev,
  (VTBL_ENTRY)&_ZN8S7808C103v37Ev,
  (VTBL_ENTRY)&_ZN7S7808C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7808C2D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S7808C2D1Ev,_ZTv0_n20_N7S7808C2D1Ev)();
extern void ABISELECT(_ZThn72_N7S7808C2D1Ev,_ZThn36_N7S7808C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7808C2D0Ev,_ZTv0_n20_N7S7808C2D0Ev)();
extern void ABISELECT(_ZThn72_N7S7808C2D0Ev,_ZThn36_N7S7808C2D0Ev)() __attribute__((weak));
extern void _ZN7S7808C63v28Ev();
extern void _ZN7S7808C63v29Ev();
extern void _ZN7S7808C33v30Ev();
static  VTBL_ENTRY _tg__ZTV7S7808C3__7S7808C2__7S7808C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(-72,-36),
  ABISELECT(8,4),
  ABISELECT(32,16),
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI7S7808C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7808C2D1Ev,_ZTv0_n20_N7S7808C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7808C2D0Ev,_ZTv0_n20_N7S7808C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7808C63v28Ev,
  (VTBL_ENTRY)&_ZN7S7808C63v29Ev,
  (VTBL_ENTRY)&_ZN7S7808C33v30Ev,
};
extern void _ZN7S7808C42v6Ev();
extern void _ZN7S7808C42v7Ev();
extern void _ZN7S7808C42v8Ev();
extern void _ZN7S7808C42v9Ev();
extern void _ZN7S7808C43v10Ev();
static  VTBL_ENTRY _tg__ZTV7S7808C4__7S7808C2__7S7808C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI7S7808C2[0]),
  (VTBL_ENTRY)&_ZN7S7808C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7808C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7808C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7808C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7808C43v10Ev,
};
extern void _ZN7S7808C83v11Ev();
extern void _ZN7S7808C83v12Ev();
extern void _ZN7S7808C83v13Ev();
extern void _ZN7S7808C83v14Ev();
extern void _ZN7S7808C83v15Ev();
extern void _ZN7S7808C83v16Ev();
extern void ABISELECT(_ZTv0_n72_N7S7808C2D1Ev,_ZTv0_n36_N7S7808C2D1Ev)();
extern void ABISELECT(_ZThn104_N7S7808C2D1Ev,_ZThn52_N7S7808C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S7808C2D0Ev,_ZTv0_n36_N7S7808C2D0Ev)();
extern void ABISELECT(_ZThn104_N7S7808C2D0Ev,_ZThn52_N7S7808C2D0Ev)() __attribute__((weak));
extern void _ZN7S7808C73v23Ev();
extern void _ZN7S7808C73v24Ev();
extern void _ZN7S7808C73v25Ev();
extern void _ZN7S7808C73v26Ev();
extern void _ZN7S7808C73v27Ev();
static  VTBL_ENTRY _tg__ZTV7S7808C7__7S7808C2__7S7808C1[] = {
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-104,-52),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-104,-52),
  (VTBL_ENTRY)&(_ZTI7S7808C2[0]),
  (VTBL_ENTRY)&_ZN7S7808C83v11Ev,
  (VTBL_ENTRY)&_ZN7S7808C83v12Ev,
  (VTBL_ENTRY)&_ZN7S7808C83v13Ev,
  (VTBL_ENTRY)&_ZN7S7808C83v14Ev,
  (VTBL_ENTRY)&_ZN7S7808C83v15Ev,
  (VTBL_ENTRY)&_ZN7S7808C83v16Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S7808C2D1Ev,_ZTv0_n36_N7S7808C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S7808C2D0Ev,_ZTv0_n36_N7S7808C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7808C73v23Ev,
  (VTBL_ENTRY)&_ZN7S7808C73v24Ev,
  (VTBL_ENTRY)&_ZN7S7808C73v25Ev,
  (VTBL_ENTRY)&_ZN7S7808C73v26Ev,
  (VTBL_ENTRY)&_ZN7S7808C73v27Ev,
};
extern void ABISELECT(_ZTvn24_n72_N7S7808C2D1Ev,_ZTvn12_n36_N7S7808C2D1Ev)();
extern void ABISELECT(_ZTvn24_n72_N7S7808C2D0Ev,_ZTvn12_n36_N7S7808C2D0Ev)();
extern void _ZN7S7808C93v17Ev();
extern void _ZN7S7808C93v18Ev();
extern void _ZN7S7808C93v19Ev();
extern void _ZN7S7808C93v20Ev();
extern void _ZN7S7808C93v21Ev();
extern void _ZN7S7808C93v22Ev();
static  VTBL_ENTRY _tg__ZTV7S7808C97S7808C7__7S7808C2__7S7808C1[] = {
  ABISELECT(-128,-64),
  (VTBL_ENTRY)&(_ZTI7S7808C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N7S7808C2D1Ev,_ZTvn12_n36_N7S7808C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N7S7808C2D0Ev,_ZTvn12_n36_N7S7808C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7808C93v17Ev,
  (VTBL_ENTRY)&_ZN7S7808C93v18Ev,
  (VTBL_ENTRY)&_ZN7S7808C93v19Ev,
  (VTBL_ENTRY)&_ZN7S7808C93v20Ev,
  (VTBL_ENTRY)&_ZN7S7808C93v21Ev,
  (VTBL_ENTRY)&_ZN7S7808C93v22Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S7808C3D1Ev,_ZTv0_n20_N7S7808C3D1Ev)();
extern void _ZN7S7808C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7808C3D0Ev,_ZTv0_n20_N7S7808C3D0Ev)();
extern void _ZN7S7808C3D0Ev() __attribute__((weak));
extern void _ZN7S7808C63v28Ev();
extern void _ZN7S7808C63v29Ev();
extern void _ZN7S7808C33v30Ev();
static  VTBL_ENTRY _tg__ZTV7S7808C3__7S7808C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(8,4),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7808C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7808C3D1Ev,_ZTv0_n20_N7S7808C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7808C3D0Ev,_ZTv0_n20_N7S7808C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7808C63v28Ev,
  (VTBL_ENTRY)&_ZN7S7808C63v29Ev,
  (VTBL_ENTRY)&_ZN7S7808C33v30Ev,
};
extern void _ZN7S7808C42v6Ev();
extern void _ZN7S7808C42v7Ev();
extern void _ZN7S7808C42v8Ev();
extern void _ZN7S7808C42v9Ev();
extern void _ZN7S7808C43v10Ev();
static  VTBL_ENTRY _tg__ZTV7S7808C4__7S7808C3__7S7808C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7808C3[0]),
  (VTBL_ENTRY)&_ZN7S7808C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7808C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7808C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7808C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7808C43v10Ev,
};
extern void _ZN7S7808C83v11Ev();
extern void _ZN7S7808C83v12Ev();
extern void _ZN7S7808C83v13Ev();
extern void _ZN7S7808C83v14Ev();
extern void _ZN7S7808C83v15Ev();
extern void _ZN7S7808C83v16Ev();
extern void ABISELECT(_ZTv0_n72_N7S7808C3D1Ev,_ZTv0_n36_N7S7808C3D1Ev)();
extern void ABISELECT(_ZThn32_N7S7808C3D1Ev,_ZThn16_N7S7808C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S7808C3D0Ev,_ZTv0_n36_N7S7808C3D0Ev)();
extern void ABISELECT(_ZThn32_N7S7808C3D0Ev,_ZThn16_N7S7808C3D0Ev)() __attribute__((weak));
extern void _ZN7S7808C73v23Ev();
extern void _ZN7S7808C73v24Ev();
extern void _ZN7S7808C73v25Ev();
extern void _ZN7S7808C73v26Ev();
extern void _ZN7S7808C73v27Ev();
static  VTBL_ENTRY _tg__ZTV7S7808C7__7S7808C3__7S7808C1[] = {
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-16),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S7808C3[0]),
  (VTBL_ENTRY)&_ZN7S7808C83v11Ev,
  (VTBL_ENTRY)&_ZN7S7808C83v12Ev,
  (VTBL_ENTRY)&_ZN7S7808C83v13Ev,
  (VTBL_ENTRY)&_ZN7S7808C83v14Ev,
  (VTBL_ENTRY)&_ZN7S7808C83v15Ev,
  (VTBL_ENTRY)&_ZN7S7808C83v16Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S7808C3D1Ev,_ZTv0_n36_N7S7808C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S7808C3D0Ev,_ZTv0_n36_N7S7808C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7808C73v23Ev,
  (VTBL_ENTRY)&_ZN7S7808C73v24Ev,
  (VTBL_ENTRY)&_ZN7S7808C73v25Ev,
  (VTBL_ENTRY)&_ZN7S7808C73v26Ev,
  (VTBL_ENTRY)&_ZN7S7808C73v27Ev,
};
extern void ABISELECT(_ZTvn24_n72_N7S7808C3D1Ev,_ZTvn12_n36_N7S7808C3D1Ev)();
extern void ABISELECT(_ZTvn24_n72_N7S7808C3D0Ev,_ZTvn12_n36_N7S7808C3D0Ev)();
extern void _ZN7S7808C93v17Ev();
extern void _ZN7S7808C93v18Ev();
extern void _ZN7S7808C93v19Ev();
extern void _ZN7S7808C93v20Ev();
extern void _ZN7S7808C93v21Ev();
extern void _ZN7S7808C93v22Ev();
static  VTBL_ENTRY _tg__ZTV7S7808C97S7808C7__7S7808C3__7S7808C1[] = {
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI7S7808C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N7S7808C3D1Ev,_ZTvn12_n36_N7S7808C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N7S7808C3D0Ev,_ZTvn12_n36_N7S7808C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7808C93v17Ev,
  (VTBL_ENTRY)&_ZN7S7808C93v18Ev,
  (VTBL_ENTRY)&_ZN7S7808C93v19Ev,
  (VTBL_ENTRY)&_ZN7S7808C93v20Ev,
  (VTBL_ENTRY)&_ZN7S7808C93v21Ev,
  (VTBL_ENTRY)&_ZN7S7808C93v22Ev,
};
extern void _ZN7S7808C6D1Ev();
extern void _ZN7S7808C6D0Ev();
extern void _ZN7S7808C63v28Ev();
extern void _ZN7S7808C63v29Ev();
static  VTBL_ENTRY _tg__ZTV7S7808C6__7S7808C1[] = {
  ABISELECT(8,4),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7808C6[0]),
  (VTBL_ENTRY)&_ZN7S7808C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7808C6D0Ev,
  (VTBL_ENTRY)&_ZN7S7808C63v28Ev,
  (VTBL_ENTRY)&_ZN7S7808C63v29Ev,
};
extern void _ZN7S7808C83v11Ev();
extern void _ZN7S7808C83v12Ev();
extern void _ZN7S7808C83v13Ev();
extern void _ZN7S7808C83v14Ev();
extern void _ZN7S7808C83v15Ev();
extern void _ZN7S7808C83v16Ev();
extern void ABISELECT(_ZTv0_n72_N7S7808C6D1Ev,_ZTv0_n36_N7S7808C6D1Ev)();
extern void ABISELECT(_ZThn32_N7S7808C6D1Ev,_ZThn16_N7S7808C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S7808C6D0Ev,_ZTv0_n36_N7S7808C6D0Ev)();
extern void ABISELECT(_ZThn32_N7S7808C6D0Ev,_ZThn16_N7S7808C6D0Ev)() __attribute__((weak));
extern void _ZN7S7808C73v23Ev();
extern void _ZN7S7808C73v24Ev();
extern void _ZN7S7808C73v25Ev();
extern void _ZN7S7808C73v26Ev();
extern void _ZN7S7808C73v27Ev();
static  VTBL_ENTRY _tg__ZTV7S7808C7__7S7808C6__7S7808C1[] = {
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-16),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S7808C6[0]),
  (VTBL_ENTRY)&_ZN7S7808C83v11Ev,
  (VTBL_ENTRY)&_ZN7S7808C83v12Ev,
  (VTBL_ENTRY)&_ZN7S7808C83v13Ev,
  (VTBL_ENTRY)&_ZN7S7808C83v14Ev,
  (VTBL_ENTRY)&_ZN7S7808C83v15Ev,
  (VTBL_ENTRY)&_ZN7S7808C83v16Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S7808C6D1Ev,_ZTv0_n36_N7S7808C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S7808C6D0Ev,_ZTv0_n36_N7S7808C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7808C73v23Ev,
  (VTBL_ENTRY)&_ZN7S7808C73v24Ev,
  (VTBL_ENTRY)&_ZN7S7808C73v25Ev,
  (VTBL_ENTRY)&_ZN7S7808C73v26Ev,
  (VTBL_ENTRY)&_ZN7S7808C73v27Ev,
};
extern void ABISELECT(_ZTvn24_n72_N7S7808C6D1Ev,_ZTvn12_n36_N7S7808C6D1Ev)();
extern void ABISELECT(_ZTvn24_n72_N7S7808C6D0Ev,_ZTvn12_n36_N7S7808C6D0Ev)();
extern void _ZN7S7808C93v17Ev();
extern void _ZN7S7808C93v18Ev();
extern void _ZN7S7808C93v19Ev();
extern void _ZN7S7808C93v20Ev();
extern void _ZN7S7808C93v21Ev();
extern void _ZN7S7808C93v22Ev();
static  VTBL_ENTRY _tg__ZTV7S7808C97S7808C7__7S7808C6__7S7808C1[] = {
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI7S7808C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N7S7808C6D1Ev,_ZTvn12_n36_N7S7808C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N7S7808C6D0Ev,_ZTvn12_n36_N7S7808C6D0Ev),
  (VTBL_ENTRY)&_ZN7S7808C93v17Ev,
  (VTBL_ENTRY)&_ZN7S7808C93v18Ev,
  (VTBL_ENTRY)&_ZN7S7808C93v19Ev,
  (VTBL_ENTRY)&_ZN7S7808C93v20Ev,
  (VTBL_ENTRY)&_ZN7S7808C93v21Ev,
  (VTBL_ENTRY)&_ZN7S7808C93v22Ev,
};
extern void _ZN7S7808C42v6Ev();
extern void _ZN7S7808C42v7Ev();
extern void _ZN7S7808C42v8Ev();
extern void _ZN7S7808C42v9Ev();
extern void _ZN7S7808C43v10Ev();
static  VTBL_ENTRY _tg__ZTV7S7808C4__7S7808C6__7S7808C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7808C6[0]),
  (VTBL_ENTRY)&_ZN7S7808C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7808C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7808C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7808C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7808C43v10Ev,
};
static  VTT_ENTRY vtt_S7808C1[] = {
  {&(_ZTV7S7808C1[6]),  6,94},
  {&(_tg__ZTV7S7808C2__7S7808C1[6]),  6,20},
  {&(_tg__ZTV7S7808C3__7S7808C2__7S7808C1[9]),  9,14},
  {&(_tg__ZTV7S7808C4__7S7808C2__7S7808C1[7]),  7,12},
  {&(_tg__ZTV7S7808C3__7S7808C2__7S7808C1[9]),  9,14},
  {&(_tg__ZTV7S7808C7__7S7808C2__7S7808C1[20]),  20,33},
  {&(_tg__ZTV7S7808C97S7808C7__7S7808C2__7S7808C1[2]),  2,10},
  {&(_ZTV7S7808C1[34]),  34,94},
  {&(_ZTV7S7808C1[46]),  46,94},
  {&(_ZTV7S7808C1[34]),  34,94},
  {&(_ZTV7S7808C1[71]),  71,94},
  {&(_ZTV7S7808C1[86]),  86,94},
  {&(_tg__ZTV7S7808C3__7S7808C1[8]),  8,13},
  {&(_tg__ZTV7S7808C4__7S7808C3__7S7808C1[7]),  7,12},
  {&(_tg__ZTV7S7808C3__7S7808C1[8]),  8,13},
  {&(_tg__ZTV7S7808C7__7S7808C3__7S7808C1[20]),  20,33},
  {&(_tg__ZTV7S7808C97S7808C7__7S7808C3__7S7808C1[2]),  2,10},
  {&(_tg__ZTV7S7808C6__7S7808C1[4]),  4,8},
  {&(_tg__ZTV7S7808C7__7S7808C6__7S7808C1[20]),  20,33},
  {&(_tg__ZTV7S7808C97S7808C7__7S7808C6__7S7808C1[2]),  2,10},
  {&(_tg__ZTV7S7808C4__7S7808C6__7S7808C1[7]),  7,12},
};
extern VTBL_ENTRY _ZTI7S7808C1[];
extern  VTBL_ENTRY _ZTV7S7808C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7808C1[];
static VTBL_ENTRY alt_thunk_names23[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S7808C6D0Ev,_ZTv0_n36_N7S7808C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7808C6D0Ev,_ZThn16_N7S7808C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S7808C6D1Ev,_ZTv0_n36_N7S7808C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7808C6D1Ev,_ZThn16_N7S7808C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S7808C3D0Ev,_ZTv0_n36_N7S7808C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7808C3D0Ev,_ZThn16_N7S7808C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S7808C3D1Ev,_ZTv0_n36_N7S7808C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7808C3D1Ev,_ZThn16_N7S7808C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7808C3D0Ev,_ZTv0_n20_N7S7808C3D0Ev), // 
  (VTBL_ENTRY)_ZN7S7808C3D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7808C3D1Ev,_ZTv0_n20_N7S7808C3D1Ev), // 
  (VTBL_ENTRY)_ZN7S7808C3D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S7808C2D0Ev,_ZTv0_n36_N7S7808C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S7808C2D0Ev,_ZThn52_N7S7808C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S7808C2D1Ev,_ZTv0_n36_N7S7808C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S7808C2D1Ev,_ZThn52_N7S7808C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7808C2D0Ev,_ZTv0_n20_N7S7808C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N7S7808C2D0Ev,_ZThn36_N7S7808C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7808C2D1Ev,_ZTv0_n20_N7S7808C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N7S7808C2D1Ev,_ZThn36_N7S7808C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S7808C1D0Ev,_ZTv0_n36_N7S7808C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S7808C1D0Ev,_ZThn52_N7S7808C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S7808C1D1Ev,_ZTv0_n36_N7S7808C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S7808C1D1Ev,_ZThn52_N7S7808C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7808C1D0Ev,_ZTv0_n20_N7S7808C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N7S7808C1D0Ev,_ZThn36_N7S7808C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7808C1D1Ev,_ZTv0_n20_N7S7808C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N7S7808C1D1Ev,_ZThn36_N7S7808C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7808C1 = {  "S7808C1", // class name
  bases_S7808C1, 9,
  &(vtc_S7808C1[0]), // expected_vtbl_contents
  &(vtt_S7808C1[0]), // expected_vtt_contents
  ABISELECT(136,68), // object size
  NSPAIRA(_ZTI7S7808C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7808C1),94, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7808C1),21, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names23,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7160C2  {
  ::S2120C13_nt s7160c2f0;
  ::S2120C13_nt s7160c2f1;
  void *s7160c2f2;
  int s7160c2f3;
  ::S601C8 s7160c2f4;
  int s7160c2f5:2;
  int s7160c2f6:2;
  unsigned char s7160c2f7:1;
  unsigned char s7160c2f8:1;
  ::S601C53 s7160c2f9;
  ::S601C11 s7160c2f10[2];
  virtual  ~S7160C2(); // _ZN7S7160C2D1Ev
  virtual void  v8(); // _ZN7S7160C22v8Ev
  virtual void  v9(); // _ZN7S7160C22v9Ev
  virtual void  v10(); // _ZN7S7160C23v10Ev
  virtual void  v11(); // _ZN7S7160C23v11Ev
  virtual void  v12(); // _ZN7S7160C23v12Ev
  virtual void  v13(); // _ZN7S7160C23v13Ev
  virtual void  v14(); // _ZN7S7160C23v14Ev
  virtual void  v15(); // _ZN7S7160C23v15Ev
  virtual void  v16(); // _ZN7S7160C23v16Ev
  virtual void  v17(); // _ZN7S7160C23v17Ev
  virtual void  v18(); // _ZN7S7160C23v18Ev
  virtual void  v19(); // _ZN7S7160C23v19Ev
  virtual void  v20(); // _ZN7S7160C23v20Ev
  virtual void  v21(); // _ZN7S7160C23v21Ev
  virtual void  v22(); // _ZN7S7160C23v22Ev
  S7160C2(); // tgen
};
//SIG(-1 S7160C2) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 FC2{ m FC3{ m FL[2]}} FC2 Fp Fi FU4{ m FC5{ Fi:4 Fi:4 Fi:4 Fi:2 Fi:1 Fi:17} Fi} Fi:2 Fi:2 Fc:1 Fc:1 FC6{ m Fp Fp} FC7{ Fp Fp}[2]}


 S7160C2 ::~S7160C2(){ note_dtor("S7160C2", this);}
void  S7160C2 ::v8(){vfunc_called(this, "_ZN7S7160C22v8Ev");}
void  S7160C2 ::v9(){vfunc_called(this, "_ZN7S7160C22v9Ev");}
void  S7160C2 ::v10(){vfunc_called(this, "_ZN7S7160C23v10Ev");}
void  S7160C2 ::v11(){vfunc_called(this, "_ZN7S7160C23v11Ev");}
void  S7160C2 ::v12(){vfunc_called(this, "_ZN7S7160C23v12Ev");}
void  S7160C2 ::v13(){vfunc_called(this, "_ZN7S7160C23v13Ev");}
void  S7160C2 ::v14(){vfunc_called(this, "_ZN7S7160C23v14Ev");}
void  S7160C2 ::v15(){vfunc_called(this, "_ZN7S7160C23v15Ev");}
void  S7160C2 ::v16(){vfunc_called(this, "_ZN7S7160C23v16Ev");}
void  S7160C2 ::v17(){vfunc_called(this, "_ZN7S7160C23v17Ev");}
void  S7160C2 ::v18(){vfunc_called(this, "_ZN7S7160C23v18Ev");}
void  S7160C2 ::v19(){vfunc_called(this, "_ZN7S7160C23v19Ev");}
void  S7160C2 ::v20(){vfunc_called(this, "_ZN7S7160C23v20Ev");}
void  S7160C2 ::v21(){vfunc_called(this, "_ZN7S7160C23v21Ev");}
void  S7160C2 ::v22(){vfunc_called(this, "_ZN7S7160C23v22Ev");}
S7160C2 ::S7160C2(){ note_ctor("S7160C2", this);} // tgen

static void Test_S7160C2()
{
  extern Class_Descriptor cd_S7160C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,20)];
    init_test(&cd_S7160C2, buf);
    S7160C2 *dp, &lv = *(dp=new (buf) S7160C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,76), "sizeof(S7160C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7160C2)");
    check_field_offset(lv, s7160c2f0, ABISELECT(8,4), "S7160C2.s7160c2f0");
    check_field_offset(lv, s7160c2f1, ABISELECT(24,20), "S7160C2.s7160c2f1");
    check_field_offset(lv, s7160c2f2, ABISELECT(40,36), "S7160C2.s7160c2f2");
    check_field_offset(lv, s7160c2f3, ABISELECT(48,40), "S7160C2.s7160c2f3");
    check_field_offset(lv, s7160c2f4, ABISELECT(52,44), "S7160C2.s7160c2f4");
    set_bf_and_test(lv, s7160c2f5, ABISELECT(56,48), 0, 2, 1, "S7160C2");
    set_bf_and_test(lv, s7160c2f5, ABISELECT(56,48), 0, 2, hide_sll(1LL<<1), "S7160C2");
    set_bf_and_test(lv, s7160c2f6, ABISELECT(56,48), 2, 2, 1, "S7160C2");
    set_bf_and_test(lv, s7160c2f6, ABISELECT(56,48), 2, 2, hide_sll(1LL<<1), "S7160C2");
    set_bf_and_test(lv, s7160c2f7, ABISELECT(56,48), 4, 1, 1, "S7160C2");
    set_bf_and_test(lv, s7160c2f8, ABISELECT(56,48), 5, 1, 1, "S7160C2");
    check_field_offset(lv, s7160c2f9, ABISELECT(64,52), "S7160C2.s7160c2f9");
    check_field_offset(lv, s7160c2f10, ABISELECT(80,60), "S7160C2.s7160c2f10");
    test_class_info(&lv, &cd_S7160C2);
    dp->~S7160C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7160C2(Test_S7160C2, "S7160C2", ABISELECT(112,76));

#else // __cplusplus

extern void _ZN7S7160C2C1Ev();
extern void _ZN7S7160C2D1Ev();
Name_Map name_map_S7160C2[] = {
  NSPAIR(_ZN7S7160C2C1Ev),
  NSPAIR(_ZN7S7160C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7160C2[];
extern void _ZN7S7160C2D1Ev();
extern void _ZN7S7160C2D0Ev();
extern void _ZN7S7160C22v8Ev();
extern void _ZN7S7160C22v9Ev();
extern void _ZN7S7160C23v10Ev();
extern void _ZN7S7160C23v11Ev();
extern void _ZN7S7160C23v12Ev();
extern void _ZN7S7160C23v13Ev();
extern void _ZN7S7160C23v14Ev();
extern void _ZN7S7160C23v15Ev();
extern void _ZN7S7160C23v16Ev();
extern void _ZN7S7160C23v17Ev();
extern void _ZN7S7160C23v18Ev();
extern void _ZN7S7160C23v19Ev();
extern void _ZN7S7160C23v20Ev();
extern void _ZN7S7160C23v21Ev();
extern void _ZN7S7160C23v22Ev();
static  VTBL_ENTRY vtc_S7160C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7160C2[0]),
  (VTBL_ENTRY)&_ZN7S7160C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7160C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7160C22v8Ev,
  (VTBL_ENTRY)&_ZN7S7160C22v9Ev,
  (VTBL_ENTRY)&_ZN7S7160C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7160C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7160C23v12Ev,
  (VTBL_ENTRY)&_ZN7S7160C23v13Ev,
  (VTBL_ENTRY)&_ZN7S7160C23v14Ev,
  (VTBL_ENTRY)&_ZN7S7160C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7160C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7160C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7160C23v18Ev,
  (VTBL_ENTRY)&_ZN7S7160C23v19Ev,
  (VTBL_ENTRY)&_ZN7S7160C23v20Ev,
  (VTBL_ENTRY)&_ZN7S7160C23v21Ev,
  (VTBL_ENTRY)&_ZN7S7160C23v22Ev,
};
extern VTBL_ENTRY _ZTI7S7160C2[];
extern  VTBL_ENTRY _ZTV7S7160C2[];
Class_Descriptor cd_S7160C2 = {  "S7160C2", // class name
  0,0,//no base classes
  &(vtc_S7160C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,76), // object size
  NSPAIRA(_ZTI7S7160C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7160C2),19, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7160C1  : S7160C2 {
  char s7160c1f0;
  ::S601C29_nt s7160c1f1;
  ::S601C29_nt s7160c1f2;
  ::S601C29_nt s7160c1f3;
  void *s7160c1f4;
  void *s7160c1f5;
  virtual  ~S7160C1(); // _ZN7S7160C1D1Ev
  virtual void  v1(); // _ZN7S7160C12v1Ev
  virtual void  v2(); // _ZN7S7160C12v2Ev
  virtual void  v3(); // _ZN7S7160C12v3Ev
  virtual void  v4(); // _ZN7S7160C12v4Ev
  virtual void  v5(); // _ZN7S7160C12v5Ev
  virtual void  v6(); // _ZN7S7160C12v6Ev
  virtual void  v7(); // _ZN7S7160C12v7Ev
  S7160C1(); // tgen
};
//SIG(1 S7160C1) C1{ BC2{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 FC3{ m FC4{ m FL[2]}} FC3 Fp Fi FU5{ m FC6{ Fi:4 Fi:4 Fi:4 Fi:2 Fi:1 Fi:17} Fi} Fi:2 Fi:2 Fc:1 Fc:1 FC7{ m Fp Fp} FC8{ Fp Fp}[2]} vd v1 v2 v3 v4 v5 v6 v7 Fc FC9{ m FC10{ m FL}} FC9 FC9 Fp Fp}


 S7160C1 ::~S7160C1(){ note_dtor("S7160C1", this);}
void  S7160C1 ::v1(){vfunc_called(this, "_ZN7S7160C12v1Ev");}
void  S7160C1 ::v2(){vfunc_called(this, "_ZN7S7160C12v2Ev");}
void  S7160C1 ::v3(){vfunc_called(this, "_ZN7S7160C12v3Ev");}
void  S7160C1 ::v4(){vfunc_called(this, "_ZN7S7160C12v4Ev");}
void  S7160C1 ::v5(){vfunc_called(this, "_ZN7S7160C12v5Ev");}
void  S7160C1 ::v6(){vfunc_called(this, "_ZN7S7160C12v6Ev");}
void  S7160C1 ::v7(){vfunc_called(this, "_ZN7S7160C12v7Ev");}
S7160C1 ::S7160C1(){ note_ctor("S7160C1", this);} // tgen

static void Test_S7160C1()
{
  extern Class_Descriptor cd_S7160C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(21,29)];
    init_test(&cd_S7160C1, buf);
    S7160C1 *dp, &lv = *(dp=new (buf) S7160C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,112), "sizeof(S7160C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7160C1)");
    check_base_class_offset(lv, (S7160C2*), 0, "S7160C1");
    check_field_offset(lv, s7160c1f0, ABISELECT(112,76), "S7160C1.s7160c1f0");
    check_field_offset(lv, s7160c1f1, ABISELECT(120,80), "S7160C1.s7160c1f1");
    check_field_offset(lv, s7160c1f2, ABISELECT(128,88), "S7160C1.s7160c1f2");
    check_field_offset(lv, s7160c1f3, ABISELECT(136,96), "S7160C1.s7160c1f3");
    check_field_offset(lv, s7160c1f4, ABISELECT(144,104), "S7160C1.s7160c1f4");
    check_field_offset(lv, s7160c1f5, ABISELECT(152,108), "S7160C1.s7160c1f5");
    test_class_info(&lv, &cd_S7160C1);
    dp->~S7160C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7160C1(Test_S7160C1, "S7160C1", ABISELECT(160,112));

#else // __cplusplus

extern void _ZN7S7160C1C1Ev();
extern void _ZN7S7160C1D1Ev();
Name_Map name_map_S7160C1[] = {
  NSPAIR(_ZN7S7160C1C1Ev),
  NSPAIR(_ZN7S7160C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7160C2;
extern VTBL_ENTRY _ZTI7S7160C2[];
extern  VTBL_ENTRY _ZTV7S7160C2[];
static Base_Class bases_S7160C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7160C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7160C1[];
extern void _ZN7S7160C1D1Ev();
extern void _ZN7S7160C1D0Ev();
extern void _ZN7S7160C22v8Ev();
extern void _ZN7S7160C22v9Ev();
extern void _ZN7S7160C23v10Ev();
extern void _ZN7S7160C23v11Ev();
extern void _ZN7S7160C23v12Ev();
extern void _ZN7S7160C23v13Ev();
extern void _ZN7S7160C23v14Ev();
extern void _ZN7S7160C23v15Ev();
extern void _ZN7S7160C23v16Ev();
extern void _ZN7S7160C23v17Ev();
extern void _ZN7S7160C23v18Ev();
extern void _ZN7S7160C23v19Ev();
extern void _ZN7S7160C23v20Ev();
extern void _ZN7S7160C23v21Ev();
extern void _ZN7S7160C23v22Ev();
extern void _ZN7S7160C12v1Ev();
extern void _ZN7S7160C12v2Ev();
extern void _ZN7S7160C12v3Ev();
extern void _ZN7S7160C12v4Ev();
extern void _ZN7S7160C12v5Ev();
extern void _ZN7S7160C12v6Ev();
extern void _ZN7S7160C12v7Ev();
static  VTBL_ENTRY vtc_S7160C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7160C1[0]),
  (VTBL_ENTRY)&_ZN7S7160C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7160C1D0Ev,
  (VTBL_ENTRY)&_ZN7S7160C22v8Ev,
  (VTBL_ENTRY)&_ZN7S7160C22v9Ev,
  (VTBL_ENTRY)&_ZN7S7160C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7160C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7160C23v12Ev,
  (VTBL_ENTRY)&_ZN7S7160C23v13Ev,
  (VTBL_ENTRY)&_ZN7S7160C23v14Ev,
  (VTBL_ENTRY)&_ZN7S7160C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7160C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7160C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7160C23v18Ev,
  (VTBL_ENTRY)&_ZN7S7160C23v19Ev,
  (VTBL_ENTRY)&_ZN7S7160C23v20Ev,
  (VTBL_ENTRY)&_ZN7S7160C23v21Ev,
  (VTBL_ENTRY)&_ZN7S7160C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7160C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7160C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7160C12v3Ev,
  (VTBL_ENTRY)&_ZN7S7160C12v4Ev,
  (VTBL_ENTRY)&_ZN7S7160C12v5Ev,
  (VTBL_ENTRY)&_ZN7S7160C12v6Ev,
  (VTBL_ENTRY)&_ZN7S7160C12v7Ev,
};
extern VTBL_ENTRY _ZTI7S7160C1[];
extern  VTBL_ENTRY _ZTV7S7160C1[];
Class_Descriptor cd_S7160C1 = {  "S7160C1", // class name
  bases_S7160C1, 1,
  &(vtc_S7160C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(160,112), // object size
  NSPAIRA(_ZTI7S7160C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7160C1),26, //virtual function table var
  2, // 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  S3478C6  {
  virtual  ~S3478C6(); // _ZN7S3478C6D1Ev
  virtual void  v15(); // _ZN7S3478C63v15Ev
  virtual void  v16(); // _ZN7S3478C63v16Ev
  virtual void  v17(); // _ZN7S3478C63v17Ev
  virtual void  v18(); // _ZN7S3478C63v18Ev
  virtual void  v19(); // _ZN7S3478C63v19Ev
  virtual void  v20(); // _ZN7S3478C63v20Ev
  S3478C6(); // tgen
};
//SIG(-1 S3478C6) C1{ vd v1 v2 v3 v4 v5 v6}


 S3478C6 ::~S3478C6(){ note_dtor("S3478C6", this);}
void  S3478C6 ::v15(){vfunc_called(this, "_ZN7S3478C63v15Ev");}
void  S3478C6 ::v16(){vfunc_called(this, "_ZN7S3478C63v16Ev");}
void  S3478C6 ::v17(){vfunc_called(this, "_ZN7S3478C63v17Ev");}
void  S3478C6 ::v18(){vfunc_called(this, "_ZN7S3478C63v18Ev");}
void  S3478C6 ::v19(){vfunc_called(this, "_ZN7S3478C63v19Ev");}
void  S3478C6 ::v20(){vfunc_called(this, "_ZN7S3478C63v20Ev");}
S3478C6 ::S3478C6(){ note_ctor("S3478C6", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S3478C6C1Ev();
extern void _ZN7S3478C6D1Ev();
Name_Map name_map_S3478C6[] = {
  NSPAIR(_ZN7S3478C6C1Ev),
  NSPAIR(_ZN7S3478C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3478C6[];
extern void _ZN7S3478C6D1Ev();
extern void _ZN7S3478C6D0Ev();
extern void _ZN7S3478C63v15Ev();
extern void _ZN7S3478C63v16Ev();
extern void _ZN7S3478C63v17Ev();
extern void _ZN7S3478C63v18Ev();
extern void _ZN7S3478C63v19Ev();
extern void _ZN7S3478C63v20Ev();
static  VTBL_ENTRY vtc_S3478C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3478C6[0]),
  (VTBL_ENTRY)&_ZN7S3478C6D1Ev,
  (VTBL_ENTRY)&_ZN7S3478C6D0Ev,
  (VTBL_ENTRY)&_ZN7S3478C63v15Ev,
  (VTBL_ENTRY)&_ZN7S3478C63v16Ev,
  (VTBL_ENTRY)&_ZN7S3478C63v17Ev,
  (VTBL_ENTRY)&_ZN7S3478C63v18Ev,
  (VTBL_ENTRY)&_ZN7S3478C63v19Ev,
  (VTBL_ENTRY)&_ZN7S3478C63v20Ev,
};
extern VTBL_ENTRY _ZTI7S3478C6[];
extern  VTBL_ENTRY _ZTV7S3478C6[];
Class_Descriptor cd_S3478C6 = {  "S3478C6", // class name
  0,0,//no base classes
  &(vtc_S3478C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3478C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3478C6),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3478C5  {
  ::S3478C6 s3478c5f0;
  int s3478c5f1;
  virtual void  v9(); // _ZN7S3478C52v9Ev
  virtual void  v10(); // _ZN7S3478C53v10Ev
  virtual void  v11(); // _ZN7S3478C53v11Ev
  virtual void  v12(); // _ZN7S3478C53v12Ev
  virtual void  v13(); // _ZN7S3478C53v13Ev
  virtual void  v14(); // _ZN7S3478C53v14Ev
  ~S3478C5(); // tgen
  S3478C5(); // tgen
};
//SIG(-1 S3478C5) C1{ v1 v2 v3 v4 v5 v6 FC2{ vd v7 v8 v9 v10 v11 v12} Fi}


void  S3478C5 ::v9(){vfunc_called(this, "_ZN7S3478C52v9Ev");}
void  S3478C5 ::v10(){vfunc_called(this, "_ZN7S3478C53v10Ev");}
void  S3478C5 ::v11(){vfunc_called(this, "_ZN7S3478C53v11Ev");}
void  S3478C5 ::v12(){vfunc_called(this, "_ZN7S3478C53v12Ev");}
void  S3478C5 ::v13(){vfunc_called(this, "_ZN7S3478C53v13Ev");}
void  S3478C5 ::v14(){vfunc_called(this, "_ZN7S3478C53v14Ev");}
S3478C5 ::~S3478C5(){ note_dtor("S3478C5", this);} // tgen
S3478C5 ::S3478C5(){ note_ctor("S3478C5", this);} // tgen

static void Test_S3478C5()
{
  extern Class_Descriptor cd_S3478C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S3478C5, buf);
    S3478C5 *dp, &lv = *(dp=new (buf) S3478C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S3478C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3478C5)");
    check_field_offset(lv, s3478c5f0, ABISELECT(8,4), "S3478C5.s3478c5f0");
    check_field_offset(lv, s3478c5f1, ABISELECT(16,8), "S3478C5.s3478c5f1");
    test_class_info(&lv, &cd_S3478C5);
    dp->~S3478C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3478C5(Test_S3478C5, "S3478C5", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S3478C5C1Ev();
extern void _ZN7S3478C5D1Ev();
Name_Map name_map_S3478C5[] = {
  NSPAIR(_ZN7S3478C5C1Ev),
  NSPAIR(_ZN7S3478C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3478C5[];
extern void _ZN7S3478C52v9Ev();
extern void _ZN7S3478C53v10Ev();
extern void _ZN7S3478C53v11Ev();
extern void _ZN7S3478C53v12Ev();
extern void _ZN7S3478C53v13Ev();
extern void _ZN7S3478C53v14Ev();
static  VTBL_ENTRY vtc_S3478C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3478C5[0]),
  (VTBL_ENTRY)&_ZN7S3478C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3478C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3478C53v11Ev,
  (VTBL_ENTRY)&_ZN7S3478C53v12Ev,
  (VTBL_ENTRY)&_ZN7S3478C53v13Ev,
  (VTBL_ENTRY)&_ZN7S3478C53v14Ev,
};
extern VTBL_ENTRY _ZTI7S3478C5[];
extern  VTBL_ENTRY _ZTV7S3478C5[];
Class_Descriptor cd_S3478C5 = {  "S3478C5", // class name
  0,0,//no base classes
  &(vtc_S3478C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S3478C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3478C5),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  S3478C4  : S3478C5 , S3478C6 {
  virtual  ~S3478C4(); // _ZN7S3478C4D1Ev
  virtual void  v21(); // _ZN7S3478C43v21Ev
  virtual void  v22(); // _ZN7S3478C43v22Ev
  virtual void  v23(); // _ZN7S3478C43v23Ev
  virtual void  v24(); // _ZN7S3478C43v24Ev
  virtual void  v25(); // _ZN7S3478C43v25Ev
  S3478C4(); // tgen
};
//SIG(-1 S3478C4) C1{ BC2{ v6 v7 v8 v9 v10 v11 FC3{ vd v12 v13 v14 v15 v16 v17} Fi} BC3 vd v1 v2 v3 v4 v5}


 S3478C4 ::~S3478C4(){ note_dtor("S3478C4", this);}
void  S3478C4 ::v21(){vfunc_called(this, "_ZN7S3478C43v21Ev");}
void  S3478C4 ::v22(){vfunc_called(this, "_ZN7S3478C43v22Ev");}
void  S3478C4 ::v23(){vfunc_called(this, "_ZN7S3478C43v23Ev");}
void  S3478C4 ::v24(){vfunc_called(this, "_ZN7S3478C43v24Ev");}
void  S3478C4 ::v25(){vfunc_called(this, "_ZN7S3478C43v25Ev");}
S3478C4 ::S3478C4(){ note_ctor("S3478C4", this);} // tgen

static void Test_S3478C4()
{
  extern Class_Descriptor cd_S3478C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S3478C4, buf);
    S3478C4 *dp, &lv = *(dp=new (buf) S3478C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S3478C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3478C4)");
    check_base_class_offset(lv, (S3478C5*), 0, "S3478C4");
    check_base_class_offset(lv, (S3478C6*), ABISELECT(24,12), "S3478C4");
    test_class_info(&lv, &cd_S3478C4);
    dp->~S3478C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3478C4(Test_S3478C4, "S3478C4", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S3478C4C1Ev();
extern void _ZN7S3478C4D1Ev();
Name_Map name_map_S3478C4[] = {
  NSPAIR(_ZN7S3478C4C1Ev),
  NSPAIR(_ZN7S3478C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3478C5;
extern VTBL_ENTRY _ZTI7S3478C5[];
extern  VTBL_ENTRY _ZTV7S3478C5[];
extern Class_Descriptor cd_S3478C6;
extern VTBL_ENTRY _ZTI7S3478C6[];
extern  VTBL_ENTRY _ZTV7S3478C6[];
static Base_Class bases_S3478C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3478C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S3478C6,    ABISELECT(24,12), //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
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3478C4[];
extern void _ZN7S3478C52v9Ev();
extern void _ZN7S3478C53v10Ev();
extern void _ZN7S3478C53v11Ev();
extern void _ZN7S3478C53v12Ev();
extern void _ZN7S3478C53v13Ev();
extern void _ZN7S3478C53v14Ev();
extern void _ZN7S3478C4D1Ev();
extern void _ZN7S3478C4D0Ev();
extern void _ZN7S3478C43v21Ev();
extern void _ZN7S3478C43v22Ev();
extern void _ZN7S3478C43v23Ev();
extern void _ZN7S3478C43v24Ev();
extern void _ZN7S3478C43v25Ev();
extern void ABISELECT(_ZThn24_N7S3478C4D1Ev,_ZThn12_N7S3478C4D1Ev)();
extern void ABISELECT(_ZThn24_N7S3478C4D0Ev,_ZThn12_N7S3478C4D0Ev)();
extern void _ZN7S3478C63v15Ev();
extern void _ZN7S3478C63v16Ev();
extern void _ZN7S3478C63v17Ev();
extern void _ZN7S3478C63v18Ev();
extern void _ZN7S3478C63v19Ev();
extern void _ZN7S3478C63v20Ev();
static  VTBL_ENTRY vtc_S3478C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3478C4[0]),
  (VTBL_ENTRY)&_ZN7S3478C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3478C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3478C53v11Ev,
  (VTBL_ENTRY)&_ZN7S3478C53v12Ev,
  (VTBL_ENTRY)&_ZN7S3478C53v13Ev,
  (VTBL_ENTRY)&_ZN7S3478C53v14Ev,
  (VTBL_ENTRY)&_ZN7S3478C4D1Ev,
  (VTBL_ENTRY)&_ZN7S3478C4D0Ev,
  (VTBL_ENTRY)&_ZN7S3478C43v21Ev,
  (VTBL_ENTRY)&_ZN7S3478C43v22Ev,
  (VTBL_ENTRY)&_ZN7S3478C43v23Ev,
  (VTBL_ENTRY)&_ZN7S3478C43v24Ev,
  (VTBL_ENTRY)&_ZN7S3478C43v25Ev,
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S3478C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N7S3478C4D1Ev,_ZThn12_N7S3478C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N7S3478C4D0Ev,_ZThn12_N7S3478C4D0Ev),
  (VTBL_ENTRY)&_ZN7S3478C63v15Ev,
  (VTBL_ENTRY)&_ZN7S3478C63v16Ev,
  (VTBL_ENTRY)&_ZN7S3478C63v17Ev,
  (VTBL_ENTRY)&_ZN7S3478C63v18Ev,
  (VTBL_ENTRY)&_ZN7S3478C63v19Ev,
  (VTBL_ENTRY)&_ZN7S3478C63v20Ev,
};
extern VTBL_ENTRY _ZTI7S3478C4[];
extern  VTBL_ENTRY _ZTV7S3478C4[];
Class_Descriptor cd_S3478C4 = {  "S3478C4", // class name
  bases_S3478C4, 2,
  &(vtc_S3478C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S3478C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3478C4),25, //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  S3478C7  {
  ::S601C21_nt s3478c7f0;
  void *s3478c7f1;
  virtual void  v26(); // _ZN7S3478C73v26Ev
  virtual void  v27(); // _ZN7S3478C73v27Ev
  virtual void  v28(); // _ZN7S3478C73v28Ev
  virtual void  v29(); // _ZN7S3478C73v29Ev
  virtual void  v30(); // _ZN7S3478C73v30Ev
  ~S3478C7(); // tgen
  S3478C7(); // tgen
};
//SIG(-1 S3478C7) C1{ v1 v2 v3 v4 v5 FC2{} Fp}


void  S3478C7 ::v26(){vfunc_called(this, "_ZN7S3478C73v26Ev");}
void  S3478C7 ::v27(){vfunc_called(this, "_ZN7S3478C73v27Ev");}
void  S3478C7 ::v28(){vfunc_called(this, "_ZN7S3478C73v28Ev");}
void  S3478C7 ::v29(){vfunc_called(this, "_ZN7S3478C73v29Ev");}
void  S3478C7 ::v30(){vfunc_called(this, "_ZN7S3478C73v30Ev");}
S3478C7 ::~S3478C7(){ note_dtor("S3478C7", this);} // tgen
S3478C7 ::S3478C7(){ note_ctor("S3478C7", this);} // tgen

static void Test_S3478C7()
{
  extern Class_Descriptor cd_S3478C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S3478C7, buf);
    S3478C7 *dp, &lv = *(dp=new (buf) S3478C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S3478C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3478C7)");
    check_field_offset(lv, s3478c7f0, ABISELECT(8,4), "S3478C7.s3478c7f0");
    check_field_offset(lv, s3478c7f1, ABISELECT(16,8), "S3478C7.s3478c7f1");
    test_class_info(&lv, &cd_S3478C7);
    dp->~S3478C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3478C7(Test_S3478C7, "S3478C7", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S3478C7C1Ev();
extern void _ZN7S3478C7D1Ev();
Name_Map name_map_S3478C7[] = {
  NSPAIR(_ZN7S3478C7C1Ev),
  NSPAIR(_ZN7S3478C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3478C7[];
extern void _ZN7S3478C73v26Ev();
extern void _ZN7S3478C73v27Ev();
extern void _ZN7S3478C73v28Ev();
extern void _ZN7S3478C73v29Ev();
extern void _ZN7S3478C73v30Ev();
static  VTBL_ENTRY vtc_S3478C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3478C7[0]),
  (VTBL_ENTRY)&_ZN7S3478C73v26Ev,
  (VTBL_ENTRY)&_ZN7S3478C73v27Ev,
  (VTBL_ENTRY)&_ZN7S3478C73v28Ev,
  (VTBL_ENTRY)&_ZN7S3478C73v29Ev,
  (VTBL_ENTRY)&_ZN7S3478C73v30Ev,
};
extern VTBL_ENTRY _ZTI7S3478C7[];
extern  VTBL_ENTRY _ZTV7S3478C7[];
Class_Descriptor cd_S3478C7 = {  "S3478C7", // class name
  0,0,//no base classes
  &(vtc_S3478C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S3478C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3478C7),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  S3478C3  : virtual S3478C4 , virtual S3478C7 {
  virtual  ~S3478C3(); // _ZN7S3478C3D2Ev
  virtual void  v31(); // _ZN7S3478C33v31Ev
  virtual void  v32(); // _ZN7S3478C33v32Ev
  S3478C3(); // tgen
};
//SIG(-1 S3478C3) C1{ VBC2{ BC3{ v3 v4 v5 v6 v7 v8 FC4{ vd v9 v10 v11 v12 v13 v14} Fi} BC4 vd v15 v16 v17 v18 v19} VBC5{ v20 v21 v22 v23 v24 FC6{} Fp} vd v1 v2}


 S3478C3 ::~S3478C3(){ note_dtor("S3478C3", this);}
void  S3478C3 ::v31(){vfunc_called(this, "_ZN7S3478C33v31Ev");}
void  S3478C3 ::v32(){vfunc_called(this, "_ZN7S3478C33v32Ev");}
S3478C3 ::S3478C3(){ note_ctor("S3478C3", this);} // tgen

static void Test_S3478C3()
{
  extern Class_Descriptor cd_S3478C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[9];
    init_test(&cd_S3478C3, buf);
    S3478C3 *dp, &lv = *(dp=new (buf) S3478C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S3478C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3478C3)");
    check_base_class_offset(lv, (S3478C5*)(S3478C4*), ABISELECT(8,4), "S3478C3");
    check_base_class_offset(lv, (S3478C6*)(S3478C4*), ABISELECT(32,16), "S3478C3");
    check_base_class_offset(lv, (S3478C4*), ABISELECT(8,4), "S3478C3");
    check_base_class_offset(lv, (S3478C7*), ABISELECT(40,20), "S3478C3");
    test_class_info(&lv, &cd_S3478C3);
    dp->~S3478C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3478C3(Test_S3478C3, "S3478C3", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN7S3478C3C1Ev();
extern void _ZN7S3478C3D2Ev();
Name_Map name_map_S3478C3[] = {
  NSPAIR(_ZN7S3478C3C1Ev),
  NSPAIR(_ZN7S3478C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3478C5;
extern VTBL_ENTRY _ZTI7S3478C5[];
extern  VTBL_ENTRY _ZTV7S3478C5[];
extern Class_Descriptor cd_S3478C6;
extern VTBL_ENTRY _ZTI7S3478C6[];
extern  VTBL_ENTRY _ZTV7S3478C6[];
extern Class_Descriptor cd_S3478C4;
extern VTBL_ENTRY _ZTI7S3478C4[];
extern  VTBL_ENTRY _ZTV7S3478C4[];
extern Class_Descriptor cd_S3478C7;
extern VTBL_ENTRY _ZTI7S3478C7[];
extern  VTBL_ENTRY _ZTV7S3478C7[];
static Base_Class bases_S3478C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3478C5,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3478C6,    ABISELECT(32,16), //bcp->offset
    41, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3478C4,    ABISELECT(8,4), //bcp->offset
    8, //bcp->virtual_function_table_offset
    20, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3478C7,    ABISELECT(40,20), //bcp->offset
    51, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3478C3[];
extern void _ZN7S3478C3D1Ev();
extern void _ZN7S3478C3D0Ev();
extern void _ZN7S3478C33v31Ev();
extern void _ZN7S3478C33v32Ev();
extern void _ZN7S3478C52v9Ev();
extern void _ZN7S3478C53v10Ev();
extern void _ZN7S3478C53v11Ev();
extern void _ZN7S3478C53v12Ev();
extern void _ZN7S3478C53v13Ev();
extern void _ZN7S3478C53v14Ev();
extern void ABISELECT(_ZTv0_n72_N7S3478C3D1Ev,_ZTv0_n36_N7S3478C3D1Ev)();
extern void ABISELECT(_ZThn8_N7S3478C3D1Ev,_ZThn4_N7S3478C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S3478C3D0Ev,_ZTv0_n36_N7S3478C3D0Ev)();
extern void ABISELECT(_ZThn8_N7S3478C3D0Ev,_ZThn4_N7S3478C3D0Ev)() __attribute__((weak));
extern void _ZN7S3478C43v21Ev();
extern void _ZN7S3478C43v22Ev();
extern void _ZN7S3478C43v23Ev();
extern void _ZN7S3478C43v24Ev();
extern void _ZN7S3478C43v25Ev();
extern void ABISELECT(_ZTvn24_n72_N7S3478C3D1Ev,_ZTvn12_n36_N7S3478C3D1Ev)();
extern void ABISELECT(_ZTvn24_n72_N7S3478C3D0Ev,_ZTvn12_n36_N7S3478C3D0Ev)();
extern void _ZN7S3478C63v15Ev();
extern void _ZN7S3478C63v16Ev();
extern void _ZN7S3478C63v17Ev();
extern void _ZN7S3478C63v18Ev();
extern void _ZN7S3478C63v19Ev();
extern void _ZN7S3478C63v20Ev();
extern void _ZN7S3478C73v26Ev();
extern void _ZN7S3478C73v27Ev();
extern void _ZN7S3478C73v28Ev();
extern void _ZN7S3478C73v29Ev();
extern void _ZN7S3478C73v30Ev();
static  VTBL_ENTRY vtc_S3478C3[] = {
  ABISELECT(40,20),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S3478C3[0]),
  (VTBL_ENTRY)&_ZN7S3478C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3478C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3478C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3478C33v32Ev,
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3478C3[0]),
  (VTBL_ENTRY)&_ZN7S3478C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3478C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3478C53v11Ev,
  (VTBL_ENTRY)&_ZN7S3478C53v12Ev,
  (VTBL_ENTRY)&_ZN7S3478C53v13Ev,
  (VTBL_ENTRY)&_ZN7S3478C53v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S3478C3D1Ev,_ZTv0_n36_N7S3478C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S3478C3D0Ev,_ZTv0_n36_N7S3478C3D0Ev),
  (VTBL_ENTRY)&_ZN7S3478C43v21Ev,
  (VTBL_ENTRY)&_ZN7S3478C43v22Ev,
  (VTBL_ENTRY)&_ZN7S3478C43v23Ev,
  (VTBL_ENTRY)&_ZN7S3478C43v24Ev,
  (VTBL_ENTRY)&_ZN7S3478C43v25Ev,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S3478C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N7S3478C3D1Ev,_ZTvn12_n36_N7S3478C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N7S3478C3D0Ev,_ZTvn12_n36_N7S3478C3D0Ev),
  (VTBL_ENTRY)&_ZN7S3478C63v15Ev,
  (VTBL_ENTRY)&_ZN7S3478C63v16Ev,
  (VTBL_ENTRY)&_ZN7S3478C63v17Ev,
  (VTBL_ENTRY)&_ZN7S3478C63v18Ev,
  (VTBL_ENTRY)&_ZN7S3478C63v19Ev,
  (VTBL_ENTRY)&_ZN7S3478C63v20Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S3478C3[0]),
  (VTBL_ENTRY)&_ZN7S3478C73v26Ev,
  (VTBL_ENTRY)&_ZN7S3478C73v27Ev,
  (VTBL_ENTRY)&_ZN7S3478C73v28Ev,
  (VTBL_ENTRY)&_ZN7S3478C73v29Ev,
  (VTBL_ENTRY)&_ZN7S3478C73v30Ev,
};
extern VTBL_ENTRY _ZTV7S3478C3[];
static  VTT_ENTRY vtt_S3478C3[] = {
  {&(_ZTV7S3478C3[4]),  4,63},
  {&(_ZTV7S3478C3[28]),  28,63},
  {&(_ZTV7S3478C3[43]),  43,63},
  {&(_ZTV7S3478C3[58]),  58,63},
};
extern VTBL_ENTRY _ZTI7S3478C3[];
extern  VTBL_ENTRY _ZTV7S3478C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3478C3[];
static VTBL_ENTRY alt_thunk_names24[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S3478C3D0Ev,_ZTv0_n36_N7S3478C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S3478C3D0Ev,_ZThn4_N7S3478C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S3478C3D1Ev,_ZTv0_n36_N7S3478C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S3478C3D1Ev,_ZThn4_N7S3478C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3478C3 = {  "S3478C3", // class name
  bases_S3478C3, 4,
  &(vtc_S3478C3[0]), // expected_vtbl_contents
  &(vtt_S3478C3[0]), // expected_vtt_contents
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI7S3478C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3478C3),63, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3478C3),4, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names24,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3478C2  : S3478C3 {
  void *s3478c2f0;
  virtual  ~S3478C2(); // _ZN7S3478C2D2Ev
  virtual void  v33(); // _ZN7S3478C23v33Ev
  virtual void  v34(); // _ZN7S3478C23v34Ev
  virtual void  v35(); // _ZN7S3478C23v35Ev
  virtual void  v36(); // _ZN7S3478C23v36Ev
  virtual void  v37(); // _ZN7S3478C23v37Ev
  S3478C2(); // tgen
};
//SIG(-1 S3478C2) C1{ BC2{ VBC3{ BC4{ v6 v7 v8 v9 v10 v11 FC5{ vd v12 v13 v14 v15 v16 v17} Fi} BC5 vd v18 v19 v20 v21 v22} VBC6{ v23 v24 v25 v26 v27 FC7{} Fp} vd v28 v29} vd v1 v2 v3 v4 v5 Fp}


 S3478C2 ::~S3478C2(){ note_dtor("S3478C2", this);}
void  S3478C2 ::v33(){vfunc_called(this, "_ZN7S3478C23v33Ev");}
void  S3478C2 ::v34(){vfunc_called(this, "_ZN7S3478C23v34Ev");}
void  S3478C2 ::v35(){vfunc_called(this, "_ZN7S3478C23v35Ev");}
void  S3478C2 ::v36(){vfunc_called(this, "_ZN7S3478C23v36Ev");}
void  S3478C2 ::v37(){vfunc_called(this, "_ZN7S3478C23v37Ev");}
S3478C2 ::S3478C2(){ note_ctor("S3478C2", this);} // tgen

static void Test_S3478C2()
{
  extern Class_Descriptor cd_S3478C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[10];
    init_test(&cd_S3478C2, buf);
    S3478C2 *dp, &lv = *(dp=new (buf) S3478C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,36), "sizeof(S3478C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3478C2)");
    check_base_class_offset(lv, (S3478C5*)(S3478C4*), ABISELECT(16,8), "S3478C2");
    check_base_class_offset(lv, (S3478C6*)(S3478C4*), ABISELECT(40,20), "S3478C2");
    check_base_class_offset(lv, (S3478C4*)(S3478C3*), ABISELECT(16,8), "S3478C2");
    check_base_class_offset(lv, (S3478C7*)(S3478C3*), ABISELECT(48,24), "S3478C2");
    check_base_class_offset(lv, (S3478C3*), 0, "S3478C2");
    check_field_offset(lv, s3478c2f0, ABISELECT(8,4), "S3478C2.s3478c2f0");
    test_class_info(&lv, &cd_S3478C2);
    dp->~S3478C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3478C2(Test_S3478C2, "S3478C2", ABISELECT(72,36));

#else // __cplusplus

extern void _ZN7S3478C2C1Ev();
extern void _ZN7S3478C2D2Ev();
Name_Map name_map_S3478C2[] = {
  NSPAIR(_ZN7S3478C2C1Ev),
  NSPAIR(_ZN7S3478C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3478C5;
extern VTBL_ENTRY _ZTI7S3478C5[];
extern  VTBL_ENTRY _ZTV7S3478C5[];
extern Class_Descriptor cd_S3478C6;
extern VTBL_ENTRY _ZTI7S3478C6[];
extern  VTBL_ENTRY _ZTV7S3478C6[];
extern Class_Descriptor cd_S3478C4;
extern VTBL_ENTRY _ZTI7S3478C4[];
extern  VTBL_ENTRY _ZTV7S3478C4[];
extern Class_Descriptor cd_S3478C7;
extern VTBL_ENTRY _ZTI7S3478C7[];
extern  VTBL_ENTRY _ZTV7S3478C7[];
extern Class_Descriptor cd_S3478C3;
extern VTBL_ENTRY _ZTI7S3478C3[];
extern  VTBL_ENTRY _ZTV7S3478C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3478C3[];
static Base_Class bases_S3478C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3478C5,    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, 0},
  {&cd_S3478C6,    ABISELECT(40,20), //bcp->offset
    46, //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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3478C4,    ABISELECT(16,8), //bcp->offset
    13, //bcp->virtual_function_table_offset
    20, //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
    4, //immediately_derived
  0, 1},
  {&cd_S3478C7,    ABISELECT(48,24), //bcp->offset
    56, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S3478C3,    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},
  {0}};
extern VTBL_ENTRY _ZTI7S3478C2[];
extern void _ZN7S3478C2D1Ev();
extern void _ZN7S3478C2D0Ev();
extern void _ZN7S3478C33v31Ev();
extern void _ZN7S3478C33v32Ev();
extern void _ZN7S3478C23v33Ev();
extern void _ZN7S3478C23v34Ev();
extern void _ZN7S3478C23v35Ev();
extern void _ZN7S3478C23v36Ev();
extern void _ZN7S3478C23v37Ev();
extern void _ZN7S3478C52v9Ev();
extern void _ZN7S3478C53v10Ev();
extern void _ZN7S3478C53v11Ev();
extern void _ZN7S3478C53v12Ev();
extern void _ZN7S3478C53v13Ev();
extern void _ZN7S3478C53v14Ev();
extern void ABISELECT(_ZTv0_n72_N7S3478C2D1Ev,_ZTv0_n36_N7S3478C2D1Ev)();
extern void ABISELECT(_ZThn16_N7S3478C2D1Ev,_ZThn8_N7S3478C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S3478C2D0Ev,_ZTv0_n36_N7S3478C2D0Ev)();
extern void ABISELECT(_ZThn16_N7S3478C2D0Ev,_ZThn8_N7S3478C2D0Ev)() __attribute__((weak));
extern void _ZN7S3478C43v21Ev();
extern void _ZN7S3478C43v22Ev();
extern void _ZN7S3478C43v23Ev();
extern void _ZN7S3478C43v24Ev();
extern void _ZN7S3478C43v25Ev();
extern void ABISELECT(_ZTvn24_n72_N7S3478C2D1Ev,_ZTvn12_n36_N7S3478C2D1Ev)();
extern void ABISELECT(_ZTvn24_n72_N7S3478C2D0Ev,_ZTvn12_n36_N7S3478C2D0Ev)();
extern void _ZN7S3478C63v15Ev();
extern void _ZN7S3478C63v16Ev();
extern void _ZN7S3478C63v17Ev();
extern void _ZN7S3478C63v18Ev();
extern void _ZN7S3478C63v19Ev();
extern void _ZN7S3478C63v20Ev();
extern void _ZN7S3478C73v26Ev();
extern void _ZN7S3478C73v27Ev();
extern void _ZN7S3478C73v28Ev();
extern void _ZN7S3478C73v29Ev();
extern void _ZN7S3478C73v30Ev();
static  VTBL_ENTRY vtc_S3478C2[] = {
  ABISELECT(48,24),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S3478C2[0]),
  (VTBL_ENTRY)&_ZN7S3478C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3478C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3478C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3478C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3478C23v33Ev,
  (VTBL_ENTRY)&_ZN7S3478C23v34Ev,
  (VTBL_ENTRY)&_ZN7S3478C23v35Ev,
  (VTBL_ENTRY)&_ZN7S3478C23v36Ev,
  (VTBL_ENTRY)&_ZN7S3478C23v37Ev,
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S3478C2[0]),
  (VTBL_ENTRY)&_ZN7S3478C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3478C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3478C53v11Ev,
  (VTBL_ENTRY)&_ZN7S3478C53v12Ev,
  (VTBL_ENTRY)&_ZN7S3478C53v13Ev,
  (VTBL_ENTRY)&_ZN7S3478C53v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S3478C2D1Ev,_ZTv0_n36_N7S3478C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S3478C2D0Ev,_ZTv0_n36_N7S3478C2D0Ev),
  (VTBL_ENTRY)&_ZN7S3478C43v21Ev,
  (VTBL_ENTRY)&_ZN7S3478C43v22Ev,
  (VTBL_ENTRY)&_ZN7S3478C43v23Ev,
  (VTBL_ENTRY)&_ZN7S3478C43v24Ev,
  (VTBL_ENTRY)&_ZN7S3478C43v25Ev,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S3478C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N7S3478C2D1Ev,_ZTvn12_n36_N7S3478C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N7S3478C2D0Ev,_ZTvn12_n36_N7S3478C2D0Ev),
  (VTBL_ENTRY)&_ZN7S3478C63v15Ev,
  (VTBL_ENTRY)&_ZN7S3478C63v16Ev,
  (VTBL_ENTRY)&_ZN7S3478C63v17Ev,
  (VTBL_ENTRY)&_ZN7S3478C63v18Ev,
  (VTBL_ENTRY)&_ZN7S3478C63v19Ev,
  (VTBL_ENTRY)&_ZN7S3478C63v20Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S3478C2[0]),
  (VTBL_ENTRY)&_ZN7S3478C73v26Ev,
  (VTBL_ENTRY)&_ZN7S3478C73v27Ev,
  (VTBL_ENTRY)&_ZN7S3478C73v28Ev,
  (VTBL_ENTRY)&_ZN7S3478C73v29Ev,
  (VTBL_ENTRY)&_ZN7S3478C73v30Ev,
};
extern VTBL_ENTRY _ZTV7S3478C2[];
extern void _ZN7S3478C3D1Ev();
extern void _ZN7S3478C3D0Ev();
extern void _ZN7S3478C33v31Ev();
extern void _ZN7S3478C33v32Ev();
static  VTBL_ENTRY _tg__ZTV7S3478C3__7S3478C2[] = {
  ABISELECT(48,24),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S3478C3[0]),
  (VTBL_ENTRY)&_ZN7S3478C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3478C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3478C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3478C33v32Ev,
};
extern void _ZN7S3478C52v9Ev();
extern void _ZN7S3478C53v10Ev();
extern void _ZN7S3478C53v11Ev();
extern void _ZN7S3478C53v12Ev();
extern void _ZN7S3478C53v13Ev();
extern void _ZN7S3478C53v14Ev();
extern void ABISELECT(_ZTv0_n72_N7S3478C3D1Ev,_ZTv0_n36_N7S3478C3D1Ev)();
extern void ABISELECT(_ZThn16_N7S3478C3D1Ev,_ZThn8_N7S3478C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S3478C3D0Ev,_ZTv0_n36_N7S3478C3D0Ev)();
extern void ABISELECT(_ZThn16_N7S3478C3D0Ev,_ZThn8_N7S3478C3D0Ev)() __attribute__((weak));
extern void _ZN7S3478C43v21Ev();
extern void _ZN7S3478C43v22Ev();
extern void _ZN7S3478C43v23Ev();
extern void _ZN7S3478C43v24Ev();
extern void _ZN7S3478C43v25Ev();
static  VTBL_ENTRY _tg__ZTV7S3478C4__7S3478C3__7S3478C2[] = {
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S3478C3[0]),
  (VTBL_ENTRY)&_ZN7S3478C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3478C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3478C53v11Ev,
  (VTBL_ENTRY)&_ZN7S3478C53v12Ev,
  (VTBL_ENTRY)&_ZN7S3478C53v13Ev,
  (VTBL_ENTRY)&_ZN7S3478C53v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S3478C3D1Ev,_ZTv0_n36_N7S3478C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S3478C3D0Ev,_ZTv0_n36_N7S3478C3D0Ev),
  (VTBL_ENTRY)&_ZN7S3478C43v21Ev,
  (VTBL_ENTRY)&_ZN7S3478C43v22Ev,
  (VTBL_ENTRY)&_ZN7S3478C43v23Ev,
  (VTBL_ENTRY)&_ZN7S3478C43v24Ev,
  (VTBL_ENTRY)&_ZN7S3478C43v25Ev,
};
extern void ABISELECT(_ZTvn24_n72_N7S3478C3D1Ev,_ZTvn12_n36_N7S3478C3D1Ev)();
extern void ABISELECT(_ZTvn24_n72_N7S3478C3D0Ev,_ZTvn12_n36_N7S3478C3D0Ev)();
extern void _ZN7S3478C63v15Ev();
extern void _ZN7S3478C63v16Ev();
extern void _ZN7S3478C63v17Ev();
extern void _ZN7S3478C63v18Ev();
extern void _ZN7S3478C63v19Ev();
extern void _ZN7S3478C63v20Ev();
static  VTBL_ENTRY _tg__ZTV7S3478C67S3478C4__7S3478C3__7S3478C2[] = {
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S3478C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N7S3478C3D1Ev,_ZTvn12_n36_N7S3478C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N7S3478C3D0Ev,_ZTvn12_n36_N7S3478C3D0Ev),
  (VTBL_ENTRY)&_ZN7S3478C63v15Ev,
  (VTBL_ENTRY)&_ZN7S3478C63v16Ev,
  (VTBL_ENTRY)&_ZN7S3478C63v17Ev,
  (VTBL_ENTRY)&_ZN7S3478C63v18Ev,
  (VTBL_ENTRY)&_ZN7S3478C63v19Ev,
  (VTBL_ENTRY)&_ZN7S3478C63v20Ev,
};
extern void _ZN7S3478C73v26Ev();
extern void _ZN7S3478C73v27Ev();
extern void _ZN7S3478C73v28Ev();
extern void _ZN7S3478C73v29Ev();
extern void _ZN7S3478C73v30Ev();
static  VTBL_ENTRY _tg__ZTV7S3478C7__7S3478C3__7S3478C2[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S3478C3[0]),
  (VTBL_ENTRY)&_ZN7S3478C73v26Ev,
  (VTBL_ENTRY)&_ZN7S3478C73v27Ev,
  (VTBL_ENTRY)&_ZN7S3478C73v28Ev,
  (VTBL_ENTRY)&_ZN7S3478C73v29Ev,
  (VTBL_ENTRY)&_ZN7S3478C73v30Ev,
};
static  VTT_ENTRY vtt_S3478C2[] = {
  {&(_ZTV7S3478C2[4]),  4,68},
  {&(_tg__ZTV7S3478C3__7S3478C2[4]),  4,8},
  {&(_tg__ZTV7S3478C4__7S3478C3__7S3478C2[20]),  20,33},
  {&(_tg__ZTV7S3478C67S3478C4__7S3478C3__7S3478C2[2]),  2,10},
  {&(_tg__ZTV7S3478C7__7S3478C3__7S3478C2[7]),  7,12},
  {&(_ZTV7S3478C2[33]),  33,68},
  {&(_ZTV7S3478C2[48]),  48,68},
  {&(_ZTV7S3478C2[63]),  63,68},
};
extern VTBL_ENTRY _ZTI7S3478C2[];
extern  VTBL_ENTRY _ZTV7S3478C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3478C2[];
static VTBL_ENTRY alt_thunk_names25[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S3478C3D0Ev,_ZTv0_n36_N7S3478C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S3478C3D0Ev,_ZThn8_N7S3478C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S3478C3D1Ev,_ZTv0_n36_N7S3478C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S3478C3D1Ev,_ZThn8_N7S3478C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S3478C2D0Ev,_ZTv0_n36_N7S3478C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S3478C2D0Ev,_ZThn8_N7S3478C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S3478C2D1Ev,_ZTv0_n36_N7S3478C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S3478C2D1Ev,_ZThn8_N7S3478C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3478C2 = {  "S3478C2", // class name
  bases_S3478C2, 5,
  &(vtc_S3478C2[0]), // expected_vtbl_contents
  &(vtt_S3478C2[0]), // expected_vtt_contents
  ABISELECT(72,36), // object size
  NSPAIRA(_ZTI7S3478C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3478C2),68, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3478C2),8, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names25,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3478C9  : S3478C7 {
  ::S3478C7 s3478c9f0;
  virtual void  v38(); // _ZN7S3478C93v38Ev
  virtual void  v39(); // _ZN7S3478C93v39Ev
  virtual void  v40(); // _ZN7S3478C93v40Ev
  virtual void  v41(); // _ZN7S3478C93v41Ev
  virtual void  v42(); // _ZN7S3478C93v42Ev
  virtual void  v43(); // _ZN7S3478C93v43Ev
  virtual void  v44(); // _ZN7S3478C93v44Ev
  ~S3478C9(); // tgen
  S3478C9(); // tgen
};
//SIG(-1 S3478C9) C1{ BC2{ v8 v9 v10 v11 v12 FC3{} Fp} v1 v2 v3 v4 v5 v6 v7 FC2}


void  S3478C9 ::v38(){vfunc_called(this, "_ZN7S3478C93v38Ev");}
void  S3478C9 ::v39(){vfunc_called(this, "_ZN7S3478C93v39Ev");}
void  S3478C9 ::v40(){vfunc_called(this, "_ZN7S3478C93v40Ev");}
void  S3478C9 ::v41(){vfunc_called(this, "_ZN7S3478C93v41Ev");}
void  S3478C9 ::v42(){vfunc_called(this, "_ZN7S3478C93v42Ev");}
void  S3478C9 ::v43(){vfunc_called(this, "_ZN7S3478C93v43Ev");}
void  S3478C9 ::v44(){vfunc_called(this, "_ZN7S3478C93v44Ev");}
S3478C9 ::~S3478C9(){ note_dtor("S3478C9", this);} // tgen
S3478C9 ::S3478C9(){ note_ctor("S3478C9", this);} // tgen

static void Test_S3478C9()
{
  extern Class_Descriptor cd_S3478C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[7];
    init_test(&cd_S3478C9, buf);
    S3478C9 *dp, &lv = *(dp=new (buf) S3478C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S3478C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3478C9)");
    check_base_class_offset(lv, (S3478C7*), 0, "S3478C9");
    check_field_offset(lv, s3478c9f0, ABISELECT(24,12), "S3478C9.s3478c9f0");
    test_class_info(&lv, &cd_S3478C9);
    dp->~S3478C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3478C9(Test_S3478C9, "S3478C9", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN7S3478C9C1Ev();
extern void _ZN7S3478C9D1Ev();
Name_Map name_map_S3478C9[] = {
  NSPAIR(_ZN7S3478C9C1Ev),
  NSPAIR(_ZN7S3478C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3478C7;
extern VTBL_ENTRY _ZTI7S3478C7[];
extern  VTBL_ENTRY _ZTV7S3478C7[];
static Base_Class bases_S3478C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3478C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3478C9[];
extern void _ZN7S3478C73v26Ev();
extern void _ZN7S3478C73v27Ev();
extern void _ZN7S3478C73v28Ev();
extern void _ZN7S3478C73v29Ev();
extern void _ZN7S3478C73v30Ev();
extern void _ZN7S3478C93v38Ev();
extern void _ZN7S3478C93v39Ev();
extern void _ZN7S3478C93v40Ev();
extern void _ZN7S3478C93v41Ev();
extern void _ZN7S3478C93v42Ev();
extern void _ZN7S3478C93v43Ev();
extern void _ZN7S3478C93v44Ev();
static  VTBL_ENTRY vtc_S3478C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3478C9[0]),
  (VTBL_ENTRY)&_ZN7S3478C73v26Ev,
  (VTBL_ENTRY)&_ZN7S3478C73v27Ev,
  (VTBL_ENTRY)&_ZN7S3478C73v28Ev,
  (VTBL_ENTRY)&_ZN7S3478C73v29Ev,
  (VTBL_ENTRY)&_ZN7S3478C73v30Ev,
  (VTBL_ENTRY)&_ZN7S3478C93v38Ev,
  (VTBL_ENTRY)&_ZN7S3478C93v39Ev,
  (VTBL_ENTRY)&_ZN7S3478C93v40Ev,
  (VTBL_ENTRY)&_ZN7S3478C93v41Ev,
  (VTBL_ENTRY)&_ZN7S3478C93v42Ev,
  (VTBL_ENTRY)&_ZN7S3478C93v43Ev,
  (VTBL_ENTRY)&_ZN7S3478C93v44Ev,
};
extern VTBL_ENTRY _ZTI7S3478C9[];
extern  VTBL_ENTRY _ZTV7S3478C9[];
Class_Descriptor cd_S3478C9 = {  "S3478C9", // class name
  bases_S3478C9, 1,
  &(vtc_S3478C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI7S3478C9),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3478C9),14, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3478C1  : S3478C2 , virtual S3478C9 {
  void *s3478c1f0;
  int s3478c1f1;
  virtual void  v1(); // _ZN7S3478C12v1Ev
  virtual void  v2(); // _ZN7S3478C12v2Ev
  virtual void  v3(); // _ZN7S3478C12v3Ev
  virtual void  v4(); // _ZN7S3478C12v4Ev
  virtual void  v5(); // _ZN7S3478C12v5Ev
  virtual void  v6(); // _ZN7S3478C12v6Ev
  virtual void  v7(); // _ZN7S3478C12v7Ev
  virtual void  v8(); // _ZN7S3478C12v8Ev
  ~S3478C1(); // tgen
  S3478C1(); // tgen
};
//SIG(1 S3478C1) C1{ BC2{ BC3{ VBC4{ BC5{ v9 v10 v11 v12 v13 v14 FC6{ vd v15 v16 v17 v18 v19 v20} Fi} BC6 vd v21 v22 v23 v24 v25} VBC7{ v26 v27 v28 v29 v30 FC8{} Fp} vd v31 v32} vd v33 v34 v35 v36 v37 Fp} VBC9{ BC7 v38 v39 v40 v41 v42 v43 v44 FC7} v1 v2 v3 v4 v5 v6 v7 v8 Fp Fi}


void  S3478C1 ::v1(){vfunc_called(this, "_ZN7S3478C12v1Ev");}
void  S3478C1 ::v2(){vfunc_called(this, "_ZN7S3478C12v2Ev");}
void  S3478C1 ::v3(){vfunc_called(this, "_ZN7S3478C12v3Ev");}
void  S3478C1 ::v4(){vfunc_called(this, "_ZN7S3478C12v4Ev");}
void  S3478C1 ::v5(){vfunc_called(this, "_ZN7S3478C12v5Ev");}
void  S3478C1 ::v6(){vfunc_called(this, "_ZN7S3478C12v6Ev");}
void  S3478C1 ::v7(){vfunc_called(this, "_ZN7S3478C12v7Ev");}
void  S3478C1 ::v8(){vfunc_called(this, "_ZN7S3478C12v8Ev");}
S3478C1 ::~S3478C1(){ note_dtor("S3478C1", this);} // tgen
S3478C1 ::S3478C1(){ note_ctor("S3478C1", this);} // tgen

static void Test_S3478C1()
{
  extern Class_Descriptor cd_S3478C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[18];
    init_test(&cd_S3478C1, buf);
    S3478C1 *dp, &lv = *(dp=new (buf) S3478C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,68), "sizeof(S3478C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3478C1)");
    check_base_class_offset(lv, (S3478C5*)(S3478C4*), ABISELECT(32,16), "S3478C1");
    check_base_class_offset(lv, (S3478C6*)(S3478C4*), ABISELECT(56,28), "S3478C1");
    check_base_class_offset(lv, (S3478C4*)(S3478C3*)(S3478C2*), ABISELECT(32,16), "S3478C1");
    check_base_class_offset(lv, (S3478C7*)(S3478C3*)(S3478C2*), ABISELECT(64,32), "S3478C1");
    check_base_class_offset(lv, (S3478C3*)(S3478C2*), 0, "S3478C1");
    check_base_class_offset(lv, (S3478C2*), 0, "S3478C1");
    check_base_class_offset(lv, (S3478C7*)(S3478C9*), ABISELECT(88,44), "S3478C1");
    check_base_class_offset(lv, (S3478C9*), ABISELECT(88,44), "S3478C1");
    check_field_offset(lv, s3478c1f0, ABISELECT(16,8), "S3478C1.s3478c1f0");
    check_field_offset(lv, s3478c1f1, ABISELECT(24,12), "S3478C1.s3478c1f1");
    test_class_info(&lv, &cd_S3478C1);
    dp->~S3478C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3478C1(Test_S3478C1, "S3478C1", ABISELECT(136,68));

#else // __cplusplus

extern void _ZN7S3478C1C1Ev();
extern void _ZN7S3478C1D1Ev();
Name_Map name_map_S3478C1[] = {
  NSPAIR(_ZN7S3478C1C1Ev),
  NSPAIR(_ZN7S3478C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3478C5;
extern VTBL_ENTRY _ZTI7S3478C5[];
extern  VTBL_ENTRY _ZTV7S3478C5[];
extern Class_Descriptor cd_S3478C6;
extern VTBL_ENTRY _ZTI7S3478C6[];
extern  VTBL_ENTRY _ZTV7S3478C6[];
extern Class_Descriptor cd_S3478C4;
extern VTBL_ENTRY _ZTI7S3478C4[];
extern  VTBL_ENTRY _ZTV7S3478C4[];
extern Class_Descriptor cd_S3478C7;
extern VTBL_ENTRY _ZTI7S3478C7[];
extern  VTBL_ENTRY _ZTV7S3478C7[];
extern Class_Descriptor cd_S3478C3;
extern VTBL_ENTRY _ZTI7S3478C3[];
extern  VTBL_ENTRY _ZTV7S3478C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3478C3[];
extern Class_Descriptor cd_S3478C2;
extern VTBL_ENTRY _ZTI7S3478C2[];
extern  VTBL_ENTRY _ZTV7S3478C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3478C2[];
extern Class_Descriptor cd_S3478C7;
extern VTBL_ENTRY _ZTI7S3478C7[];
extern  VTBL_ENTRY _ZTV7S3478C7[];
extern Class_Descriptor cd_S3478C9;
extern VTBL_ENTRY _ZTI7S3478C9[];
extern  VTBL_ENTRY _ZTV7S3478C9[];
static Base_Class bases_S3478C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3478C5,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3478C6,    ABISELECT(56,28), //bcp->offset
    55, //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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3478C4,    ABISELECT(32,16), //bcp->offset
    22, //bcp->virtual_function_table_offset
    20, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S3478C7,    ABISELECT(64,32), //bcp->offset
    65, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S3478C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S3478C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3478C7,    ABISELECT(88,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S3478C9,    ABISELECT(88,44), //bcp->offset
    77, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3478C1[];
extern void _ZN7S3478C1D1Ev();
extern void _ZN7S3478C1D0Ev();
extern void _ZN7S3478C33v31Ev();
extern void _ZN7S3478C33v32Ev();
extern void _ZN7S3478C23v33Ev();
extern void _ZN7S3478C23v34Ev();
extern void _ZN7S3478C23v35Ev();
extern void _ZN7S3478C23v36Ev();
extern void _ZN7S3478C23v37Ev();
extern void _ZN7S3478C12v1Ev();
extern void _ZN7S3478C12v2Ev();
extern void _ZN7S3478C12v3Ev();
extern void _ZN7S3478C12v4Ev();
extern void _ZN7S3478C12v5Ev();
extern void _ZN7S3478C12v6Ev();
extern void _ZN7S3478C12v7Ev();
extern void _ZN7S3478C12v8Ev();
extern void _ZN7S3478C52v9Ev();
extern void _ZN7S3478C53v10Ev();
extern void _ZN7S3478C53v11Ev();
extern void _ZN7S3478C53v12Ev();
extern void _ZN7S3478C53v13Ev();
extern void _ZN7S3478C53v14Ev();
extern void ABISELECT(_ZTv0_n72_N7S3478C1D1Ev,_ZTv0_n36_N7S3478C1D1Ev)();
extern void ABISELECT(_ZThn32_N7S3478C1D1Ev,_ZThn16_N7S3478C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S3478C1D0Ev,_ZTv0_n36_N7S3478C1D0Ev)();
extern void ABISELECT(_ZThn32_N7S3478C1D0Ev,_ZThn16_N7S3478C1D0Ev)() __attribute__((weak));
extern void _ZN7S3478C43v21Ev();
extern void _ZN7S3478C43v22Ev();
extern void _ZN7S3478C43v23Ev();
extern void _ZN7S3478C43v24Ev();
extern void _ZN7S3478C43v25Ev();
extern void ABISELECT(_ZTvn24_n72_N7S3478C1D1Ev,_ZTvn12_n36_N7S3478C1D1Ev)();
extern void ABISELECT(_ZTvn24_n72_N7S3478C1D0Ev,_ZTvn12_n36_N7S3478C1D0Ev)();
extern void _ZN7S3478C63v15Ev();
extern void _ZN7S3478C63v16Ev();
extern void _ZN7S3478C63v17Ev();
extern void _ZN7S3478C63v18Ev();
extern void _ZN7S3478C63v19Ev();
extern void _ZN7S3478C63v20Ev();
extern void _ZN7S3478C73v26Ev();
extern void _ZN7S3478C73v27Ev();
extern void _ZN7S3478C73v28Ev();
extern void _ZN7S3478C73v29Ev();
extern void _ZN7S3478C73v30Ev();
extern void _ZN7S3478C73v26Ev();
extern void _ZN7S3478C73v27Ev();
extern void _ZN7S3478C73v28Ev();
extern void _ZN7S3478C73v29Ev();
extern void _ZN7S3478C73v30Ev();
extern void _ZN7S3478C93v38Ev();
extern void _ZN7S3478C93v39Ev();
extern void _ZN7S3478C93v40Ev();
extern void _ZN7S3478C93v41Ev();
extern void _ZN7S3478C93v42Ev();
extern void _ZN7S3478C93v43Ev();
extern void _ZN7S3478C93v44Ev();
static  VTBL_ENTRY vtc_S3478C1[] = {
  ABISELECT(88,44),
  ABISELECT(64,32),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S3478C1[0]),
  (VTBL_ENTRY)&_ZN7S3478C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3478C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3478C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3478C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3478C23v33Ev,
  (VTBL_ENTRY)&_ZN7S3478C23v34Ev,
  (VTBL_ENTRY)&_ZN7S3478C23v35Ev,
  (VTBL_ENTRY)&_ZN7S3478C23v36Ev,
  (VTBL_ENTRY)&_ZN7S3478C23v37Ev,
  (VTBL_ENTRY)&_ZN7S3478C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3478C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3478C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3478C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3478C12v5Ev,
  (VTBL_ENTRY)&_ZN7S3478C12v6Ev,
  (VTBL_ENTRY)&_ZN7S3478C12v7Ev,
  (VTBL_ENTRY)&_ZN7S3478C12v8Ev,
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-16),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S3478C1[0]),
  (VTBL_ENTRY)&_ZN7S3478C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3478C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3478C53v11Ev,
  (VTBL_ENTRY)&_ZN7S3478C53v12Ev,
  (VTBL_ENTRY)&_ZN7S3478C53v13Ev,
  (VTBL_ENTRY)&_ZN7S3478C53v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S3478C1D1Ev,_ZTv0_n36_N7S3478C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S3478C1D0Ev,_ZTv0_n36_N7S3478C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3478C43v21Ev,
  (VTBL_ENTRY)&_ZN7S3478C43v22Ev,
  (VTBL_ENTRY)&_ZN7S3478C43v23Ev,
  (VTBL_ENTRY)&_ZN7S3478C43v24Ev,
  (VTBL_ENTRY)&_ZN7S3478C43v25Ev,
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI7S3478C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N7S3478C1D1Ev,_ZTvn12_n36_N7S3478C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N7S3478C1D0Ev,_ZTvn12_n36_N7S3478C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3478C63v15Ev,
  (VTBL_ENTRY)&_ZN7S3478C63v16Ev,
  (VTBL_ENTRY)&_ZN7S3478C63v17Ev,
  (VTBL_ENTRY)&_ZN7S3478C63v18Ev,
  (VTBL_ENTRY)&_ZN7S3478C63v19Ev,
  (VTBL_ENTRY)&_ZN7S3478C63v20Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI7S3478C1[0]),
  (VTBL_ENTRY)&_ZN7S3478C73v26Ev,
  (VTBL_ENTRY)&_ZN7S3478C73v27Ev,
  (VTBL_ENTRY)&_ZN7S3478C73v28Ev,
  (VTBL_ENTRY)&_ZN7S3478C73v29Ev,
  (VTBL_ENTRY)&_ZN7S3478C73v30Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-88,-44),
  (VTBL_ENTRY)&(_ZTI7S3478C1[0]),
  (VTBL_ENTRY)&_ZN7S3478C73v26Ev,
  (VTBL_ENTRY)&_ZN7S3478C73v27Ev,
  (VTBL_ENTRY)&_ZN7S3478C73v28Ev,
  (VTBL_ENTRY)&_ZN7S3478C73v29Ev,
  (VTBL_ENTRY)&_ZN7S3478C73v30Ev,
  (VTBL_ENTRY)&_ZN7S3478C93v38Ev,
  (VTBL_ENTRY)&_ZN7S3478C93v39Ev,
  (VTBL_ENTRY)&_ZN7S3478C93v40Ev,
  (VTBL_ENTRY)&_ZN7S3478C93v41Ev,
  (VTBL_ENTRY)&_ZN7S3478C93v42Ev,
  (VTBL_ENTRY)&_ZN7S3478C93v43Ev,
  (VTBL_ENTRY)&_ZN7S3478C93v44Ev,
};
extern VTBL_ENTRY _ZTV7S3478C1[];
extern void _ZN7S3478C2D1Ev();
extern void _ZN7S3478C2D0Ev();
extern void _ZN7S3478C33v31Ev();
extern void _ZN7S3478C33v32Ev();
extern void _ZN7S3478C23v33Ev();
extern void _ZN7S3478C23v34Ev();
extern void _ZN7S3478C23v35Ev();
extern void _ZN7S3478C23v36Ev();
extern void _ZN7S3478C23v37Ev();
static  VTBL_ENTRY _tg__ZTV7S3478C2__7S3478C1[] = {
  ABISELECT(64,32),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S3478C2[0]),
  (VTBL_ENTRY)&_ZN7S3478C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3478C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3478C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3478C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3478C23v33Ev,
  (VTBL_ENTRY)&_ZN7S3478C23v34Ev,
  (VTBL_ENTRY)&_ZN7S3478C23v35Ev,
  (VTBL_ENTRY)&_ZN7S3478C23v36Ev,
  (VTBL_ENTRY)&_ZN7S3478C23v37Ev,
};
extern void _ZN7S3478C3D1Ev();
extern void _ZN7S3478C3D0Ev();
extern void _ZN7S3478C33v31Ev();
extern void _ZN7S3478C33v32Ev();
static  VTBL_ENTRY _tg__ZTV7S3478C37S3478C2__7S3478C1[] = {
  ABISELECT(64,32),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S3478C3[0]),
  (VTBL_ENTRY)&_ZN7S3478C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3478C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3478C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3478C33v32Ev,
};
extern void _ZN7S3478C52v9Ev();
extern void _ZN7S3478C53v10Ev();
extern void _ZN7S3478C53v11Ev();
extern void _ZN7S3478C53v12Ev();
extern void _ZN7S3478C53v13Ev();
extern void _ZN7S3478C53v14Ev();
extern void ABISELECT(_ZTv0_n72_N7S3478C3D1Ev,_ZTv0_n36_N7S3478C3D1Ev)();
extern void ABISELECT(_ZThn32_N7S3478C3D1Ev,_ZThn16_N7S3478C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S3478C3D0Ev,_ZTv0_n36_N7S3478C3D0Ev)();
extern void ABISELECT(_ZThn32_N7S3478C3D0Ev,_ZThn16_N7S3478C3D0Ev)() __attribute__((weak));
extern void _ZN7S3478C43v21Ev();
extern void _ZN7S3478C43v22Ev();
extern void _ZN7S3478C43v23Ev();
extern void _ZN7S3478C43v24Ev();
extern void _ZN7S3478C43v25Ev();
static  VTBL_ENTRY _tg__ZTV7S3478C4__7S3478C37S3478C2__7S3478C1[] = {
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-16),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S3478C3[0]),
  (VTBL_ENTRY)&_ZN7S3478C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3478C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3478C53v11Ev,
  (VTBL_ENTRY)&_ZN7S3478C53v12Ev,
  (VTBL_ENTRY)&_ZN7S3478C53v13Ev,
  (VTBL_ENTRY)&_ZN7S3478C53v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S3478C3D1Ev,_ZTv0_n36_N7S3478C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S3478C3D0Ev,_ZTv0_n36_N7S3478C3D0Ev),
  (VTBL_ENTRY)&_ZN7S3478C43v21Ev,
  (VTBL_ENTRY)&_ZN7S3478C43v22Ev,
  (VTBL_ENTRY)&_ZN7S3478C43v23Ev,
  (VTBL_ENTRY)&_ZN7S3478C43v24Ev,
  (VTBL_ENTRY)&_ZN7S3478C43v25Ev,
};
extern void ABISELECT(_ZTvn24_n72_N7S3478C3D1Ev,_ZTvn12_n36_N7S3478C3D1Ev)();
extern void ABISELECT(_ZTvn24_n72_N7S3478C3D0Ev,_ZTvn12_n36_N7S3478C3D0Ev)();
extern void _ZN7S3478C63v15Ev();
extern void _ZN7S3478C63v16Ev();
extern void _ZN7S3478C63v17Ev();
extern void _ZN7S3478C63v18Ev();
extern void _ZN7S3478C63v19Ev();
extern void _ZN7S3478C63v20Ev();
static  VTBL_ENTRY _tg__ZTV7S3478C67S3478C4__7S3478C37S3478C2__7S3478C1[] = {
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI7S3478C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N7S3478C3D1Ev,_ZTvn12_n36_N7S3478C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N7S3478C3D0Ev,_ZTvn12_n36_N7S3478C3D0Ev),
  (VTBL_ENTRY)&_ZN7S3478C63v15Ev,
  (VTBL_ENTRY)&_ZN7S3478C63v16Ev,
  (VTBL_ENTRY)&_ZN7S3478C63v17Ev,
  (VTBL_ENTRY)&_ZN7S3478C63v18Ev,
  (VTBL_ENTRY)&_ZN7S3478C63v19Ev,
  (VTBL_ENTRY)&_ZN7S3478C63v20Ev,
};
extern void _ZN7S3478C73v26Ev();
extern void _ZN7S3478C73v27Ev();
extern void _ZN7S3478C73v28Ev();
extern void _ZN7S3478C73v29Ev();
extern void _ZN7S3478C73v30Ev();
static  VTBL_ENTRY _tg__ZTV7S3478C7__7S3478C37S3478C2__7S3478C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI7S3478C3[0]),
  (VTBL_ENTRY)&_ZN7S3478C73v26Ev,
  (VTBL_ENTRY)&_ZN7S3478C73v27Ev,
  (VTBL_ENTRY)&_ZN7S3478C73v28Ev,
  (VTBL_ENTRY)&_ZN7S3478C73v29Ev,
  (VTBL_ENTRY)&_ZN7S3478C73v30Ev,
};
extern void _ZN7S3478C52v9Ev();
extern void _ZN7S3478C53v10Ev();
extern void _ZN7S3478C53v11Ev();
extern void _ZN7S3478C53v12Ev();
extern void _ZN7S3478C53v13Ev();
extern void _ZN7S3478C53v14Ev();
extern void ABISELECT(_ZTv0_n72_N7S3478C2D1Ev,_ZTv0_n36_N7S3478C2D1Ev)();
extern void ABISELECT(_ZThn32_N7S3478C2D1Ev,_ZThn16_N7S3478C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S3478C2D0Ev,_ZTv0_n36_N7S3478C2D0Ev)();
extern void ABISELECT(_ZThn32_N7S3478C2D0Ev,_ZThn16_N7S3478C2D0Ev)() __attribute__((weak));
extern void _ZN7S3478C43v21Ev();
extern void _ZN7S3478C43v22Ev();
extern void _ZN7S3478C43v23Ev();
extern void _ZN7S3478C43v24Ev();
extern void _ZN7S3478C43v25Ev();
static  VTBL_ENTRY _tg__ZTV7S3478C4__7S3478C2__7S3478C1[] = {
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-16),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S3478C2[0]),
  (VTBL_ENTRY)&_ZN7S3478C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3478C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3478C53v11Ev,
  (VTBL_ENTRY)&_ZN7S3478C53v12Ev,
  (VTBL_ENTRY)&_ZN7S3478C53v13Ev,
  (VTBL_ENTRY)&_ZN7S3478C53v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S3478C2D1Ev,_ZTv0_n36_N7S3478C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S3478C2D0Ev,_ZTv0_n36_N7S3478C2D0Ev),
  (VTBL_ENTRY)&_ZN7S3478C43v21Ev,
  (VTBL_ENTRY)&_ZN7S3478C43v22Ev,
  (VTBL_ENTRY)&_ZN7S3478C43v23Ev,
  (VTBL_ENTRY)&_ZN7S3478C43v24Ev,
  (VTBL_ENTRY)&_ZN7S3478C43v25Ev,
};
extern void ABISELECT(_ZTvn24_n72_N7S3478C2D1Ev,_ZTvn12_n36_N7S3478C2D1Ev)();
extern void ABISELECT(_ZTvn24_n72_N7S3478C2D0Ev,_ZTvn12_n36_N7S3478C2D0Ev)();
extern void _ZN7S3478C63v15Ev();
extern void _ZN7S3478C63v16Ev();
extern void _ZN7S3478C63v17Ev();
extern void _ZN7S3478C63v18Ev();
extern void _ZN7S3478C63v19Ev();
extern void _ZN7S3478C63v20Ev();
static  VTBL_ENTRY _tg__ZTV7S3478C67S3478C4__7S3478C2__7S3478C1[] = {
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI7S3478C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N7S3478C2D1Ev,_ZTvn12_n36_N7S3478C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N7S3478C2D0Ev,_ZTvn12_n36_N7S3478C2D0Ev),
  (VTBL_ENTRY)&_ZN7S3478C63v15Ev,
  (VTBL_ENTRY)&_ZN7S3478C63v16Ev,
  (VTBL_ENTRY)&_ZN7S3478C63v17Ev,
  (VTBL_ENTRY)&_ZN7S3478C63v18Ev,
  (VTBL_ENTRY)&_ZN7S3478C63v19Ev,
  (VTBL_ENTRY)&_ZN7S3478C63v20Ev,
};
extern void _ZN7S3478C73v26Ev();
extern void _ZN7S3478C73v27Ev();
extern void _ZN7S3478C73v28Ev();
extern void _ZN7S3478C73v29Ev();
extern void _ZN7S3478C73v30Ev();
static  VTBL_ENTRY _tg__ZTV7S3478C7__7S3478C2__7S3478C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI7S3478C2[0]),
  (VTBL_ENTRY)&_ZN7S3478C73v26Ev,
  (VTBL_ENTRY)&_ZN7S3478C73v27Ev,
  (VTBL_ENTRY)&_ZN7S3478C73v28Ev,
  (VTBL_ENTRY)&_ZN7S3478C73v29Ev,
  (VTBL_ENTRY)&_ZN7S3478C73v30Ev,
};
static  VTT_ENTRY vtt_S3478C1[] = {
  {&(_ZTV7S3478C1[5]),  5,103},
  {&(_tg__ZTV7S3478C2__7S3478C1[4]),  4,13},
  {&(_tg__ZTV7S3478C37S3478C2__7S3478C1[4]),  4,8},
  {&(_tg__ZTV7S3478C4__7S3478C37S3478C2__7S3478C1[20]),  20,33},
  {&(_tg__ZTV7S3478C67S3478C4__7S3478C37S3478C2__7S3478C1[2]),  2,10},
  {&(_tg__ZTV7S3478C7__7S3478C37S3478C2__7S3478C1[7]),  7,12},
  {&(_tg__ZTV7S3478C4__7S3478C2__7S3478C1[20]),  20,33},
  {&(_tg__ZTV7S3478C67S3478C4__7S3478C2__7S3478C1[2]),  2,10},
  {&(_tg__ZTV7S3478C7__7S3478C2__7S3478C1[7]),  7,12},
  {&(_ZTV7S3478C1[42]),  42,103},
  {&(_ZTV7S3478C1[57]),  57,103},
  {&(_ZTV7S3478C1[72]),  72,103},
  {&(_ZTV7S3478C1[91]),  91,103},
};
extern VTBL_ENTRY _ZTI7S3478C1[];
extern  VTBL_ENTRY _ZTV7S3478C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3478C1[];
static VTBL_ENTRY alt_thunk_names26[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S3478C2D0Ev,_ZTv0_n36_N7S3478C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S3478C2D0Ev,_ZThn16_N7S3478C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S3478C2D1Ev,_ZTv0_n36_N7S3478C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S3478C2D1Ev,_ZThn16_N7S3478C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S3478C3D0Ev,_ZTv0_n36_N7S3478C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S3478C3D0Ev,_ZThn16_N7S3478C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S3478C3D1Ev,_ZTv0_n36_N7S3478C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S3478C3D1Ev,_ZThn16_N7S3478C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S3478C1D0Ev,_ZTv0_n36_N7S3478C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S3478C1D0Ev,_ZThn16_N7S3478C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S3478C1D1Ev,_ZTv0_n36_N7S3478C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S3478C1D1Ev,_ZThn16_N7S3478C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3478C1 = {  "S3478C1", // class name
  bases_S3478C1, 8,
  &(vtc_S3478C1[0]), // expected_vtbl_contents
  &(vtt_S3478C1[0]), // expected_vtt_contents
  ABISELECT(136,68), // object size
  NSPAIRA(_ZTI7S3478C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3478C1),103, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3478C1),13, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names26,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6447C2  {
  ::S2120C13_nt s6447c2f0;
  ::S2120C13_nt s6447c2f1;
  void *s6447c2f2;
  int s6447c2f3;
  ::S601C8 s6447c2f4;
  int s6447c2f5:2;
  int s6447c2f6:2;
  unsigned char s6447c2f7:1;
  unsigned char s6447c2f8:1;
  ::S601C53 s6447c2f9;
  ::S601C11 s6447c2f10[2];
  virtual  ~S6447C2(); // _ZN7S6447C2D1Ev
  virtual void  v10(); // _ZN7S6447C23v10Ev
  virtual void  v11(); // _ZN7S6447C23v11Ev
  virtual void  v12(); // _ZN7S6447C23v12Ev
  virtual void  v13(); // _ZN7S6447C23v13Ev
  virtual void  v14(); // _ZN7S6447C23v14Ev
  virtual void  v15(); // _ZN7S6447C23v15Ev
  virtual void  v16(); // _ZN7S6447C23v16Ev
  virtual void  v17(); // _ZN7S6447C23v17Ev
  virtual void  v18(); // _ZN7S6447C23v18Ev
  virtual void  v19(); // _ZN7S6447C23v19Ev
  virtual void  v20(); // _ZN7S6447C23v20Ev
  virtual void  v21(); // _ZN7S6447C23v21Ev
  virtual void  v22(); // _ZN7S6447C23v22Ev
  virtual void  v23(); // _ZN7S6447C23v23Ev
  virtual void  v24(); // _ZN7S6447C23v24Ev
  S6447C2(); // tgen
};
//SIG(-1 S6447C2) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 FC2{ m FC3{ m FL[2]}} FC2 Fp Fi FU4{ m FC5{ Fi:4 Fi:4 Fi:4 Fi:2 Fi:1 Fi:17} Fi} Fi:2 Fi:2 Fc:1 Fc:1 FC6{ m Fp Fp} FC7{ Fp Fp}[2]}


 S6447C2 ::~S6447C2(){ note_dtor("S6447C2", this);}
void  S6447C2 ::v10(){vfunc_called(this, "_ZN7S6447C23v10Ev");}
void  S6447C2 ::v11(){vfunc_called(this, "_ZN7S6447C23v11Ev");}
void  S6447C2 ::v12(){vfunc_called(this, "_ZN7S6447C23v12Ev");}
void  S6447C2 ::v13(){vfunc_called(this, "_ZN7S6447C23v13Ev");}
void  S6447C2 ::v14(){vfunc_called(this, "_ZN7S6447C23v14Ev");}
void  S6447C2 ::v15(){vfunc_called(this, "_ZN7S6447C23v15Ev");}
void  S6447C2 ::v16(){vfunc_called(this, "_ZN7S6447C23v16Ev");}
void  S6447C2 ::v17(){vfunc_called(this, "_ZN7S6447C23v17Ev");}
void  S6447C2 ::v18(){vfunc_called(this, "_ZN7S6447C23v18Ev");}
void  S6447C2 ::v19(){vfunc_called(this, "_ZN7S6447C23v19Ev");}
void  S6447C2 ::v20(){vfunc_called(this, "_ZN7S6447C23v20Ev");}
void  S6447C2 ::v21(){vfunc_called(this, "_ZN7S6447C23v21Ev");}
void  S6447C2 ::v22(){vfunc_called(this, "_ZN7S6447C23v22Ev");}
void  S6447C2 ::v23(){vfunc_called(this, "_ZN7S6447C23v23Ev");}
void  S6447C2 ::v24(){vfunc_called(this, "_ZN7S6447C23v24Ev");}
S6447C2 ::S6447C2(){ note_ctor("S6447C2", this);} // tgen

static void Test_S6447C2()
{
  extern Class_Descriptor cd_S6447C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,20)];
    init_test(&cd_S6447C2, buf);
    S6447C2 *dp, &lv = *(dp=new (buf) S6447C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,76), "sizeof(S6447C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6447C2)");
    check_field_offset(lv, s6447c2f0, ABISELECT(8,4), "S6447C2.s6447c2f0");
    check_field_offset(lv, s6447c2f1, ABISELECT(24,20), "S6447C2.s6447c2f1");
    check_field_offset(lv, s6447c2f2, ABISELECT(40,36), "S6447C2.s6447c2f2");
    check_field_offset(lv, s6447c2f3, ABISELECT(48,40), "S6447C2.s6447c2f3");
    check_field_offset(lv, s6447c2f4, ABISELECT(52,44), "S6447C2.s6447c2f4");
    set_bf_and_test(lv, s6447c2f5, ABISELECT(56,48), 0, 2, 1, "S6447C2");
    set_bf_and_test(lv, s6447c2f5, ABISELECT(56,48), 0, 2, hide_sll(1LL<<1), "S6447C2");
    set_bf_and_test(lv, s6447c2f6, ABISELECT(56,48), 2, 2, 1, "S6447C2");
    set_bf_and_test(lv, s6447c2f6, ABISELECT(56,48), 2, 2, hide_sll(1LL<<1), "S6447C2");
    set_bf_and_test(lv, s6447c2f7, ABISELECT(56,48), 4, 1, 1, "S6447C2");
    set_bf_and_test(lv, s6447c2f8, ABISELECT(56,48), 5, 1, 1, "S6447C2");
    check_field_offset(lv, s6447c2f9, ABISELECT(64,52), "S6447C2.s6447c2f9");
    check_field_offset(lv, s6447c2f10, ABISELECT(80,60), "S6447C2.s6447c2f10");
    test_class_info(&lv, &cd_S6447C2);
    dp->~S6447C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6447C2(Test_S6447C2, "S6447C2", ABISELECT(112,76));

#else // __cplusplus

extern void _ZN7S6447C2C1Ev();
extern void _ZN7S6447C2D1Ev();
Name_Map name_map_S6447C2[] = {
  NSPAIR(_ZN7S6447C2C1Ev),
  NSPAIR(_ZN7S6447C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6447C2[];
extern void _ZN7S6447C2D1Ev();
extern void _ZN7S6447C2D0Ev();
extern void _ZN7S6447C23v10Ev();
extern void _ZN7S6447C23v11Ev();
extern void _ZN7S6447C23v12Ev();
extern void _ZN7S6447C23v13Ev();
extern void _ZN7S6447C23v14Ev();
extern void _ZN7S6447C23v15Ev();
extern void _ZN7S6447C23v16Ev();
extern void _ZN7S6447C23v17Ev();
extern void _ZN7S6447C23v18Ev();
extern void _ZN7S6447C23v19Ev();
extern void _ZN7S6447C23v20Ev();
extern void _ZN7S6447C23v21Ev();
extern void _ZN7S6447C23v22Ev();
extern void _ZN7S6447C23v23Ev();
extern void _ZN7S6447C23v24Ev();
static  VTBL_ENTRY vtc_S6447C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6447C2[0]),
  (VTBL_ENTRY)&_ZN7S6447C2D1Ev,
  (VTBL_ENTRY)&_ZN7S6447C2D0Ev,
  (VTBL_ENTRY)&_ZN7S6447C23v10Ev,
  (VTBL_ENTRY)&_ZN7S6447C23v11Ev,
  (VTBL_ENTRY)&_ZN7S6447C23v12Ev,
  (VTBL_ENTRY)&_ZN7S6447C23v13Ev,
  (VTBL_ENTRY)&_ZN7S6447C23v14Ev,
  (VTBL_ENTRY)&_ZN7S6447C23v15Ev,
  (VTBL_ENTRY)&_ZN7S6447C23v16Ev,
  (VTBL_ENTRY)&_ZN7S6447C23v17Ev,
  (VTBL_ENTRY)&_ZN7S6447C23v18Ev,
  (VTBL_ENTRY)&_ZN7S6447C23v19Ev,
  (VTBL_ENTRY)&_ZN7S6447C23v20Ev,
  (VTBL_ENTRY)&_ZN7S6447C23v21Ev,
  (VTBL_ENTRY)&_ZN7S6447C23v22Ev,
  (VTBL_ENTRY)&_ZN7S6447C23v23Ev,
  (VTBL_ENTRY)&_ZN7S6447C23v24Ev,
};
extern VTBL_ENTRY _ZTI7S6447C2[];
extern  VTBL_ENTRY _ZTV7S6447C2[];
Class_Descriptor cd_S6447C2 = {  "S6447C2", // class name
  0,0,//no base classes
  &(vtc_S6447C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,76), // object size
  NSPAIRA(_ZTI7S6447C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6447C2),19, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6447C1  : S6447C2 {
  ::S601C42 s6447c1f0;
  virtual  ~S6447C1(); // _ZN7S6447C1D1Ev
  virtual void  v1(); // _ZN7S6447C12v1Ev
  virtual void  v2(); // _ZN7S6447C12v2Ev
  virtual void  v3(); // _ZN7S6447C12v3Ev
  virtual void  v4(); // _ZN7S6447C12v4Ev
  virtual void  v5(); // _ZN7S6447C12v5Ev
  virtual void  v6(); // _ZN7S6447C12v6Ev
  virtual void  v7(); // _ZN7S6447C12v7Ev
  virtual void  v8(); // _ZN7S6447C12v8Ev
  virtual void  v9(); // _ZN7S6447C12v9Ev
  S6447C1(); // tgen
};
//SIG(1 S6447C1) C1{ BC2{ vd v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 FC3{ m FC4{ m FL[2]}} FC3 Fp Fi FU5{ m FC6{ Fi:4 Fi:4 Fi:4 Fi:2 Fi:1 Fi:17} Fi} Fi:2 Fi:2 Fc:1 Fc:1 FC7{ m Fp Fp} FC8{ Fp Fp}[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 FC9{ m Fp Fp}}


 S6447C1 ::~S6447C1(){ note_dtor("S6447C1", this);}
void  S6447C1 ::v1(){vfunc_called(this, "_ZN7S6447C12v1Ev");}
void  S6447C1 ::v2(){vfunc_called(this, "_ZN7S6447C12v2Ev");}
void  S6447C1 ::v3(){vfunc_called(this, "_ZN7S6447C12v3Ev");}
void  S6447C1 ::v4(){vfunc_called(this, "_ZN7S6447C12v4Ev");}
void  S6447C1 ::v5(){vfunc_called(this, "_ZN7S6447C12v5Ev");}
void  S6447C1 ::v6(){vfunc_called(this, "_ZN7S6447C12v6Ev");}
void  S6447C1 ::v7(){vfunc_called(this, "_ZN7S6447C12v7Ev");}
void  S6447C1 ::v8(){vfunc_called(this, "_ZN7S6447C12v8Ev");}
void  S6447C1 ::v9(){vfunc_called(this, "_ZN7S6447C12v9Ev");}
S6447C1 ::S6447C1(){ note_ctor("S6447C1", this);} // tgen

static void Test_S6447C1()
{
  extern Class_Descriptor cd_S6447C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,22)];
    init_test(&cd_S6447C1, buf);
    S6447C1 *dp, &lv = *(dp=new (buf) S6447C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,84), "sizeof(S6447C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6447C1)");
    check_base_class_offset(lv, (S6447C2*), 0, "S6447C1");
    check_field_offset(lv, s6447c1f0, ABISELECT(112,76), "S6447C1.s6447c1f0");
    test_class_info(&lv, &cd_S6447C1);
    dp->~S6447C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6447C1(Test_S6447C1, "S6447C1", ABISELECT(128,84));

#else // __cplusplus

extern void _ZN7S6447C1C1Ev();
extern void _ZN7S6447C1D1Ev();
Name_Map name_map_S6447C1[] = {
  NSPAIR(_ZN7S6447C1C1Ev),
  NSPAIR(_ZN7S6447C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6447C2;
extern VTBL_ENTRY _ZTI7S6447C2[];
extern  VTBL_ENTRY _ZTV7S6447C2[];
static Base_Class bases_S6447C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6447C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6447C1[];
extern void _ZN7S6447C1D1Ev();
extern void _ZN7S6447C1D0Ev();
extern void _ZN7S6447C23v10Ev();
extern void _ZN7S6447C23v11Ev();
extern void _ZN7S6447C23v12Ev();
extern void _ZN7S6447C23v13Ev();
extern void _ZN7S6447C23v14Ev();
extern void _ZN7S6447C23v15Ev();
extern void _ZN7S6447C23v16Ev();
extern void _ZN7S6447C23v17Ev();
extern void _ZN7S6447C23v18Ev();
extern void _ZN7S6447C23v19Ev();
extern void _ZN7S6447C23v20Ev();
extern void _ZN7S6447C23v21Ev();
extern void _ZN7S6447C23v22Ev();
extern void _ZN7S6447C23v23Ev();
extern void _ZN7S6447C23v24Ev();
extern void _ZN7S6447C12v1Ev();
extern void _ZN7S6447C12v2Ev();
extern void _ZN7S6447C12v3Ev();
extern void _ZN7S6447C12v4Ev();
extern void _ZN7S6447C12v5Ev();
extern void _ZN7S6447C12v6Ev();
extern void _ZN7S6447C12v7Ev();
extern void _ZN7S6447C12v8Ev();
extern void _ZN7S6447C12v9Ev();
static  VTBL_ENTRY vtc_S6447C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6447C1[0]),
  (VTBL_ENTRY)&_ZN7S6447C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6447C1D0Ev,
  (VTBL_ENTRY)&_ZN7S6447C23v10Ev,
  (VTBL_ENTRY)&_ZN7S6447C23v11Ev,
  (VTBL_ENTRY)&_ZN7S6447C23v12Ev,
  (VTBL_ENTRY)&_ZN7S6447C23v13Ev,
  (VTBL_ENTRY)&_ZN7S6447C23v14Ev,
  (VTBL_ENTRY)&_ZN7S6447C23v15Ev,
  (VTBL_ENTRY)&_ZN7S6447C23v16Ev,
  (VTBL_ENTRY)&_ZN7S6447C23v17Ev,
  (VTBL_ENTRY)&_ZN7S6447C23v18Ev,
  (VTBL_ENTRY)&_ZN7S6447C23v19Ev,
  (VTBL_ENTRY)&_ZN7S6447C23v20Ev,
  (VTBL_ENTRY)&_ZN7S6447C23v21Ev,
  (VTBL_ENTRY)&_ZN7S6447C23v22Ev,
  (VTBL_ENTRY)&_ZN7S6447C23v23Ev,
  (VTBL_ENTRY)&_ZN7S6447C23v24Ev,
  (VTBL_ENTRY)&_ZN7S6447C12v1Ev,
  (VTBL_ENTRY)&_ZN7S6447C12v2Ev,
  (VTBL_ENTRY)&_ZN7S6447C12v3Ev,
  (VTBL_ENTRY)&_ZN7S6447C12v4Ev,
  (VTBL_ENTRY)&_ZN7S6447C12v5Ev,
  (VTBL_ENTRY)&_ZN7S6447C12v6Ev,
  (VTBL_ENTRY)&_ZN7S6447C12v7Ev,
  (VTBL_ENTRY)&_ZN7S6447C12v8Ev,
  (VTBL_ENTRY)&_ZN7S6447C12v9Ev,
};
extern VTBL_ENTRY _ZTI7S6447C1[];
extern  VTBL_ENTRY _ZTV7S6447C1[];
Class_Descriptor cd_S6447C1 = {  "S6447C1", // class name
  bases_S6447C1, 1,
  &(vtc_S6447C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(128,84), // object size
  NSPAIRA(_ZTI7S6447C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6447C1),28, //virtual function table var
  2, // 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  S11720C3_nt  {
  void *s11720c3f0[2];
};
//SIG(-1 S11720C3_nt) C1{ Fp[2]}



//skip512 S11720C3_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11720C12_nt  {
  void *s11720c12f0;
  void *s11720c12f1;
};
//SIG(-1 S11720C12_nt) C1{ Fp[2]}



//skip512 S11720C12_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11720C14  {
  long s11720c14f0;
  long s11720c14f1;
  long s11720c14f2;
  long s11720c14f3;
};
//SIG(-1 S11720C14) C1{ Fl[4]}



static void Test_S11720C14()
{
  {
    init_simple_test("S11720C14");
    S11720C14 lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S11720C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11720C14)");
    check_field_offset(lv, s11720c14f0, 0, "S11720C14.s11720c14f0");
    check_field_offset(lv, s11720c14f1, ABISELECT(8,4), "S11720C14.s11720c14f1");
    check_field_offset(lv, s11720c14f2, ABISELECT(16,8), "S11720C14.s11720c14f2");
    check_field_offset(lv, s11720c14f3, ABISELECT(24,12), "S11720C14.s11720c14f3");
  }
}
static Arrange_To_Call_Me vS11720C14(Test_S11720C14, "S11720C14", ABISELECT(32,16));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11720C15  {
  long s11720c15f0;
  void *s11720c15f1;
  void *s11720c15f2;
};
//SIG(-1 S11720C15) C1{ Fl Fp[2]}



static void Test_S11720C15()
{
  {
    init_simple_test("S11720C15");
    S11720C15 lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S11720C15)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11720C15)");
    check_field_offset(lv, s11720c15f0, 0, "S11720C15.s11720c15f0");
    check_field_offset(lv, s11720c15f1, ABISELECT(8,4), "S11720C15.s11720c15f1");
    check_field_offset(lv, s11720c15f2, ABISELECT(16,8), "S11720C15.s11720c15f2");
  }
}
static Arrange_To_Call_Me vS11720C15(Test_S11720C15, "S11720C15", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11720C13  {
  long s11720c13f0;
  ::S11720C14 s11720c13f1;
  ::S11720C15 s11720c13f2;
  void *s11720c13f3;
  void *s11720c13f4;
};
//SIG(-1 S11720C13) C1{ Fl FC2{ Fl[4]} FC3{ Fl Fp[2]} Fp[2]}



static void Test_S11720C13()
{
  {
    init_simple_test("S11720C13");
    S11720C13 lv;
    check2(sizeof(lv), ABISELECT(80,40), "sizeof(S11720C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11720C13)");
    check_field_offset(lv, s11720c13f0, 0, "S11720C13.s11720c13f0");
    check_field_offset(lv, s11720c13f1, ABISELECT(8,4), "S11720C13.s11720c13f1");
    check_field_offset(lv, s11720c13f2, ABISELECT(40,20), "S11720C13.s11720c13f2");
    check_field_offset(lv, s11720c13f3, ABISELECT(64,32), "S11720C13.s11720c13f3");
    check_field_offset(lv, s11720c13f4, ABISELECT(72,36), "S11720C13.s11720c13f4");
  }
}
static Arrange_To_Call_Me vS11720C13(Test_S11720C13, "S11720C13", ABISELECT(80,40));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11720C18  {
  void *s11720c18f0;
  void *s11720c18f1;
};
//SIG(-1 S11720C18) C1{ Fp[2]}



static void Test_S11720C18()
{
  {
    init_simple_test("S11720C18");
    S11720C18 lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S11720C18)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11720C18)");
    check_field_offset(lv, s11720c18f0, 0, "S11720C18.s11720c18f0");
    check_field_offset(lv, s11720c18f1, ABISELECT(8,4), "S11720C18.s11720c18f1");
  }
}
static Arrange_To_Call_Me vS11720C18(Test_S11720C18, "S11720C18", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11720C16  {
  ::S11720C12_nt s11720c16f0;
  ::S11720C18 s11720c16f1;
  void *s11720c16f2;
  void *s11720c16f3;
};
//SIG(-1 S11720C16) C1{ FC2{ Fp[2]} FC3{ Fp[2]} Fp[2]}



static void Test_S11720C16()
{
  {
    init_simple_test("S11720C16");
    S11720C16 lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S11720C16)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11720C16)");
    check_field_offset(lv, s11720c16f0, 0, "S11720C16.s11720c16f0");
    check_field_offset(lv, s11720c16f1, ABISELECT(16,8), "S11720C16.s11720c16f1");
    check_field_offset(lv, s11720c16f2, ABISELECT(32,16), "S11720C16.s11720c16f2");
    check_field_offset(lv, s11720c16f3, ABISELECT(40,20), "S11720C16.s11720c16f3");
  }
}
static Arrange_To_Call_Me vS11720C16(Test_S11720C16, "S11720C16", ABISELECT(48,24));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11720C1  {
  ::S13685C3 s11720c1f0;
  ::S11720C3_nt s11720c1f1;
  void *s11720c1f2;
  ::S13685C6 s11720c1f3;
  ::S13685C8 s11720c1f4;
  ::S13685C12 s11720c1f5;
  ::S601C11 s11720c1f6;
  ::S11720C12_nt s11720c1f7;
  ::S11720C13 s11720c1f8;
  ::S11720C16 s11720c1f9;
  void *s11720c1f10;
};
//SIG(1 S11720C1) C1{ FC2{ Fl[2] FL[2] Fl FL Fs[3] Fl[11]} FC3{ Fp[2]} Fp FC4{ Fl FL[2] Fl FL Fs} FC5{ Fl FC6{ Fp FL}} FC7{ Fl FU8{ FC9{ Fs Fs[3]} FC10{ Fs}}} FC11{ Fp Fp} FC12{ Fp Fp} FC13{ Fl FC14{ Fl Fl Fl Fl} FC15{ Fl Fp Fp} Fp Fp} FC16{ FC12 FC17{ Fp Fp} Fp Fp} Fp}



static void Test_S11720C1()
{
  {
    init_simple_test("S11720C1");
    S11720C1 lv;
    check2(sizeof(lv), ABISELECT(424,248), "sizeof(S11720C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11720C1)");
    check_field_offset(lv, s11720c1f0, 0, "S11720C1.s11720c1f0");
    check_field_offset(lv, s11720c1f1, ABISELECT(144,88), "S11720C1.s11720c1f1");
    check_field_offset(lv, s11720c1f2, ABISELECT(160,96), "S11720C1.s11720c1f2");
    check_field_offset(lv, s11720c1f3, ABISELECT(168,100), "S11720C1.s11720c1f3");
    check_field_offset(lv, s11720c1f4, ABISELECT(216,136), "S11720C1.s11720c1f4");
    check_field_offset(lv, s11720c1f5, ABISELECT(240,152), "S11720C1.s11720c1f5");
    check_field_offset(lv, s11720c1f6, ABISELECT(256,164), "S11720C1.s11720c1f6");
    check_field_offset(lv, s11720c1f7, ABISELECT(272,172), "S11720C1.s11720c1f7");
    check_field_offset(lv, s11720c1f8, ABISELECT(288,180), "S11720C1.s11720c1f8");
    check_field_offset(lv, s11720c1f9, ABISELECT(368,220), "S11720C1.s11720c1f9");
    check_field_offset(lv, s11720c1f10, ABISELECT(416,244), "S11720C1.s11720c1f10");
  }
}
static Arrange_To_Call_Me vS11720C1(Test_S11720C1, "S11720C1", ABISELECT(424,248));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6953C2  {
  ::S2120C13_nt s6953c2f0;
  ::S2120C13_nt s6953c2f1;
  void *s6953c2f2;
  int s6953c2f3;
  ::S601C8 s6953c2f4;
  int s6953c2f5:2;
  int s6953c2f6:2;
  unsigned char s6953c2f7:1;
  unsigned char s6953c2f8:1;
  ::S601C53 s6953c2f9;
  ::S11720C18 s6953c2f10[2];
  virtual  ~S6953C2(); // _ZN7S6953C2D1Ev
  virtual void  v5(); // _ZN7S6953C22v5Ev
  virtual void  v6(); // _ZN7S6953C22v6Ev
  virtual void  v7(); // _ZN7S6953C22v7Ev
  virtual void  v8(); // _ZN7S6953C22v8Ev
  virtual void  v9(); // _ZN7S6953C22v9Ev
  virtual void  v10(); // _ZN7S6953C23v10Ev
  virtual void  v11(); // _ZN7S6953C23v11Ev
  virtual void  v12(); // _ZN7S6953C23v12Ev
  virtual void  v13(); // _ZN7S6953C23v13Ev
  virtual void  v14(); // _ZN7S6953C23v14Ev
  virtual void  v15(); // _ZN7S6953C23v15Ev
  virtual void  v16(); // _ZN7S6953C23v16Ev
  virtual void  v17(); // _ZN7S6953C23v17Ev
  virtual void  v18(); // _ZN7S6953C23v18Ev
  virtual void  v19(); // _ZN7S6953C23v19Ev
  S6953C2(); // tgen
};
//SIG(-1 S6953C2) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 FC2{ m FC3{ m FL[2]}} FC2 Fp Fi FU4{ m FC5{ Fi:4 Fi:4 Fi:4 Fi:2 Fi:1 Fi:17} Fi} Fi:2 Fi:2 Fc:1 Fc:1 FC6{ m Fp Fp} FC7{ Fp Fp}[2]}


 S6953C2 ::~S6953C2(){ note_dtor("S6953C2", this);}
void  S6953C2 ::v5(){vfunc_called(this, "_ZN7S6953C22v5Ev");}
void  S6953C2 ::v6(){vfunc_called(this, "_ZN7S6953C22v6Ev");}
void  S6953C2 ::v7(){vfunc_called(this, "_ZN7S6953C22v7Ev");}
void  S6953C2 ::v8(){vfunc_called(this, "_ZN7S6953C22v8Ev");}
void  S6953C2 ::v9(){vfunc_called(this, "_ZN7S6953C22v9Ev");}
void  S6953C2 ::v10(){vfunc_called(this, "_ZN7S6953C23v10Ev");}
void  S6953C2 ::v11(){vfunc_called(this, "_ZN7S6953C23v11Ev");}
void  S6953C2 ::v12(){vfunc_called(this, "_ZN7S6953C23v12Ev");}
void  S6953C2 ::v13(){vfunc_called(this, "_ZN7S6953C23v13Ev");}
void  S6953C2 ::v14(){vfunc_called(this, "_ZN7S6953C23v14Ev");}
void  S6953C2 ::v15(){vfunc_called(this, "_ZN7S6953C23v15Ev");}
void  S6953C2 ::v16(){vfunc_called(this, "_ZN7S6953C23v16Ev");}
void  S6953C2 ::v17(){vfunc_called(this, "_ZN7S6953C23v17Ev");}
void  S6953C2 ::v18(){vfunc_called(this, "_ZN7S6953C23v18Ev");}
void  S6953C2 ::v19(){vfunc_called(this, "_ZN7S6953C23v19Ev");}
S6953C2 ::S6953C2(){ note_ctor("S6953C2", this);} // tgen

static void Test_S6953C2()
{
  extern Class_Descriptor cd_S6953C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,20)];
    init_test(&cd_S6953C2, buf);
    S6953C2 *dp, &lv = *(dp=new (buf) S6953C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,76), "sizeof(S6953C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6953C2)");
    check_field_offset(lv, s6953c2f0, ABISELECT(8,4), "S6953C2.s6953c2f0");
    check_field_offset(lv, s6953c2f1, ABISELECT(24,20), "S6953C2.s6953c2f1");
    check_field_offset(lv, s6953c2f2, ABISELECT(40,36), "S6953C2.s6953c2f2");
    check_field_offset(lv, s6953c2f3, ABISELECT(48,40), "S6953C2.s6953c2f3");
    check_field_offset(lv, s6953c2f4, ABISELECT(52,44), "S6953C2.s6953c2f4");
    set_bf_and_test(lv, s6953c2f5, ABISELECT(56,48), 0, 2, 1, "S6953C2");
    set_bf_and_test(lv, s6953c2f5, ABISELECT(56,48), 0, 2, hide_sll(1LL<<1), "S6953C2");
    set_bf_and_test(lv, s6953c2f6, ABISELECT(56,48), 2, 2, 1, "S6953C2");
    set_bf_and_test(lv, s6953c2f6, ABISELECT(56,48), 2, 2, hide_sll(1LL<<1), "S6953C2");
    set_bf_and_test(lv, s6953c2f7, ABISELECT(56,48), 4, 1, 1, "S6953C2");
    set_bf_and_test(lv, s6953c2f8, ABISELECT(56,48), 5, 1, 1, "S6953C2");
    check_field_offset(lv, s6953c2f9, ABISELECT(64,52), "S6953C2.s6953c2f9");
    check_field_offset(lv, s6953c2f10, ABISELECT(80,60), "S6953C2.s6953c2f10");
    test_class_info(&lv, &cd_S6953C2);
    dp->~S6953C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6953C2(Test_S6953C2, "S6953C2", ABISELECT(112,76));

#else // __cplusplus

extern void _ZN7S6953C2C1Ev();
extern void _ZN7S6953C2D1Ev();
Name_Map name_map_S6953C2[] = {
  NSPAIR(_ZN7S6953C2C1Ev),
  NSPAIR(_ZN7S6953C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6953C2[];
extern void _ZN7S6953C2D1Ev();
extern void _ZN7S6953C2D0Ev();
extern void _ZN7S6953C22v5Ev();
extern void _ZN7S6953C22v6Ev();
extern void _ZN7S6953C22v7Ev();
extern void _ZN7S6953C22v8Ev();
extern void _ZN7S6953C22v9Ev();
extern void _ZN7S6953C23v10Ev();
extern void _ZN7S6953C23v11Ev();
extern void _ZN7S6953C23v12Ev();
extern void _ZN7S6953C23v13Ev();
extern void _ZN7S6953C23v14Ev();
extern void _ZN7S6953C23v15Ev();
extern void _ZN7S6953C23v16Ev();
extern void _ZN7S6953C23v17Ev();
extern void _ZN7S6953C23v18Ev();
extern void _ZN7S6953C23v19Ev();
static  VTBL_ENTRY vtc_S6953C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6953C2[0]),
  (VTBL_ENTRY)&_ZN7S6953C2D1Ev,
  (VTBL_ENTRY)&_ZN7S6953C2D0Ev,
  (VTBL_ENTRY)&_ZN7S6953C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6953C22v6Ev,
  (VTBL_ENTRY)&_ZN7S6953C22v7Ev,
  (VTBL_ENTRY)&_ZN7S6953C22v8Ev,
  (VTBL_ENTRY)&_ZN7S6953C22v9Ev,
  (VTBL_ENTRY)&_ZN7S6953C23v10Ev,
  (VTBL_ENTRY)&_ZN7S6953C23v11Ev,
  (VTBL_ENTRY)&_ZN7S6953C23v12Ev,
  (VTBL_ENTRY)&_ZN7S6953C23v13Ev,
  (VTBL_ENTRY)&_ZN7S6953C23v14Ev,
  (VTBL_ENTRY)&_ZN7S6953C23v15Ev,
  (VTBL_ENTRY)&_ZN7S6953C23v16Ev,
  (VTBL_ENTRY)&_ZN7S6953C23v17Ev,
  (VTBL_ENTRY)&_ZN7S6953C23v18Ev,
  (VTBL_ENTRY)&_ZN7S6953C23v19Ev,
};
extern VTBL_ENTRY _ZTI7S6953C2[];
extern  VTBL_ENTRY _ZTV7S6953C2[];
Class_Descriptor cd_S6953C2 = {  "S6953C2", // class name
  0,0,//no base classes
  &(vtc_S6953C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,76), // object size
  NSPAIRA(_ZTI7S6953C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6953C2),19, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6953C1  : S6953C2 {
  ::S601C36 s6953c1f0;
  virtual  ~S6953C1(); // _ZN7S6953C1D1Ev
  virtual void  v1(); // _ZN7S6953C12v1Ev
  virtual void  v2(); // _ZN7S6953C12v2Ev
  virtual void  v3(); // _ZN7S6953C12v3Ev
  virtual void  v4(); // _ZN7S6953C12v4Ev
  S6953C1(); // tgen
};
//SIG(1 S6953C1) C1{ BC2{ vd v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 FC3{ m FC4{ m FL[2]}} FC3 Fp Fi FU5{ m FC6{ Fi:4 Fi:4 Fi:4 Fi:2 Fi:1 Fi:17} Fi} Fi:2 Fi:2 Fc:1 Fc:1 FC7{ m Fp Fp} FC8{ Fp Fp}[2]} vd v1 v2 v3 v4 FC9{ m Fp Fi Fi FC10{ m}}}


 S6953C1 ::~S6953C1(){ note_dtor("S6953C1", this);}
void  S6953C1 ::v1(){vfunc_called(this, "_ZN7S6953C12v1Ev");}
void  S6953C1 ::v2(){vfunc_called(this, "_ZN7S6953C12v2Ev");}
void  S6953C1 ::v3(){vfunc_called(this, "_ZN7S6953C12v3Ev");}
void  S6953C1 ::v4(){vfunc_called(this, "_ZN7S6953C12v4Ev");}
S6953C1 ::S6953C1(){ note_ctor("S6953C1", this);} // tgen

static void Test_S6953C1()
{
  extern Class_Descriptor cd_S6953C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,24)];
    init_test(&cd_S6953C1, buf);
    S6953C1 *dp, &lv = *(dp=new (buf) S6953C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,92), "sizeof(S6953C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6953C1)");
    check_base_class_offset(lv, (S6953C2*), 0, "S6953C1");
    check_field_offset(lv, s6953c1f0, ABISELECT(112,76), "S6953C1.s6953c1f0");
    test_class_info(&lv, &cd_S6953C1);
    dp->~S6953C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6953C1(Test_S6953C1, "S6953C1", ABISELECT(136,92));

#else // __cplusplus

extern void _ZN7S6953C1C1Ev();
extern void _ZN7S6953C1D1Ev();
Name_Map name_map_S6953C1[] = {
  NSPAIR(_ZN7S6953C1C1Ev),
  NSPAIR(_ZN7S6953C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6953C2;
extern VTBL_ENTRY _ZTI7S6953C2[];
extern  VTBL_ENTRY _ZTV7S6953C2[];
static Base_Class bases_S6953C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6953C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6953C1[];
extern void _ZN7S6953C1D1Ev();
extern void _ZN7S6953C1D0Ev();
extern void _ZN7S6953C22v5Ev();
extern void _ZN7S6953C22v6Ev();
extern void _ZN7S6953C22v7Ev();
extern void _ZN7S6953C22v8Ev();
extern void _ZN7S6953C22v9Ev();
extern void _ZN7S6953C23v10Ev();
extern void _ZN7S6953C23v11Ev();
extern void _ZN7S6953C23v12Ev();
extern void _ZN7S6953C23v13Ev();
extern void _ZN7S6953C23v14Ev();
extern void _ZN7S6953C23v15Ev();
extern void _ZN7S6953C23v16Ev();
extern void _ZN7S6953C23v17Ev();
extern void _ZN7S6953C23v18Ev();
extern void _ZN7S6953C23v19Ev();
extern void _ZN7S6953C12v1Ev();
extern void _ZN7S6953C12v2Ev();
extern void _ZN7S6953C12v3Ev();
extern void _ZN7S6953C12v4Ev();
static  VTBL_ENTRY vtc_S6953C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6953C1[0]),
  (VTBL_ENTRY)&_ZN7S6953C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6953C1D0Ev,
  (VTBL_ENTRY)&_ZN7S6953C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6953C22v6Ev,
  (VTBL_ENTRY)&_ZN7S6953C22v7Ev,
  (VTBL_ENTRY)&_ZN7S6953C22v8Ev,
  (VTBL_ENTRY)&_ZN7S6953C22v9Ev,
  (VTBL_ENTRY)&_ZN7S6953C23v10Ev,
  (VTBL_ENTRY)&_ZN7S6953C23v11Ev,
  (VTBL_ENTRY)&_ZN7S6953C23v12Ev,
  (VTBL_ENTRY)&_ZN7S6953C23v13Ev,
  (VTBL_ENTRY)&_ZN7S6953C23v14Ev,
  (VTBL_ENTRY)&_ZN7S6953C23v15Ev,
  (VTBL_ENTRY)&_ZN7S6953C23v16Ev,
  (VTBL_ENTRY)&_ZN7S6953C23v17Ev,
  (VTBL_ENTRY)&_ZN7S6953C23v18Ev,
  (VTBL_ENTRY)&_ZN7S6953C23v19Ev,
  (VTBL_ENTRY)&_ZN7S6953C12v1Ev,
  (VTBL_ENTRY)&_ZN7S6953C12v2Ev,
  (VTBL_ENTRY)&_ZN7S6953C12v3Ev,
  (VTBL_ENTRY)&_ZN7S6953C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S6953C1[];
extern  VTBL_ENTRY _ZTV7S6953C1[];
Class_Descriptor cd_S6953C1 = {  "S6953C1", // class name
  bases_S6953C1, 1,
  &(vtc_S6953C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(136,92), // object size
  NSPAIRA(_ZTI7S6953C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6953C1),23, //virtual function table var
  2, // 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  S20562C5  {
  virtual  ~S20562C5(); // _ZN8S20562C5D1Ev
  virtual void  v13(); // _ZN8S20562C53v13Ev
  virtual void  v14(); // _ZN8S20562C53v14Ev
  virtual void  v15(); // _ZN8S20562C53v15Ev
  virtual void  v16(); // _ZN8S20562C53v16Ev
  virtual void  v17(); // _ZN8S20562C53v17Ev
  virtual void  v18(); // _ZN8S20562C53v18Ev
  S20562C5(); // tgen
};
//SIG(-1 S20562C5) C1{ vd v1 v2 v3 v4 v5 v6}


 S20562C5 ::~S20562C5(){ note_dtor("S20562C5", this);}
void  S20562C5 ::v13(){vfunc_called(this, "_ZN8S20562C53v13Ev");}
void  S20562C5 ::v14(){vfunc_called(this, "_ZN8S20562C53v14Ev");}
void  S20562C5 ::v15(){vfunc_called(this, "_ZN8S20562C53v15Ev");}
void  S20562C5 ::v16(){vfunc_called(this, "_ZN8S20562C53v16Ev");}
void  S20562C5 ::v17(){vfunc_called(this, "_ZN8S20562C53v17Ev");}
void  S20562C5 ::v18(){vfunc_called(this, "_ZN8S20562C53v18Ev");}
S20562C5 ::S20562C5(){ note_ctor("S20562C5", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S20562C5C1Ev();
extern void _ZN8S20562C5D1Ev();
Name_Map name_map_S20562C5[] = {
  NSPAIR(_ZN8S20562C5C1Ev),
  NSPAIR(_ZN8S20562C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20562C5[];
extern void _ZN8S20562C5D1Ev();
extern void _ZN8S20562C5D0Ev();
extern void _ZN8S20562C53v13Ev();
extern void _ZN8S20562C53v14Ev();
extern void _ZN8S20562C53v15Ev();
extern void _ZN8S20562C53v16Ev();
extern void _ZN8S20562C53v17Ev();
extern void _ZN8S20562C53v18Ev();
static  VTBL_ENTRY vtc_S20562C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20562C5[0]),
  (VTBL_ENTRY)&_ZN8S20562C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20562C5D0Ev,
  (VTBL_ENTRY)&_ZN8S20562C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20562C53v14Ev,
  (VTBL_ENTRY)&_ZN8S20562C53v15Ev,
  (VTBL_ENTRY)&_ZN8S20562C53v16Ev,
  (VTBL_ENTRY)&_ZN8S20562C53v17Ev,
  (VTBL_ENTRY)&_ZN8S20562C53v18Ev,
};
extern VTBL_ENTRY _ZTI8S20562C5[];
extern  VTBL_ENTRY _ZTV8S20562C5[];
Class_Descriptor cd_S20562C5 = {  "S20562C5", // class name
  0,0,//no base classes
  &(vtc_S20562C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20562C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20562C5),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20562C4  {
  ::S20562C5 s20562c4f0;
  int s20562c4f1;
  virtual void  v7(); // _ZN8S20562C42v7Ev
  virtual void  v8(); // _ZN8S20562C42v8Ev
  virtual void  v9(); // _ZN8S20562C42v9Ev
  virtual void  v10(); // _ZN8S20562C43v10Ev
  virtual void  v11(); // _ZN8S20562C43v11Ev
  virtual void  v12(); // _ZN8S20562C43v12Ev
  ~S20562C4(); // tgen
  S20562C4(); // tgen
};
//SIG(-1 S20562C4) C1{ v1 v2 v3 v4 v5 v6 FC2{ vd v7 v8 v9 v10 v11 v12} Fi}


void  S20562C4 ::v7(){vfunc_called(this, "_ZN8S20562C42v7Ev");}
void  S20562C4 ::v8(){vfunc_called(this, "_ZN8S20562C42v8Ev");}
void  S20562C4 ::v9(){vfunc_called(this, "_ZN8S20562C42v9Ev");}
void  S20562C4 ::v10(){vfunc_called(this, "_ZN8S20562C43v10Ev");}
void  S20562C4 ::v11(){vfunc_called(this, "_ZN8S20562C43v11Ev");}
void  S20562C4 ::v12(){vfunc_called(this, "_ZN8S20562C43v12Ev");}
S20562C4 ::~S20562C4(){ note_dtor("S20562C4", this);} // tgen
S20562C4 ::S20562C4(){ note_ctor("S20562C4", this);} // tgen

static void Test_S20562C4()
{
  extern Class_Descriptor cd_S20562C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S20562C4, buf);
    S20562C4 *dp, &lv = *(dp=new (buf) S20562C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S20562C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20562C4)");
    check_field_offset(lv, s20562c4f0, ABISELECT(8,4), "S20562C4.s20562c4f0");
    check_field_offset(lv, s20562c4f1, ABISELECT(16,8), "S20562C4.s20562c4f1");
    test_class_info(&lv, &cd_S20562C4);
    dp->~S20562C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20562C4(Test_S20562C4, "S20562C4", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S20562C4C1Ev();
extern void _ZN8S20562C4D1Ev();
Name_Map name_map_S20562C4[] = {
  NSPAIR(_ZN8S20562C4C1Ev),
  NSPAIR(_ZN8S20562C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20562C4[];
extern void _ZN8S20562C42v7Ev();
extern void _ZN8S20562C42v8Ev();
extern void _ZN8S20562C42v9Ev();
extern void _ZN8S20562C43v10Ev();
extern void _ZN8S20562C43v11Ev();
extern void _ZN8S20562C43v12Ev();
static  VTBL_ENTRY vtc_S20562C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20562C4[0]),
  (VTBL_ENTRY)&_ZN8S20562C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20562C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20562C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20562C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20562C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20562C43v12Ev,
};
extern VTBL_ENTRY _ZTI8S20562C4[];
extern  VTBL_ENTRY _ZTV8S20562C4[];
Class_Descriptor cd_S20562C4 = {  "S20562C4", // class name
  0,0,//no base classes
  &(vtc_S20562C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S20562C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20562C4),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  S20562C3  : S20562C4 , S20562C5 {
  virtual  ~S20562C3(); // _ZN8S20562C3D1Ev
  virtual void  v19(); // _ZN8S20562C33v19Ev
  virtual void  v20(); // _ZN8S20562C33v20Ev
  virtual void  v21(); // _ZN8S20562C33v21Ev
  virtual void  v22(); // _ZN8S20562C33v22Ev
  virtual void  v23(); // _ZN8S20562C33v23Ev
  S20562C3(); // tgen
};
//SIG(-1 S20562C3) C1{ BC2{ v6 v7 v8 v9 v10 v11 FC3{ vd v12 v13 v14 v15 v16 v17} Fi} BC3 vd v1 v2 v3 v4 v5}


 S20562C3 ::~S20562C3(){ note_dtor("S20562C3", this);}
void  S20562C3 ::v19(){vfunc_called(this, "_ZN8S20562C33v19Ev");}
void  S20562C3 ::v20(){vfunc_called(this, "_ZN8S20562C33v20Ev");}
void  S20562C3 ::v21(){vfunc_called(this, "_ZN8S20562C33v21Ev");}
void  S20562C3 ::v22(){vfunc_called(this, "_ZN8S20562C33v22Ev");}
void  S20562C3 ::v23(){vfunc_called(this, "_ZN8S20562C33v23Ev");}
S20562C3 ::S20562C3(){ note_ctor("S20562C3", this);} // tgen

static void Test_S20562C3()
{
  extern Class_Descriptor cd_S20562C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S20562C3, buf);
    S20562C3 *dp, &lv = *(dp=new (buf) S20562C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S20562C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20562C3)");
    check_base_class_offset(lv, (S20562C4*), 0, "S20562C3");
    check_base_class_offset(lv, (S20562C5*), ABISELECT(24,12), "S20562C3");
    test_class_info(&lv, &cd_S20562C3);
    dp->~S20562C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20562C3(Test_S20562C3, "S20562C3", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S20562C3C1Ev();
extern void _ZN8S20562C3D1Ev();
Name_Map name_map_S20562C3[] = {
  NSPAIR(_ZN8S20562C3C1Ev),
  NSPAIR(_ZN8S20562C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20562C4;
extern VTBL_ENTRY _ZTI8S20562C4[];
extern  VTBL_ENTRY _ZTV8S20562C4[];
extern Class_Descriptor cd_S20562C5;
extern VTBL_ENTRY _ZTI8S20562C5[];
extern  VTBL_ENTRY _ZTV8S20562C5[];
static Base_Class bases_S20562C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20562C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S20562C5,    ABISELECT(24,12), //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
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20562C3[];
extern void _ZN8S20562C42v7Ev();
extern void _ZN8S20562C42v8Ev();
extern void _ZN8S20562C42v9Ev();
extern void _ZN8S20562C43v10Ev();
extern void _ZN8S20562C43v11Ev();
extern void _ZN8S20562C43v12Ev();
extern void _ZN8S20562C3D1Ev();
extern void _ZN8S20562C3D0Ev();
extern void _ZN8S20562C33v19Ev();
extern void _ZN8S20562C33v20Ev();
extern void _ZN8S20562C33v21Ev();
extern void _ZN8S20562C33v22Ev();
extern void _ZN8S20562C33v23Ev();
extern void ABISELECT(_ZThn24_N8S20562C3D1Ev,_ZThn12_N8S20562C3D1Ev)();
extern void ABISELECT(_ZThn24_N8S20562C3D0Ev,_ZThn12_N8S20562C3D0Ev)();
extern void _ZN8S20562C53v13Ev();
extern void _ZN8S20562C53v14Ev();
extern void _ZN8S20562C53v15Ev();
extern void _ZN8S20562C53v16Ev();
extern void _ZN8S20562C53v17Ev();
extern void _ZN8S20562C53v18Ev();
static  VTBL_ENTRY vtc_S20562C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20562C3[0]),
  (VTBL_ENTRY)&_ZN8S20562C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20562C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20562C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20562C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20562C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20562C43v12Ev,
  (VTBL_ENTRY)&_ZN8S20562C3D1Ev,
  (VTBL_ENTRY)&_ZN8S20562C3D0Ev,
  (VTBL_ENTRY)&_ZN8S20562C33v19Ev,
  (VTBL_ENTRY)&_ZN8S20562C33v20Ev,
  (VTBL_ENTRY)&_ZN8S20562C33v21Ev,
  (VTBL_ENTRY)&_ZN8S20562C33v22Ev,
  (VTBL_ENTRY)&_ZN8S20562C33v23Ev,
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20562C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S20562C3D1Ev,_ZThn12_N8S20562C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S20562C3D0Ev,_ZThn12_N8S20562C3D0Ev),
  (VTBL_ENTRY)&_ZN8S20562C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20562C53v14Ev,
  (VTBL_ENTRY)&_ZN8S20562C53v15Ev,
  (VTBL_ENTRY)&_ZN8S20562C53v16Ev,
  (VTBL_ENTRY)&_ZN8S20562C53v17Ev,
  (VTBL_ENTRY)&_ZN8S20562C53v18Ev,
};
extern VTBL_ENTRY _ZTI8S20562C3[];
extern  VTBL_ENTRY _ZTV8S20562C3[];
Class_Descriptor cd_S20562C3 = {  "S20562C3", // class name
  bases_S20562C3, 2,
  &(vtc_S20562C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S20562C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20562C3),25, //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  S20562C6  {
  ::S601C21_nt s20562c6f0;
  void *s20562c6f1;
  virtual void  v24(); // _ZN8S20562C63v24Ev
  virtual void  v25(); // _ZN8S20562C63v25Ev
  virtual void  v26(); // _ZN8S20562C63v26Ev
  virtual void  v27(); // _ZN8S20562C63v27Ev
  virtual void  v28(); // _ZN8S20562C63v28Ev
  ~S20562C6(); // tgen
  S20562C6(); // tgen
};
//SIG(-1 S20562C6) C1{ v1 v2 v3 v4 v5 FC2{} Fp}


void  S20562C6 ::v24(){vfunc_called(this, "_ZN8S20562C63v24Ev");}
void  S20562C6 ::v25(){vfunc_called(this, "_ZN8S20562C63v25Ev");}
void  S20562C6 ::v26(){vfunc_called(this, "_ZN8S20562C63v26Ev");}
void  S20562C6 ::v27(){vfunc_called(this, "_ZN8S20562C63v27Ev");}
void  S20562C6 ::v28(){vfunc_called(this, "_ZN8S20562C63v28Ev");}
S20562C6 ::~S20562C6(){ note_dtor("S20562C6", this);} // tgen
S20562C6 ::S20562C6(){ note_ctor("S20562C6", this);} // tgen

static void Test_S20562C6()
{
  extern Class_Descriptor cd_S20562C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S20562C6, buf);
    S20562C6 *dp, &lv = *(dp=new (buf) S20562C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S20562C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20562C6)");
    check_field_offset(lv, s20562c6f0, ABISELECT(8,4), "S20562C6.s20562c6f0");
    check_field_offset(lv, s20562c6f1, ABISELECT(16,8), "S20562C6.s20562c6f1");
    test_class_info(&lv, &cd_S20562C6);
    dp->~S20562C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20562C6(Test_S20562C6, "S20562C6", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S20562C6C1Ev();
extern void _ZN8S20562C6D1Ev();
Name_Map name_map_S20562C6[] = {
  NSPAIR(_ZN8S20562C6C1Ev),
  NSPAIR(_ZN8S20562C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20562C6[];
extern void _ZN8S20562C63v24Ev();
extern void _ZN8S20562C63v25Ev();
extern void _ZN8S20562C63v26Ev();
extern void _ZN8S20562C63v27Ev();
extern void _ZN8S20562C63v28Ev();
static  VTBL_ENTRY vtc_S20562C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20562C6[0]),
  (VTBL_ENTRY)&_ZN8S20562C63v24Ev,
  (VTBL_ENTRY)&_ZN8S20562C63v25Ev,
  (VTBL_ENTRY)&_ZN8S20562C63v26Ev,
  (VTBL_ENTRY)&_ZN8S20562C63v27Ev,
  (VTBL_ENTRY)&_ZN8S20562C63v28Ev,
};
extern VTBL_ENTRY _ZTI8S20562C6[];
extern  VTBL_ENTRY _ZTV8S20562C6[];
Class_Descriptor cd_S20562C6 = {  "S20562C6", // class name
  0,0,//no base classes
  &(vtc_S20562C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S20562C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20562C6),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  S20562C2  : virtual S20562C3 , virtual S20562C6 {
  virtual  ~S20562C2(); // _ZN8S20562C2D2Ev
  virtual void  v29(); // _ZN8S20562C23v29Ev
  virtual void  v30(); // _ZN8S20562C23v30Ev
  S20562C2(); // tgen
};
//SIG(-1 S20562C2) C1{ VBC2{ BC3{ v3 v4 v5 v6 v7 v8 FC4{ vd v9 v10 v11 v12 v13 v14} Fi} BC4 vd v15 v16 v17 v18 v19} VBC5{ v20 v21 v22 v23 v24 FC6{} Fp} vd v1 v2}


 S20562C2 ::~S20562C2(){ note_dtor("S20562C2", this);}
void  S20562C2 ::v29(){vfunc_called(this, "_ZN8S20562C23v29Ev");}
void  S20562C2 ::v30(){vfunc_called(this, "_ZN8S20562C23v30Ev");}
S20562C2 ::S20562C2(){ note_ctor("S20562C2", this);} // tgen

static void Test_S20562C2()
{
  extern Class_Descriptor cd_S20562C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[9];
    init_test(&cd_S20562C2, buf);
    S20562C2 *dp, &lv = *(dp=new (buf) S20562C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S20562C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20562C2)");
    check_base_class_offset(lv, (S20562C4*)(S20562C3*), ABISELECT(8,4), "S20562C2");
    check_base_class_offset(lv, (S20562C5*)(S20562C3*), ABISELECT(32,16), "S20562C2");
    check_base_class_offset(lv, (S20562C3*), ABISELECT(8,4), "S20562C2");
    check_base_class_offset(lv, (S20562C6*), ABISELECT(40,20), "S20562C2");
    test_class_info(&lv, &cd_S20562C2);
    dp->~S20562C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20562C2(Test_S20562C2, "S20562C2", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN8S20562C2C1Ev();
extern void _ZN8S20562C2D2Ev();
Name_Map name_map_S20562C2[] = {
  NSPAIR(_ZN8S20562C2C1Ev),
  NSPAIR(_ZN8S20562C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20562C4;
extern VTBL_ENTRY _ZTI8S20562C4[];
extern  VTBL_ENTRY _ZTV8S20562C4[];
extern Class_Descriptor cd_S20562C5;
extern VTBL_ENTRY _ZTI8S20562C5[];
extern  VTBL_ENTRY _ZTV8S20562C5[];
extern Class_Descriptor cd_S20562C3;
extern VTBL_ENTRY _ZTI8S20562C3[];
extern  VTBL_ENTRY _ZTV8S20562C3[];
extern Class_Descriptor cd_S20562C6;
extern VTBL_ENTRY _ZTI8S20562C6[];
extern  VTBL_ENTRY _ZTV8S20562C6[];
static Base_Class bases_S20562C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20562C4,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20562C5,    ABISELECT(32,16), //bcp->offset
    41, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20562C3,    ABISELECT(8,4), //bcp->offset
    8, //bcp->virtual_function_table_offset
    20, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20562C6,    ABISELECT(40,20), //bcp->offset
    51, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20562C2[];
extern void _ZN8S20562C2D1Ev();
extern void _ZN8S20562C2D0Ev();
extern void _ZN8S20562C23v29Ev();
extern void _ZN8S20562C23v30Ev();
extern void _ZN8S20562C42v7Ev();
extern void _ZN8S20562C42v8Ev();
extern void _ZN8S20562C42v9Ev();
extern void _ZN8S20562C43v10Ev();
extern void _ZN8S20562C43v11Ev();
extern void _ZN8S20562C43v12Ev();
extern void ABISELECT(_ZTv0_n72_N8S20562C2D1Ev,_ZTv0_n36_N8S20562C2D1Ev)();
extern void ABISELECT(_ZThn8_N8S20562C2D1Ev,_ZThn4_N8S20562C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S20562C2D0Ev,_ZTv0_n36_N8S20562C2D0Ev)();
extern void ABISELECT(_ZThn8_N8S20562C2D0Ev,_ZThn4_N8S20562C2D0Ev)() __attribute__((weak));
extern void _ZN8S20562C33v19Ev();
extern void _ZN8S20562C33v20Ev();
extern void _ZN8S20562C33v21Ev();
extern void _ZN8S20562C33v22Ev();
extern void _ZN8S20562C33v23Ev();
extern void ABISELECT(_ZTvn24_n72_N8S20562C2D1Ev,_ZTvn12_n36_N8S20562C2D1Ev)();
extern void ABISELECT(_ZTvn24_n72_N8S20562C2D0Ev,_ZTvn12_n36_N8S20562C2D0Ev)();
extern void _ZN8S20562C53v13Ev();
extern void _ZN8S20562C53v14Ev();
extern void _ZN8S20562C53v15Ev();
extern void _ZN8S20562C53v16Ev();
extern void _ZN8S20562C53v17Ev();
extern void _ZN8S20562C53v18Ev();
extern void _ZN8S20562C63v24Ev();
extern void _ZN8S20562C63v25Ev();
extern void _ZN8S20562C63v26Ev();
extern void _ZN8S20562C63v27Ev();
extern void _ZN8S20562C63v28Ev();
static  VTBL_ENTRY vtc_S20562C2[] = {
  ABISELECT(40,20),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20562C2[0]),
  (VTBL_ENTRY)&_ZN8S20562C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20562C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20562C23v29Ev,
  (VTBL_ENTRY)&_ZN8S20562C23v30Ev,
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20562C2[0]),
  (VTBL_ENTRY)&_ZN8S20562C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20562C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20562C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20562C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20562C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20562C43v12Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20562C2D1Ev,_ZTv0_n36_N8S20562C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20562C2D0Ev,_ZTv0_n36_N8S20562C2D0Ev),
  (VTBL_ENTRY)&_ZN8S20562C33v19Ev,
  (VTBL_ENTRY)&_ZN8S20562C33v20Ev,
  (VTBL_ENTRY)&_ZN8S20562C33v21Ev,
  (VTBL_ENTRY)&_ZN8S20562C33v22Ev,
  (VTBL_ENTRY)&_ZN8S20562C33v23Ev,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S20562C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N8S20562C2D1Ev,_ZTvn12_n36_N8S20562C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N8S20562C2D0Ev,_ZTvn12_n36_N8S20562C2D0Ev),
  (VTBL_ENTRY)&_ZN8S20562C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20562C53v14Ev,
  (VTBL_ENTRY)&_ZN8S20562C53v15Ev,
  (VTBL_ENTRY)&_ZN8S20562C53v16Ev,
  (VTBL_ENTRY)&_ZN8S20562C53v17Ev,
  (VTBL_ENTRY)&_ZN8S20562C53v18Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S20562C2[0]),
  (VTBL_ENTRY)&_ZN8S20562C63v24Ev,
  (VTBL_ENTRY)&_ZN8S20562C63v25Ev,
  (VTBL_ENTRY)&_ZN8S20562C63v26Ev,
  (VTBL_ENTRY)&_ZN8S20562C63v27Ev,
  (VTBL_ENTRY)&_ZN8S20562C63v28Ev,
};
extern VTBL_ENTRY _ZTV8S20562C2[];
static  VTT_ENTRY vtt_S20562C2[] = {
  {&(_ZTV8S20562C2[4]),  4,63},
  {&(_ZTV8S20562C2[28]),  28,63},
  {&(_ZTV8S20562C2[43]),  43,63},
  {&(_ZTV8S20562C2[58]),  58,63},
};
extern VTBL_ENTRY _ZTI8S20562C2[];
extern  VTBL_ENTRY _ZTV8S20562C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20562C2[];
static VTBL_ENTRY alt_thunk_names27[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20562C2D0Ev,_ZTv0_n36_N8S20562C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20562C2D0Ev,_ZThn4_N8S20562C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20562C2D1Ev,_ZTv0_n36_N8S20562C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20562C2D1Ev,_ZThn4_N8S20562C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20562C2 = {  "S20562C2", // class name
  bases_S20562C2, 4,
  &(vtc_S20562C2[0]), // expected_vtbl_contents
  &(vtt_S20562C2[0]), // expected_vtt_contents
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI8S20562C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20562C2),63, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20562C2),4, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names27,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20562C9  : virtual S20562C3 , virtual S20562C6 {
  virtual  ~S20562C9(); // _ZN8S20562C9D2Ev
  virtual void  v31(); // _ZN8S20562C93v31Ev
  virtual void  v32(); // _ZN8S20562C93v32Ev
  virtual void  v33(); // _ZN8S20562C93v33Ev
  virtual void  v34(); // _ZN8S20562C93v34Ev
  virtual void  v35(); // _ZN8S20562C93v35Ev
  virtual void  v36(); // _ZN8S20562C93v36Ev
  S20562C9(); // tgen
};
//SIG(-1 S20562C9) C1{ VBC2{ BC3{ v7 v8 v9 v10 v11 v12 FC4{ vd v13 v14 v15 v16 v17 v18} Fi} BC4 vd v19 v20 v21 v22 v23} VBC5{ v24 v25 v26 v27 v28 FC6{} Fp} vd v1 v2 v3 v4 v5 v6}


 S20562C9 ::~S20562C9(){ note_dtor("S20562C9", this);}
void  S20562C9 ::v31(){vfunc_called(this, "_ZN8S20562C93v31Ev");}
void  S20562C9 ::v32(){vfunc_called(this, "_ZN8S20562C93v32Ev");}
void  S20562C9 ::v33(){vfunc_called(this, "_ZN8S20562C93v33Ev");}
void  S20562C9 ::v34(){vfunc_called(this, "_ZN8S20562C93v34Ev");}
void  S20562C9 ::v35(){vfunc_called(this, "_ZN8S20562C93v35Ev");}
void  S20562C9 ::v36(){vfunc_called(this, "_ZN8S20562C93v36Ev");}
S20562C9 ::S20562C9(){ note_ctor("S20562C9", this);} // tgen

static void Test_S20562C9()
{
  extern Class_Descriptor cd_S20562C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[9];
    init_test(&cd_S20562C9, buf);
    S20562C9 *dp, &lv = *(dp=new (buf) S20562C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S20562C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20562C9)");
    check_base_class_offset(lv, (S20562C4*)(S20562C3*), ABISELECT(8,4), "S20562C9");
    check_base_class_offset(lv, (S20562C5*)(S20562C3*), ABISELECT(32,16), "S20562C9");
    check_base_class_offset(lv, (S20562C3*), ABISELECT(8,4), "S20562C9");
    check_base_class_offset(lv, (S20562C6*), ABISELECT(40,20), "S20562C9");
    test_class_info(&lv, &cd_S20562C9);
    dp->~S20562C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20562C9(Test_S20562C9, "S20562C9", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN8S20562C9C1Ev();
extern void _ZN8S20562C9D2Ev();
Name_Map name_map_S20562C9[] = {
  NSPAIR(_ZN8S20562C9C1Ev),
  NSPAIR(_ZN8S20562C9D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20562C4;
extern VTBL_ENTRY _ZTI8S20562C4[];
extern  VTBL_ENTRY _ZTV8S20562C4[];
extern Class_Descriptor cd_S20562C5;
extern VTBL_ENTRY _ZTI8S20562C5[];
extern  VTBL_ENTRY _ZTV8S20562C5[];
extern Class_Descriptor cd_S20562C3;
extern VTBL_ENTRY _ZTI8S20562C3[];
extern  VTBL_ENTRY _ZTV8S20562C3[];
extern Class_Descriptor cd_S20562C6;
extern VTBL_ENTRY _ZTI8S20562C6[];
extern  VTBL_ENTRY _ZTV8S20562C6[];
static Base_Class bases_S20562C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20562C4,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20562C5,    ABISELECT(32,16), //bcp->offset
    45, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20562C3,    ABISELECT(8,4), //bcp->offset
    12, //bcp->virtual_function_table_offset
    20, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20562C6,    ABISELECT(40,20), //bcp->offset
    55, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20562C9[];
extern void _ZN8S20562C9D1Ev();
extern void _ZN8S20562C9D0Ev();
extern void _ZN8S20562C93v31Ev();
extern void _ZN8S20562C93v32Ev();
extern void _ZN8S20562C93v33Ev();
extern void _ZN8S20562C93v34Ev();
extern void _ZN8S20562C93v35Ev();
extern void _ZN8S20562C93v36Ev();
extern void _ZN8S20562C42v7Ev();
extern void _ZN8S20562C42v8Ev();
extern void _ZN8S20562C42v9Ev();
extern void _ZN8S20562C43v10Ev();
extern void _ZN8S20562C43v11Ev();
extern void _ZN8S20562C43v12Ev();
extern void ABISELECT(_ZTv0_n72_N8S20562C9D1Ev,_ZTv0_n36_N8S20562C9D1Ev)();
extern void ABISELECT(_ZThn8_N8S20562C9D1Ev,_ZThn4_N8S20562C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S20562C9D0Ev,_ZTv0_n36_N8S20562C9D0Ev)();
extern void ABISELECT(_ZThn8_N8S20562C9D0Ev,_ZThn4_N8S20562C9D0Ev)() __attribute__((weak));
extern void _ZN8S20562C33v19Ev();
extern void _ZN8S20562C33v20Ev();
extern void _ZN8S20562C33v21Ev();
extern void _ZN8S20562C33v22Ev();
extern void _ZN8S20562C33v23Ev();
extern void ABISELECT(_ZTvn24_n72_N8S20562C9D1Ev,_ZTvn12_n36_N8S20562C9D1Ev)();
extern void ABISELECT(_ZTvn24_n72_N8S20562C9D0Ev,_ZTvn12_n36_N8S20562C9D0Ev)();
extern void _ZN8S20562C53v13Ev();
extern void _ZN8S20562C53v14Ev();
extern void _ZN8S20562C53v15Ev();
extern void _ZN8S20562C53v16Ev();
extern void _ZN8S20562C53v17Ev();
extern void _ZN8S20562C53v18Ev();
extern void _ZN8S20562C63v24Ev();
extern void _ZN8S20562C63v25Ev();
extern void _ZN8S20562C63v26Ev();
extern void _ZN8S20562C63v27Ev();
extern void _ZN8S20562C63v28Ev();
static  VTBL_ENTRY vtc_S20562C9[] = {
  ABISELECT(40,20),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20562C9[0]),
  (VTBL_ENTRY)&_ZN8S20562C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20562C9D0Ev,
  (VTBL_ENTRY)&_ZN8S20562C93v31Ev,
  (VTBL_ENTRY)&_ZN8S20562C93v32Ev,
  (VTBL_ENTRY)&_ZN8S20562C93v33Ev,
  (VTBL_ENTRY)&_ZN8S20562C93v34Ev,
  (VTBL_ENTRY)&_ZN8S20562C93v35Ev,
  (VTBL_ENTRY)&_ZN8S20562C93v36Ev,
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20562C9[0]),
  (VTBL_ENTRY)&_ZN8S20562C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20562C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20562C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20562C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20562C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20562C43v12Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20562C9D1Ev,_ZTv0_n36_N8S20562C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20562C9D0Ev,_ZTv0_n36_N8S20562C9D0Ev),
  (VTBL_ENTRY)&_ZN8S20562C33v19Ev,
  (VTBL_ENTRY)&_ZN8S20562C33v20Ev,
  (VTBL_ENTRY)&_ZN8S20562C33v21Ev,
  (VTBL_ENTRY)&_ZN8S20562C33v22Ev,
  (VTBL_ENTRY)&_ZN8S20562C33v23Ev,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S20562C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N8S20562C9D1Ev,_ZTvn12_n36_N8S20562C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N8S20562C9D0Ev,_ZTvn12_n36_N8S20562C9D0Ev),
  (VTBL_ENTRY)&_ZN8S20562C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20562C53v14Ev,
  (VTBL_ENTRY)&_ZN8S20562C53v15Ev,
  (VTBL_ENTRY)&_ZN8S20562C53v16Ev,
  (VTBL_ENTRY)&_ZN8S20562C53v17Ev,
  (VTBL_ENTRY)&_ZN8S20562C53v18Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S20562C9[0]),
  (VTBL_ENTRY)&_ZN8S20562C63v24Ev,
  (VTBL_ENTRY)&_ZN8S20562C63v25Ev,
  (VTBL_ENTRY)&_ZN8S20562C63v26Ev,
  (VTBL_ENTRY)&_ZN8S20562C63v27Ev,
  (VTBL_ENTRY)&_ZN8S20562C63v28Ev,
};
extern VTBL_ENTRY _ZTV8S20562C9[];
static  VTT_ENTRY vtt_S20562C9[] = {
  {&(_ZTV8S20562C9[4]),  4,67},
  {&(_ZTV8S20562C9[32]),  32,67},
  {&(_ZTV8S20562C9[47]),  47,67},
  {&(_ZTV8S20562C9[62]),  62,67},
};
extern VTBL_ENTRY _ZTI8S20562C9[];
extern  VTBL_ENTRY _ZTV8S20562C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20562C9[];
static VTBL_ENTRY alt_thunk_names28[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20562C9D0Ev,_ZTv0_n36_N8S20562C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20562C9D0Ev,_ZThn4_N8S20562C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20562C9D1Ev,_ZTv0_n36_N8S20562C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20562C9D1Ev,_ZThn4_N8S20562C9D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20562C9 = {  "S20562C9", // class name
  bases_S20562C9, 4,
  &(vtc_S20562C9[0]), // expected_vtbl_contents
  &(vtt_S20562C9[0]), // expected_vtt_contents
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI8S20562C9),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20562C9),67, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20562C9),4, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names28,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20562C8  : virtual S20562C9 {
  virtual  ~S20562C8(); // _ZN8S20562C8D2Ev
  virtual void  v37(); // _ZN8S20562C83v37Ev
  virtual void  v38(); // _ZN8S20562C83v38Ev
  S20562C8(); // tgen
};
//SIG(-1 S20562C8) C1{ VBC2{ VBC3{ BC4{ v3 v4 v5 v6 v7 v8 FC5{ vd v9 v10 v11 v12 v13 v14} Fi} BC5 vd v15 v16 v17 v18 v19} VBC6{ v20 v21 v22 v23 v24 FC7{} Fp} vd v25 v26 v27 v28 v29 v30} vd v1 v2}


 S20562C8 ::~S20562C8(){ note_dtor("S20562C8", this);}
void  S20562C8 ::v37(){vfunc_called(this, "_ZN8S20562C83v37Ev");}
void  S20562C8 ::v38(){vfunc_called(this, "_ZN8S20562C83v38Ev");}
S20562C8 ::S20562C8(){ note_ctor("S20562C8", this);} // tgen

static void Test_S20562C8()
{
  extern Class_Descriptor cd_S20562C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[9];
    init_test(&cd_S20562C8, buf);
    S20562C8 *dp, &lv = *(dp=new (buf) S20562C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S20562C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20562C8)");
    check_base_class_offset(lv, (S20562C4*)(S20562C3*), ABISELECT(8,4), "S20562C8");
    check_base_class_offset(lv, (S20562C5*)(S20562C3*), ABISELECT(32,16), "S20562C8");
    check_base_class_offset(lv, (S20562C3*)(S20562C9*), ABISELECT(8,4), "S20562C8");
    check_base_class_offset(lv, (S20562C6*)(S20562C9*), ABISELECT(40,20), "S20562C8");
    check_base_class_offset(lv, (S20562C9*), 0, "S20562C8");
    test_class_info(&lv, &cd_S20562C8);
    dp->~S20562C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20562C8(Test_S20562C8, "S20562C8", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN8S20562C8C1Ev();
extern void _ZN8S20562C8D2Ev();
Name_Map name_map_S20562C8[] = {
  NSPAIR(_ZN8S20562C8C1Ev),
  NSPAIR(_ZN8S20562C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20562C4;
extern VTBL_ENTRY _ZTI8S20562C4[];
extern  VTBL_ENTRY _ZTV8S20562C4[];
extern Class_Descriptor cd_S20562C5;
extern VTBL_ENTRY _ZTI8S20562C5[];
extern  VTBL_ENTRY _ZTV8S20562C5[];
extern Class_Descriptor cd_S20562C3;
extern VTBL_ENTRY _ZTI8S20562C3[];
extern  VTBL_ENTRY _ZTV8S20562C3[];
extern Class_Descriptor cd_S20562C6;
extern VTBL_ENTRY _ZTI8S20562C6[];
extern  VTBL_ENTRY _ZTV8S20562C6[];
extern Class_Descriptor cd_S20562C9;
extern VTBL_ENTRY _ZTI8S20562C9[];
extern  VTBL_ENTRY _ZTV8S20562C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20562C9[];
static Base_Class bases_S20562C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20562C4,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20562C5,    ABISELECT(32,16), //bcp->offset
    55, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20562C3,    ABISELECT(8,4), //bcp->offset
    22, //bcp->virtual_function_table_offset
    20, //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
    4, //immediately_derived
  0, 1},
  {&cd_S20562C6,    ABISELECT(40,20), //bcp->offset
    65, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20562C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20562C8[];
extern void _ZN8S20562C8D1Ev();
extern void _ZN8S20562C8D0Ev();
extern void _ZN8S20562C93v31Ev();
extern void _ZN8S20562C93v32Ev();
extern void _ZN8S20562C93v33Ev();
extern void _ZN8S20562C93v34Ev();
extern void _ZN8S20562C93v35Ev();
extern void _ZN8S20562C93v36Ev();
extern void _ZN8S20562C83v37Ev();
extern void _ZN8S20562C83v38Ev();
extern void _ZN8S20562C42v7Ev();
extern void _ZN8S20562C42v8Ev();
extern void _ZN8S20562C42v9Ev();
extern void _ZN8S20562C43v10Ev();
extern void _ZN8S20562C43v11Ev();
extern void _ZN8S20562C43v12Ev();
extern void ABISELECT(_ZTv0_n72_N8S20562C8D1Ev,_ZTv0_n36_N8S20562C8D1Ev)();
extern void ABISELECT(_ZThn8_N8S20562C8D1Ev,_ZThn4_N8S20562C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S20562C8D0Ev,_ZTv0_n36_N8S20562C8D0Ev)();
extern void ABISELECT(_ZThn8_N8S20562C8D0Ev,_ZThn4_N8S20562C8D0Ev)() __attribute__((weak));
extern void _ZN8S20562C33v19Ev();
extern void _ZN8S20562C33v20Ev();
extern void _ZN8S20562C33v21Ev();
extern void _ZN8S20562C33v22Ev();
extern void _ZN8S20562C33v23Ev();
extern void ABISELECT(_ZTvn24_n72_N8S20562C8D1Ev,_ZTvn12_n36_N8S20562C8D1Ev)();
extern void ABISELECT(_ZTvn24_n72_N8S20562C8D0Ev,_ZTvn12_n36_N8S20562C8D0Ev)();
extern void _ZN8S20562C53v13Ev();
extern void _ZN8S20562C53v14Ev();
extern void _ZN8S20562C53v15Ev();
extern void _ZN8S20562C53v16Ev();
extern void _ZN8S20562C53v17Ev();
extern void _ZN8S20562C53v18Ev();
extern void _ZN8S20562C63v24Ev();
extern void _ZN8S20562C63v25Ev();
extern void _ZN8S20562C63v26Ev();
extern void _ZN8S20562C63v27Ev();
extern void _ZN8S20562C63v28Ev();
static  VTBL_ENTRY vtc_S20562C8[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,20),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20562C8[0]),
  (VTBL_ENTRY)&_ZN8S20562C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20562C8D0Ev,
  (VTBL_ENTRY)&_ZN8S20562C93v31Ev,
  (VTBL_ENTRY)&_ZN8S20562C93v32Ev,
  (VTBL_ENTRY)&_ZN8S20562C93v33Ev,
  (VTBL_ENTRY)&_ZN8S20562C93v34Ev,
  (VTBL_ENTRY)&_ZN8S20562C93v35Ev,
  (VTBL_ENTRY)&_ZN8S20562C93v36Ev,
  (VTBL_ENTRY)&_ZN8S20562C83v37Ev,
  (VTBL_ENTRY)&_ZN8S20562C83v38Ev,
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20562C8[0]),
  (VTBL_ENTRY)&_ZN8S20562C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20562C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20562C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20562C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20562C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20562C43v12Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20562C8D1Ev,_ZTv0_n36_N8S20562C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20562C8D0Ev,_ZTv0_n36_N8S20562C8D0Ev),
  (VTBL_ENTRY)&_ZN8S20562C33v19Ev,
  (VTBL_ENTRY)&_ZN8S20562C33v20Ev,
  (VTBL_ENTRY)&_ZN8S20562C33v21Ev,
  (VTBL_ENTRY)&_ZN8S20562C33v22Ev,
  (VTBL_ENTRY)&_ZN8S20562C33v23Ev,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S20562C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N8S20562C8D1Ev,_ZTvn12_n36_N8S20562C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N8S20562C8D0Ev,_ZTvn12_n36_N8S20562C8D0Ev),
  (VTBL_ENTRY)&_ZN8S20562C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20562C53v14Ev,
  (VTBL_ENTRY)&_ZN8S20562C53v15Ev,
  (VTBL_ENTRY)&_ZN8S20562C53v16Ev,
  (VTBL_ENTRY)&_ZN8S20562C53v17Ev,
  (VTBL_ENTRY)&_ZN8S20562C53v18Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S20562C8[0]),
  (VTBL_ENTRY)&_ZN8S20562C63v24Ev,
  (VTBL_ENTRY)&_ZN8S20562C63v25Ev,
  (VTBL_ENTRY)&_ZN8S20562C63v26Ev,
  (VTBL_ENTRY)&_ZN8S20562C63v27Ev,
  (VTBL_ENTRY)&_ZN8S20562C63v28Ev,
};
extern VTBL_ENTRY _ZTV8S20562C8[];
extern void _ZN8S20562C9D1Ev();
extern void _ZN8S20562C9D0Ev();
extern void _ZN8S20562C93v31Ev();
extern void _ZN8S20562C93v32Ev();
extern void _ZN8S20562C93v33Ev();
extern void _ZN8S20562C93v34Ev();
extern void _ZN8S20562C93v35Ev();
extern void _ZN8S20562C93v36Ev();
static  VTBL_ENTRY _tg__ZTV8S20562C9__8S20562C8[] = {
  ABISELECT(40,20),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20562C9[0]),
  (VTBL_ENTRY)&_ZN8S20562C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20562C9D0Ev,
  (VTBL_ENTRY)&_ZN8S20562C93v31Ev,
  (VTBL_ENTRY)&_ZN8S20562C93v32Ev,
  (VTBL_ENTRY)&_ZN8S20562C93v33Ev,
  (VTBL_ENTRY)&_ZN8S20562C93v34Ev,
  (VTBL_ENTRY)&_ZN8S20562C93v35Ev,
  (VTBL_ENTRY)&_ZN8S20562C93v36Ev,
};
extern void _ZN8S20562C42v7Ev();
extern void _ZN8S20562C42v8Ev();
extern void _ZN8S20562C42v9Ev();
extern void _ZN8S20562C43v10Ev();
extern void _ZN8S20562C43v11Ev();
extern void _ZN8S20562C43v12Ev();
extern void ABISELECT(_ZTv0_n72_N8S20562C9D1Ev,_ZTv0_n36_N8S20562C9D1Ev)();
extern void ABISELECT(_ZThn8_N8S20562C9D1Ev,_ZThn4_N8S20562C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S20562C9D0Ev,_ZTv0_n36_N8S20562C9D0Ev)();
extern void ABISELECT(_ZThn8_N8S20562C9D0Ev,_ZThn4_N8S20562C9D0Ev)() __attribute__((weak));
extern void _ZN8S20562C33v19Ev();
extern void _ZN8S20562C33v20Ev();
extern void _ZN8S20562C33v21Ev();
extern void _ZN8S20562C33v22Ev();
extern void _ZN8S20562C33v23Ev();
static  VTBL_ENTRY _tg__ZTV8S20562C3__8S20562C9__8S20562C8[] = {
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20562C9[0]),
  (VTBL_ENTRY)&_ZN8S20562C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20562C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20562C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20562C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20562C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20562C43v12Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20562C9D1Ev,_ZTv0_n36_N8S20562C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20562C9D0Ev,_ZTv0_n36_N8S20562C9D0Ev),
  (VTBL_ENTRY)&_ZN8S20562C33v19Ev,
  (VTBL_ENTRY)&_ZN8S20562C33v20Ev,
  (VTBL_ENTRY)&_ZN8S20562C33v21Ev,
  (VTBL_ENTRY)&_ZN8S20562C33v22Ev,
  (VTBL_ENTRY)&_ZN8S20562C33v23Ev,
};
extern void ABISELECT(_ZTvn24_n72_N8S20562C9D1Ev,_ZTvn12_n36_N8S20562C9D1Ev)();
extern void ABISELECT(_ZTvn24_n72_N8S20562C9D0Ev,_ZTvn12_n36_N8S20562C9D0Ev)();
extern void _ZN8S20562C53v13Ev();
extern void _ZN8S20562C53v14Ev();
extern void _ZN8S20562C53v15Ev();
extern void _ZN8S20562C53v16Ev();
extern void _ZN8S20562C53v17Ev();
extern void _ZN8S20562C53v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20562C58S20562C3__8S20562C9__8S20562C8[] = {
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S20562C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N8S20562C9D1Ev,_ZTvn12_n36_N8S20562C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N8S20562C9D0Ev,_ZTvn12_n36_N8S20562C9D0Ev),
  (VTBL_ENTRY)&_ZN8S20562C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20562C53v14Ev,
  (VTBL_ENTRY)&_ZN8S20562C53v15Ev,
  (VTBL_ENTRY)&_ZN8S20562C53v16Ev,
  (VTBL_ENTRY)&_ZN8S20562C53v17Ev,
  (VTBL_ENTRY)&_ZN8S20562C53v18Ev,
};
extern void _ZN8S20562C63v24Ev();
extern void _ZN8S20562C63v25Ev();
extern void _ZN8S20562C63v26Ev();
extern void _ZN8S20562C63v27Ev();
extern void _ZN8S20562C63v28Ev();
static  VTBL_ENTRY _tg__ZTV8S20562C6__8S20562C9__8S20562C8[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S20562C9[0]),
  (VTBL_ENTRY)&_ZN8S20562C63v24Ev,
  (VTBL_ENTRY)&_ZN8S20562C63v25Ev,
  (VTBL_ENTRY)&_ZN8S20562C63v26Ev,
  (VTBL_ENTRY)&_ZN8S20562C63v27Ev,
  (VTBL_ENTRY)&_ZN8S20562C63v28Ev,
};
static  VTT_ENTRY vtt_S20562C8[] = {
  {&(_ZTV8S20562C8[12]),  12,77},
  {&(_ZTV8S20562C8[12]),  12,77},
  {&(_ZTV8S20562C8[42]),  42,77},
  {&(_ZTV8S20562C8[57]),  57,77},
  {&(_ZTV8S20562C8[72]),  72,77},
  {&(_tg__ZTV8S20562C9__8S20562C8[4]),  4,12},
  {&(_tg__ZTV8S20562C3__8S20562C9__8S20562C8[20]),  20,33},
  {&(_tg__ZTV8S20562C58S20562C3__8S20562C9__8S20562C8[2]),  2,10},
  {&(_tg__ZTV8S20562C6__8S20562C9__8S20562C8[7]),  7,12},
};
extern VTBL_ENTRY _ZTI8S20562C8[];
extern  VTBL_ENTRY _ZTV8S20562C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20562C8[];
static VTBL_ENTRY alt_thunk_names29[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20562C9D0Ev,_ZTv0_n36_N8S20562C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20562C9D0Ev,_ZThn4_N8S20562C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20562C9D1Ev,_ZTv0_n36_N8S20562C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20562C9D1Ev,_ZThn4_N8S20562C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20562C8D0Ev,_ZTv0_n36_N8S20562C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20562C8D0Ev,_ZThn4_N8S20562C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20562C8D1Ev,_ZTv0_n36_N8S20562C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20562C8D1Ev,_ZThn4_N8S20562C8D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20562C8 = {  "S20562C8", // class name
  bases_S20562C8, 5,
  &(vtc_S20562C8[0]), // expected_vtbl_contents
  &(vtt_S20562C8[0]), // expected_vtt_contents
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI8S20562C8),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20562C8),77, //virtual function table var
  12, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20562C8),9, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names29,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20562C1  : virtual S20562C2 , S20562C8 {
  virtual void  v1(); // _ZN8S20562C12v1Ev
  virtual void  v2(); // _ZN8S20562C12v2Ev
  virtual void  v3(); // _ZN8S20562C12v3Ev
  virtual void  v4(); // _ZN8S20562C12v4Ev
  virtual void  v5(); // _ZN8S20562C12v5Ev
  virtual void  v6(); // _ZN8S20562C12v6Ev
  ~S20562C1(); // tgen
  S20562C1(); // tgen
};
//SIG(1 S20562C1) C1{ VBC2{ VBC3{ BC4{ v7 v8 v9 v10 v11 v12 FC5{ vd v13 v14 v15 v16 v17 v18} Fi} BC5 vd v19 v20 v21 v22 v23} VBC6{ v24 v25 v26 v27 v28 FC7{} Fp} vd v29 v30} BC8{ VBC9{ VBC3 VBC6 vd v31 v32 v33 v34 v35 v36} vd v37 v38} v1 v2 v3 v4 v5 v6}


void  S20562C1 ::v1(){vfunc_called(this, "_ZN8S20562C12v1Ev");}
void  S20562C1 ::v2(){vfunc_called(this, "_ZN8S20562C12v2Ev");}
void  S20562C1 ::v3(){vfunc_called(this, "_ZN8S20562C12v3Ev");}
void  S20562C1 ::v4(){vfunc_called(this, "_ZN8S20562C12v4Ev");}
void  S20562C1 ::v5(){vfunc_called(this, "_ZN8S20562C12v5Ev");}
void  S20562C1 ::v6(){vfunc_called(this, "_ZN8S20562C12v6Ev");}
S20562C1 ::~S20562C1(){ note_dtor("S20562C1", this);} // tgen
S20562C1 ::S20562C1(){ note_ctor("S20562C1", this);} // tgen

static void Test_S20562C1()
{
  extern Class_Descriptor cd_S20562C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[10];
    init_test(&cd_S20562C1, buf);
    S20562C1 *dp, &lv = *(dp=new (buf) S20562C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,36), "sizeof(S20562C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20562C1)");
    check_base_class_offset(lv, (S20562C4*)(S20562C3*), ABISELECT(16,8), "S20562C1");
    check_base_class_offset(lv, (S20562C5*)(S20562C3*), ABISELECT(40,20), "S20562C1");
    check_base_class_offset(lv, (S20562C3*)(S20562C2*), ABISELECT(16,8), "S20562C1");
    check_base_class_offset(lv, (S20562C3*)(S20562C9*), ABISELECT(16,8), "S20562C1");
    check_base_class_offset(lv, (S20562C6*)(S20562C2*), ABISELECT(48,24), "S20562C1");
    check_base_class_offset(lv, (S20562C6*)(S20562C9*), ABISELECT(48,24), "S20562C1");
    check_base_class_offset(lv, (S20562C2*), ABISELECT(8,4), "S20562C1");
    check_base_class_offset(lv, (S20562C9*)(S20562C8*), 0, "S20562C1");
    check_base_class_offset(lv, (S20562C8*), 0, "S20562C1");
    test_class_info(&lv, &cd_S20562C1);
    dp->~S20562C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20562C1(Test_S20562C1, "S20562C1", ABISELECT(72,36));

#else // __cplusplus

extern void _ZN8S20562C1C1Ev();
extern void _ZN8S20562C1D1Ev();
Name_Map name_map_S20562C1[] = {
  NSPAIR(_ZN8S20562C1C1Ev),
  NSPAIR(_ZN8S20562C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20562C4;
extern VTBL_ENTRY _ZTI8S20562C4[];
extern  VTBL_ENTRY _ZTV8S20562C4[];
extern Class_Descriptor cd_S20562C5;
extern VTBL_ENTRY _ZTI8S20562C5[];
extern  VTBL_ENTRY _ZTV8S20562C5[];
extern Class_Descriptor cd_S20562C3;
extern VTBL_ENTRY _ZTI8S20562C3[];
extern  VTBL_ENTRY _ZTV8S20562C3[];
extern Class_Descriptor cd_S20562C6;
extern VTBL_ENTRY _ZTI8S20562C6[];
extern  VTBL_ENTRY _ZTV8S20562C6[];
extern Class_Descriptor cd_S20562C2;
extern VTBL_ENTRY _ZTI8S20562C2[];
extern  VTBL_ENTRY _ZTV8S20562C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20562C2[];
extern Class_Descriptor cd_S20562C9;
extern VTBL_ENTRY _ZTI8S20562C9[];
extern  VTBL_ENTRY _ZTV8S20562C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20562C9[];
extern Class_Descriptor cd_S20562C8;
extern VTBL_ENTRY _ZTI8S20562C8[];
extern  VTBL_ENTRY _ZTV8S20562C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20562C8[];
static Base_Class bases_S20562C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20562C4,    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, 0},
  {&cd_S20562C5,    ABISELECT(40,20), //bcp->offset
    73, //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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20562C3,    ABISELECT(16,8), //bcp->offset
    40, //bcp->virtual_function_table_offset
    20, //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_S20562C6,    ABISELECT(48,24), //bcp->offset
    83, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20562C2,    ABISELECT(8,4), //bcp->offset
    29, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20562C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S20562C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20562C1[];
extern void _ZN8S20562C1D1Ev();
extern void _ZN8S20562C1D0Ev();
extern void _ZN8S20562C93v31Ev();
extern void _ZN8S20562C93v32Ev();
extern void _ZN8S20562C93v33Ev();
extern void _ZN8S20562C93v34Ev();
extern void _ZN8S20562C93v35Ev();
extern void _ZN8S20562C93v36Ev();
extern void _ZN8S20562C83v37Ev();
extern void _ZN8S20562C83v38Ev();
extern void _ZN8S20562C12v1Ev();
extern void _ZN8S20562C12v2Ev();
extern void _ZN8S20562C12v3Ev();
extern void _ZN8S20562C12v4Ev();
extern void _ZN8S20562C12v5Ev();
extern void _ZN8S20562C12v6Ev();
extern void ABISELECT(_ZTv0_n40_N8S20562C1D1Ev,_ZTv0_n20_N8S20562C1D1Ev)();
extern void ABISELECT(_ZThn8_N8S20562C1D1Ev,_ZThn4_N8S20562C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20562C1D0Ev,_ZTv0_n20_N8S20562C1D0Ev)();
extern void ABISELECT(_ZThn8_N8S20562C1D0Ev,_ZThn4_N8S20562C1D0Ev)() __attribute__((weak));
extern void _ZN8S20562C23v29Ev();
extern void _ZN8S20562C23v30Ev();
extern void _ZN8S20562C42v7Ev();
extern void _ZN8S20562C42v8Ev();
extern void _ZN8S20562C42v9Ev();
extern void _ZN8S20562C43v10Ev();
extern void _ZN8S20562C43v11Ev();
extern void _ZN8S20562C43v12Ev();
extern void ABISELECT(_ZTv0_n72_N8S20562C1D1Ev,_ZTv0_n36_N8S20562C1D1Ev)();
extern void ABISELECT(_ZThn16_N8S20562C1D1Ev,_ZThn8_N8S20562C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S20562C1D0Ev,_ZTv0_n36_N8S20562C1D0Ev)();
extern void ABISELECT(_ZThn16_N8S20562C1D0Ev,_ZThn8_N8S20562C1D0Ev)() __attribute__((weak));
extern void _ZN8S20562C33v19Ev();
extern void _ZN8S20562C33v20Ev();
extern void _ZN8S20562C33v21Ev();
extern void _ZN8S20562C33v22Ev();
extern void _ZN8S20562C33v23Ev();
extern void ABISELECT(_ZTvn24_n72_N8S20562C1D1Ev,_ZTvn12_n36_N8S20562C1D1Ev)();
extern void ABISELECT(_ZTvn24_n72_N8S20562C1D0Ev,_ZTvn12_n36_N8S20562C1D0Ev)();
extern void _ZN8S20562C53v13Ev();
extern void _ZN8S20562C53v14Ev();
extern void _ZN8S20562C53v15Ev();
extern void _ZN8S20562C53v16Ev();
extern void _ZN8S20562C53v17Ev();
extern void _ZN8S20562C53v18Ev();
extern void _ZN8S20562C63v24Ev();
extern void _ZN8S20562C63v25Ev();
extern void _ZN8S20562C63v26Ev();
extern void _ZN8S20562C63v27Ev();
extern void _ZN8S20562C63v28Ev();
static  VTBL_ENTRY vtc_S20562C1[] = {
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(48,24),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20562C1[0]),
  (VTBL_ENTRY)&_ZN8S20562C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20562C1D0Ev,
  (VTBL_ENTRY)&_ZN8S20562C93v31Ev,
  (VTBL_ENTRY)&_ZN8S20562C93v32Ev,
  (VTBL_ENTRY)&_ZN8S20562C93v33Ev,
  (VTBL_ENTRY)&_ZN8S20562C93v34Ev,
  (VTBL_ENTRY)&_ZN8S20562C93v35Ev,
  (VTBL_ENTRY)&_ZN8S20562C93v36Ev,
  (VTBL_ENTRY)&_ZN8S20562C83v37Ev,
  (VTBL_ENTRY)&_ZN8S20562C83v38Ev,
  (VTBL_ENTRY)&_ZN8S20562C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20562C12v2Ev,
  (VTBL_ENTRY)&_ZN8S20562C12v3Ev,
  (VTBL_ENTRY)&_ZN8S20562C12v4Ev,
  (VTBL_ENTRY)&_ZN8S20562C12v5Ev,
  (VTBL_ENTRY)&_ZN8S20562C12v6Ev,
  0,
  0,
  ABISELECT(-8,-4),
  ABISELECT(40,20),
  ABISELECT(8,4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20562C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20562C1D1Ev,_ZTv0_n20_N8S20562C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20562C1D0Ev,_ZTv0_n20_N8S20562C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20562C23v29Ev,
  (VTBL_ENTRY)&_ZN8S20562C23v30Ev,
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20562C1[0]),
  (VTBL_ENTRY)&_ZN8S20562C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20562C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20562C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20562C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20562C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20562C43v12Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20562C1D1Ev,_ZTv0_n36_N8S20562C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20562C1D0Ev,_ZTv0_n36_N8S20562C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20562C33v19Ev,
  (VTBL_ENTRY)&_ZN8S20562C33v20Ev,
  (VTBL_ENTRY)&_ZN8S20562C33v21Ev,
  (VTBL_ENTRY)&_ZN8S20562C33v22Ev,
  (VTBL_ENTRY)&_ZN8S20562C33v23Ev,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S20562C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N8S20562C1D1Ev,_ZTvn12_n36_N8S20562C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N8S20562C1D0Ev,_ZTvn12_n36_N8S20562C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20562C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20562C53v14Ev,
  (VTBL_ENTRY)&_ZN8S20562C53v15Ev,
  (VTBL_ENTRY)&_ZN8S20562C53v16Ev,
  (VTBL_ENTRY)&_ZN8S20562C53v17Ev,
  (VTBL_ENTRY)&_ZN8S20562C53v18Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S20562C1[0]),
  (VTBL_ENTRY)&_ZN8S20562C63v24Ev,
  (VTBL_ENTRY)&_ZN8S20562C63v25Ev,
  (VTBL_ENTRY)&_ZN8S20562C63v26Ev,
  (VTBL_ENTRY)&_ZN8S20562C63v27Ev,
  (VTBL_ENTRY)&_ZN8S20562C63v28Ev,
};
extern VTBL_ENTRY _ZTV8S20562C1[];
extern void _ZN8S20562C8D1Ev();
extern void _ZN8S20562C8D0Ev();
extern void _ZN8S20562C93v31Ev();
extern void _ZN8S20562C93v32Ev();
extern void _ZN8S20562C93v33Ev();
extern void _ZN8S20562C93v34Ev();
extern void _ZN8S20562C93v35Ev();
extern void _ZN8S20562C93v36Ev();
extern void _ZN8S20562C83v37Ev();
extern void _ZN8S20562C83v38Ev();
static  VTBL_ENTRY _tg__ZTV8S20562C8__8S20562C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(48,24),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20562C8[0]),
  (VTBL_ENTRY)&_ZN8S20562C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20562C8D0Ev,
  (VTBL_ENTRY)&_ZN8S20562C93v31Ev,
  (VTBL_ENTRY)&_ZN8S20562C93v32Ev,
  (VTBL_ENTRY)&_ZN8S20562C93v33Ev,
  (VTBL_ENTRY)&_ZN8S20562C93v34Ev,
  (VTBL_ENTRY)&_ZN8S20562C93v35Ev,
  (VTBL_ENTRY)&_ZN8S20562C93v36Ev,
  (VTBL_ENTRY)&_ZN8S20562C83v37Ev,
  (VTBL_ENTRY)&_ZN8S20562C83v38Ev,
};
extern void _ZN8S20562C42v7Ev();
extern void _ZN8S20562C42v8Ev();
extern void _ZN8S20562C42v9Ev();
extern void _ZN8S20562C43v10Ev();
extern void _ZN8S20562C43v11Ev();
extern void _ZN8S20562C43v12Ev();
extern void ABISELECT(_ZTv0_n72_N8S20562C8D1Ev,_ZTv0_n36_N8S20562C8D1Ev)();
extern void ABISELECT(_ZThn16_N8S20562C8D1Ev,_ZThn8_N8S20562C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S20562C8D0Ev,_ZTv0_n36_N8S20562C8D0Ev)();
extern void ABISELECT(_ZThn16_N8S20562C8D0Ev,_ZThn8_N8S20562C8D0Ev)() __attribute__((weak));
extern void _ZN8S20562C33v19Ev();
extern void _ZN8S20562C33v20Ev();
extern void _ZN8S20562C33v21Ev();
extern void _ZN8S20562C33v22Ev();
extern void _ZN8S20562C33v23Ev();
static  VTBL_ENTRY _tg__ZTV8S20562C3__8S20562C8__8S20562C1[] = {
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20562C8[0]),
  (VTBL_ENTRY)&_ZN8S20562C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20562C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20562C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20562C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20562C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20562C43v12Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20562C8D1Ev,_ZTv0_n36_N8S20562C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20562C8D0Ev,_ZTv0_n36_N8S20562C8D0Ev),
  (VTBL_ENTRY)&_ZN8S20562C33v19Ev,
  (VTBL_ENTRY)&_ZN8S20562C33v20Ev,
  (VTBL_ENTRY)&_ZN8S20562C33v21Ev,
  (VTBL_ENTRY)&_ZN8S20562C33v22Ev,
  (VTBL_ENTRY)&_ZN8S20562C33v23Ev,
};
extern void ABISELECT(_ZTvn24_n72_N8S20562C8D1Ev,_ZTvn12_n36_N8S20562C8D1Ev)();
extern void ABISELECT(_ZTvn24_n72_N8S20562C8D0Ev,_ZTvn12_n36_N8S20562C8D0Ev)();
extern void _ZN8S20562C53v13Ev();
extern void _ZN8S20562C53v14Ev();
extern void _ZN8S20562C53v15Ev();
extern void _ZN8S20562C53v16Ev();
extern void _ZN8S20562C53v17Ev();
extern void _ZN8S20562C53v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20562C58S20562C3__8S20562C8__8S20562C1[] = {
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S20562C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N8S20562C8D1Ev,_ZTvn12_n36_N8S20562C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N8S20562C8D0Ev,_ZTvn12_n36_N8S20562C8D0Ev),
  (VTBL_ENTRY)&_ZN8S20562C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20562C53v14Ev,
  (VTBL_ENTRY)&_ZN8S20562C53v15Ev,
  (VTBL_ENTRY)&_ZN8S20562C53v16Ev,
  (VTBL_ENTRY)&_ZN8S20562C53v17Ev,
  (VTBL_ENTRY)&_ZN8S20562C53v18Ev,
};
extern void _ZN8S20562C63v24Ev();
extern void _ZN8S20562C63v25Ev();
extern void _ZN8S20562C63v26Ev();
extern void _ZN8S20562C63v27Ev();
extern void _ZN8S20562C63v28Ev();
static  VTBL_ENTRY _tg__ZTV8S20562C6__8S20562C8__8S20562C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S20562C8[0]),
  (VTBL_ENTRY)&_ZN8S20562C63v24Ev,
  (VTBL_ENTRY)&_ZN8S20562C63v25Ev,
  (VTBL_ENTRY)&_ZN8S20562C63v26Ev,
  (VTBL_ENTRY)&_ZN8S20562C63v27Ev,
  (VTBL_ENTRY)&_ZN8S20562C63v28Ev,
};
extern void _ZN8S20562C2D1Ev();
extern void _ZN8S20562C2D0Ev();
extern void _ZN8S20562C23v29Ev();
extern void _ZN8S20562C23v30Ev();
static  VTBL_ENTRY _tg__ZTV8S20562C2__8S20562C1[] = {
  ABISELECT(40,20),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20562C2[0]),
  (VTBL_ENTRY)&_ZN8S20562C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20562C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20562C23v29Ev,
  (VTBL_ENTRY)&_ZN8S20562C23v30Ev,
};
extern void _ZN8S20562C42v7Ev();
extern void _ZN8S20562C42v8Ev();
extern void _ZN8S20562C42v9Ev();
extern void _ZN8S20562C43v10Ev();
extern void _ZN8S20562C43v11Ev();
extern void _ZN8S20562C43v12Ev();
extern void ABISELECT(_ZTv0_n72_N8S20562C2D1Ev,_ZTv0_n36_N8S20562C2D1Ev)();
extern void ABISELECT(_ZThn8_N8S20562C2D1Ev,_ZThn4_N8S20562C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S20562C2D0Ev,_ZTv0_n36_N8S20562C2D0Ev)();
extern void ABISELECT(_ZThn8_N8S20562C2D0Ev,_ZThn4_N8S20562C2D0Ev)() __attribute__((weak));
extern void _ZN8S20562C33v19Ev();
extern void _ZN8S20562C33v20Ev();
extern void _ZN8S20562C33v21Ev();
extern void _ZN8S20562C33v22Ev();
extern void _ZN8S20562C33v23Ev();
static  VTBL_ENTRY _tg__ZTV8S20562C3__8S20562C2__8S20562C1[] = {
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20562C2[0]),
  (VTBL_ENTRY)&_ZN8S20562C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20562C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20562C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20562C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20562C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20562C43v12Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20562C2D1Ev,_ZTv0_n36_N8S20562C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20562C2D0Ev,_ZTv0_n36_N8S20562C2D0Ev),
  (VTBL_ENTRY)&_ZN8S20562C33v19Ev,
  (VTBL_ENTRY)&_ZN8S20562C33v20Ev,
  (VTBL_ENTRY)&_ZN8S20562C33v21Ev,
  (VTBL_ENTRY)&_ZN8S20562C33v22Ev,
  (VTBL_ENTRY)&_ZN8S20562C33v23Ev,
};
extern void ABISELECT(_ZTvn24_n72_N8S20562C2D1Ev,_ZTvn12_n36_N8S20562C2D1Ev)();
extern void ABISELECT(_ZTvn24_n72_N8S20562C2D0Ev,_ZTvn12_n36_N8S20562C2D0Ev)();
extern void _ZN8S20562C53v13Ev();
extern void _ZN8S20562C53v14Ev();
extern void _ZN8S20562C53v15Ev();
extern void _ZN8S20562C53v16Ev();
extern void _ZN8S20562C53v17Ev();
extern void _ZN8S20562C53v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20562C58S20562C3__8S20562C2__8S20562C1[] = {
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S20562C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N8S20562C2D1Ev,_ZTvn12_n36_N8S20562C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N8S20562C2D0Ev,_ZTvn12_n36_N8S20562C2D0Ev),
  (VTBL_ENTRY)&_ZN8S20562C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20562C53v14Ev,
  (VTBL_ENTRY)&_ZN8S20562C53v15Ev,
  (VTBL_ENTRY)&_ZN8S20562C53v16Ev,
  (VTBL_ENTRY)&_ZN8S20562C53v17Ev,
  (VTBL_ENTRY)&_ZN8S20562C53v18Ev,
};
extern void _ZN8S20562C63v24Ev();
extern void _ZN8S20562C63v25Ev();
extern void _ZN8S20562C63v26Ev();
extern void _ZN8S20562C63v27Ev();
extern void _ZN8S20562C63v28Ev();
static  VTBL_ENTRY _tg__ZTV8S20562C6__8S20562C2__8S20562C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S20562C2[0]),
  (VTBL_ENTRY)&_ZN8S20562C63v24Ev,
  (VTBL_ENTRY)&_ZN8S20562C63v25Ev,
  (VTBL_ENTRY)&_ZN8S20562C63v26Ev,
  (VTBL_ENTRY)&_ZN8S20562C63v27Ev,
  (VTBL_ENTRY)&_ZN8S20562C63v28Ev,
};
extern void _ZN8S20562C9D1Ev();
extern void _ZN8S20562C9D0Ev();
extern void _ZN8S20562C93v31Ev();
extern void _ZN8S20562C93v32Ev();
extern void _ZN8S20562C93v33Ev();
extern void _ZN8S20562C93v34Ev();
extern void _ZN8S20562C93v35Ev();
extern void _ZN8S20562C93v36Ev();
static  VTBL_ENTRY _tg__ZTV8S20562C9__8S20562C1[] = {
  ABISELECT(48,24),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20562C9[0]),
  (VTBL_ENTRY)&_ZN8S20562C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20562C9D0Ev,
  (VTBL_ENTRY)&_ZN8S20562C93v31Ev,
  (VTBL_ENTRY)&_ZN8S20562C93v32Ev,
  (VTBL_ENTRY)&_ZN8S20562C93v33Ev,
  (VTBL_ENTRY)&_ZN8S20562C93v34Ev,
  (VTBL_ENTRY)&_ZN8S20562C93v35Ev,
  (VTBL_ENTRY)&_ZN8S20562C93v36Ev,
};
extern void _ZN8S20562C42v7Ev();
extern void _ZN8S20562C42v8Ev();
extern void _ZN8S20562C42v9Ev();
extern void _ZN8S20562C43v10Ev();
extern void _ZN8S20562C43v11Ev();
extern void _ZN8S20562C43v12Ev();
extern void ABISELECT(_ZTv0_n72_N8S20562C9D1Ev,_ZTv0_n36_N8S20562C9D1Ev)();
extern void ABISELECT(_ZThn16_N8S20562C9D1Ev,_ZThn8_N8S20562C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S20562C9D0Ev,_ZTv0_n36_N8S20562C9D0Ev)();
extern void ABISELECT(_ZThn16_N8S20562C9D0Ev,_ZThn8_N8S20562C9D0Ev)() __attribute__((weak));
extern void _ZN8S20562C33v19Ev();
extern void _ZN8S20562C33v20Ev();
extern void _ZN8S20562C33v21Ev();
extern void _ZN8S20562C33v22Ev();
extern void _ZN8S20562C33v23Ev();
static  VTBL_ENTRY _tg__ZTV8S20562C3__8S20562C9__8S20562C1[] = {
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20562C9[0]),
  (VTBL_ENTRY)&_ZN8S20562C42v7Ev,
  (VTBL_ENTRY)&_ZN8S20562C42v8Ev,
  (VTBL_ENTRY)&_ZN8S20562C42v9Ev,
  (VTBL_ENTRY)&_ZN8S20562C43v10Ev,
  (VTBL_ENTRY)&_ZN8S20562C43v11Ev,
  (VTBL_ENTRY)&_ZN8S20562C43v12Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20562C9D1Ev,_ZTv0_n36_N8S20562C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20562C9D0Ev,_ZTv0_n36_N8S20562C9D0Ev),
  (VTBL_ENTRY)&_ZN8S20562C33v19Ev,
  (VTBL_ENTRY)&_ZN8S20562C33v20Ev,
  (VTBL_ENTRY)&_ZN8S20562C33v21Ev,
  (VTBL_ENTRY)&_ZN8S20562C33v22Ev,
  (VTBL_ENTRY)&_ZN8S20562C33v23Ev,
};
extern void ABISELECT(_ZTvn24_n72_N8S20562C9D1Ev,_ZTvn12_n36_N8S20562C9D1Ev)();
extern void ABISELECT(_ZTvn24_n72_N8S20562C9D0Ev,_ZTvn12_n36_N8S20562C9D0Ev)();
extern void _ZN8S20562C53v13Ev();
extern void _ZN8S20562C53v14Ev();
extern void _ZN8S20562C53v15Ev();
extern void _ZN8S20562C53v16Ev();
extern void _ZN8S20562C53v17Ev();
extern void _ZN8S20562C53v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20562C58S20562C3__8S20562C9__8S20562C1[] = {
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S20562C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N8S20562C9D1Ev,_ZTvn12_n36_N8S20562C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N8S20562C9D0Ev,_ZTvn12_n36_N8S20562C9D0Ev),
  (VTBL_ENTRY)&_ZN8S20562C53v13Ev,
  (VTBL_ENTRY)&_ZN8S20562C53v14Ev,
  (VTBL_ENTRY)&_ZN8S20562C53v15Ev,
  (VTBL_ENTRY)&_ZN8S20562C53v16Ev,
  (VTBL_ENTRY)&_ZN8S20562C53v17Ev,
  (VTBL_ENTRY)&_ZN8S20562C53v18Ev,
};
extern void _ZN8S20562C63v24Ev();
extern void _ZN8S20562C63v25Ev();
extern void _ZN8S20562C63v26Ev();
extern void _ZN8S20562C63v27Ev();
extern void _ZN8S20562C63v28Ev();
static  VTBL_ENTRY _tg__ZTV8S20562C6__8S20562C9__8S20562C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S20562C9[0]),
  (VTBL_ENTRY)&_ZN8S20562C63v24Ev,
  (VTBL_ENTRY)&_ZN8S20562C63v25Ev,
  (VTBL_ENTRY)&_ZN8S20562C63v26Ev,
  (VTBL_ENTRY)&_ZN8S20562C63v27Ev,
  (VTBL_ENTRY)&_ZN8S20562C63v28Ev,
};
static  VTT_ENTRY vtt_S20562C1[] = {
  {&(_ZTV8S20562C1[13]),  13,95},
  {&(_tg__ZTV8S20562C8__8S20562C1[12]),  12,22},
  {&(_tg__ZTV8S20562C8__8S20562C1[12]),  12,22},
  {&(_tg__ZTV8S20562C3__8S20562C8__8S20562C1[20]),  20,33},
  {&(_tg__ZTV8S20562C58S20562C3__8S20562C8__8S20562C1[2]),  2,10},
  {&(_tg__ZTV8S20562C6__8S20562C8__8S20562C1[7]),  7,12},
  {&(_ZTV8S20562C1[36]),  36,95},
  {&(_ZTV8S20562C1[60]),  60,95},
  {&(_ZTV8S20562C1[75]),  75,95},
  {&(_ZTV8S20562C1[90]),  90,95},
  {&(_ZTV8S20562C1[13]),  13,95},
  {&(_tg__ZTV8S20562C2__8S20562C1[4]),  4,8},
  {&(_tg__ZTV8S20562C3__8S20562C2__8S20562C1[20]),  20,33},
  {&(_tg__ZTV8S20562C58S20562C3__8S20562C2__8S20562C1[2]),  2,10},
  {&(_tg__ZTV8S20562C6__8S20562C2__8S20562C1[7]),  7,12},
  {&(_tg__ZTV8S20562C9__8S20562C1[4]),  4,12},
  {&(_tg__ZTV8S20562C3__8S20562C9__8S20562C1[20]),  20,33},
  {&(_tg__ZTV8S20562C58S20562C3__8S20562C9__8S20562C1[2]),  2,10},
  {&(_tg__ZTV8S20562C6__8S20562C9__8S20562C1[7]),  7,12},
};
extern VTBL_ENTRY _ZTI8S20562C1[];
extern  VTBL_ENTRY _ZTV8S20562C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20562C1[];
static VTBL_ENTRY alt_thunk_names30[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20562C9D0Ev,_ZTv0_n36_N8S20562C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20562C9D0Ev,_ZThn8_N8S20562C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20562C9D1Ev,_ZTv0_n36_N8S20562C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20562C9D1Ev,_ZThn8_N8S20562C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20562C2D0Ev,_ZTv0_n36_N8S20562C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20562C2D0Ev,_ZThn4_N8S20562C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20562C2D1Ev,_ZTv0_n36_N8S20562C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20562C2D1Ev,_ZThn4_N8S20562C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20562C8D0Ev,_ZTv0_n36_N8S20562C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20562C8D0Ev,_ZThn8_N8S20562C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20562C8D1Ev,_ZTv0_n36_N8S20562C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20562C8D1Ev,_ZThn8_N8S20562C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20562C1D0Ev,_ZTv0_n36_N8S20562C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20562C1D0Ev,_ZThn8_N8S20562C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20562C1D1Ev,_ZTv0_n36_N8S20562C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20562C1D1Ev,_ZThn8_N8S20562C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20562C1D0Ev,_ZTv0_n20_N8S20562C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20562C1D0Ev,_ZThn4_N8S20562C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20562C1D1Ev,_ZTv0_n20_N8S20562C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20562C1D1Ev,_ZThn4_N8S20562C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20562C1 = {  "S20562C1", // class name
  bases_S20562C1, 7,
  &(vtc_S20562C1[0]), // expected_vtbl_contents
  &(vtt_S20562C1[0]), // expected_vtt_contents
  ABISELECT(72,36), // object size
  NSPAIRA(_ZTI8S20562C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20562C1),95, //virtual function table var
  13, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20562C1),19, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names30,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7189C2  {
  ::S2120C13_nt s7189c2f0;
  ::S2120C13_nt s7189c2f1;
  void *s7189c2f2;
  int s7189c2f3;
  ::S601C8 s7189c2f4;
  int s7189c2f5:2;
  int s7189c2f6:2;
  unsigned char s7189c2f7:1;
  unsigned char s7189c2f8:1;
  ::S601C53 s7189c2f9;
  ::S11720C18 s7189c2f10[2];
  virtual  ~S7189C2(); // _ZN7S7189C2D1Ev
  virtual void  v9(); // _ZN7S7189C22v9Ev
  virtual void  v10(); // _ZN7S7189C23v10Ev
  virtual void  v11(); // _ZN7S7189C23v11Ev
  virtual void  v12(); // _ZN7S7189C23v12Ev
  virtual void  v13(); // _ZN7S7189C23v13Ev
  virtual void  v14(); // _ZN7S7189C23v14Ev
  virtual void  v15(); // _ZN7S7189C23v15Ev
  virtual void  v16(); // _ZN7S7189C23v16Ev
  virtual void  v17(); // _ZN7S7189C23v17Ev
  virtual void  v18(); // _ZN7S7189C23v18Ev
  virtual void  v19(); // _ZN7S7189C23v19Ev
  virtual void  v20(); // _ZN7S7189C23v20Ev
  virtual void  v21(); // _ZN7S7189C23v21Ev
  virtual void  v22(); // _ZN7S7189C23v22Ev
  virtual void  v23(); // _ZN7S7189C23v23Ev
  S7189C2(); // tgen
};
//SIG(-1 S7189C2) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 FC2{ m FC3{ m FL[2]}} FC2 Fp Fi FU4{ m FC5{ Fi:4 Fi:4 Fi:4 Fi:2 Fi:1 Fi:17} Fi} Fi:2 Fi:2 Fc:1 Fc:1 FC6{ m Fp Fp} FC7{ Fp Fp}[2]}


 S7189C2 ::~S7189C2(){ note_dtor("S7189C2", this);}
void  S7189C2 ::v9(){vfunc_called(this, "_ZN7S7189C22v9Ev");}
void  S7189C2 ::v10(){vfunc_called(this, "_ZN7S7189C23v10Ev");}
void  S7189C2 ::v11(){vfunc_called(this, "_ZN7S7189C23v11Ev");}
void  S7189C2 ::v12(){vfunc_called(this, "_ZN7S7189C23v12Ev");}
void  S7189C2 ::v13(){vfunc_called(this, "_ZN7S7189C23v13Ev");}
void  S7189C2 ::v14(){vfunc_called(this, "_ZN7S7189C23v14Ev");}
void  S7189C2 ::v15(){vfunc_called(this, "_ZN7S7189C23v15Ev");}
void  S7189C2 ::v16(){vfunc_called(this, "_ZN7S7189C23v16Ev");}
void  S7189C2 ::v17(){vfunc_called(this, "_ZN7S7189C23v17Ev");}
void  S7189C2 ::v18(){vfunc_called(this, "_ZN7S7189C23v18Ev");}
void  S7189C2 ::v19(){vfunc_called(this, "_ZN7S7189C23v19Ev");}
void  S7189C2 ::v20(){vfunc_called(this, "_ZN7S7189C23v20Ev");}
void  S7189C2 ::v21(){vfunc_called(this, "_ZN7S7189C23v21Ev");}
void  S7189C2 ::v22(){vfunc_called(this, "_ZN7S7189C23v22Ev");}
void  S7189C2 ::v23(){vfunc_called(this, "_ZN7S7189C23v23Ev");}
S7189C2 ::S7189C2(){ note_ctor("S7189C2", this);} // tgen

static void Test_S7189C2()
{
  extern Class_Descriptor cd_S7189C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,20)];
    init_test(&cd_S7189C2, buf);
    S7189C2 *dp, &lv = *(dp=new (buf) S7189C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,76), "sizeof(S7189C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7189C2)");
    check_field_offset(lv, s7189c2f0, ABISELECT(8,4), "S7189C2.s7189c2f0");
    check_field_offset(lv, s7189c2f1, ABISELECT(24,20), "S7189C2.s7189c2f1");
    check_field_offset(lv, s7189c2f2, ABISELECT(40,36), "S7189C2.s7189c2f2");
    check_field_offset(lv, s7189c2f3, ABISELECT(48,40), "S7189C2.s7189c2f3");
    check_field_offset(lv, s7189c2f4, ABISELECT(52,44), "S7189C2.s7189c2f4");
    set_bf_and_test(lv, s7189c2f5, ABISELECT(56,48), 0, 2, 1, "S7189C2");
    set_bf_and_test(lv, s7189c2f5, ABISELECT(56,48), 0, 2, hide_sll(1LL<<1), "S7189C2");
    set_bf_and_test(lv, s7189c2f6, ABISELECT(56,48), 2, 2, 1, "S7189C2");
    set_bf_and_test(lv, s7189c2f6, ABISELECT(56,48), 2, 2, hide_sll(1LL<<1), "S7189C2");
    set_bf_and_test(lv, s7189c2f7, ABISELECT(56,48), 4, 1, 1, "S7189C2");
    set_bf_and_test(lv, s7189c2f8, ABISELECT(56,48), 5, 1, 1, "S7189C2");
    check_field_offset(lv, s7189c2f9, ABISELECT(64,52), "S7189C2.s7189c2f9");
    check_field_offset(lv, s7189c2f10, ABISELECT(80,60), "S7189C2.s7189c2f10");
    test_class_info(&lv, &cd_S7189C2);
    dp->~S7189C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7189C2(Test_S7189C2, "S7189C2", ABISELECT(112,76));

#else // __cplusplus

extern void _ZN7S7189C2C1Ev();
extern void _ZN7S7189C2D1Ev();
Name_Map name_map_S7189C2[] = {
  NSPAIR(_ZN7S7189C2C1Ev),
  NSPAIR(_ZN7S7189C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7189C2[];
extern void _ZN7S7189C2D1Ev();
extern void _ZN7S7189C2D0Ev();
extern void _ZN7S7189C22v9Ev();
extern void _ZN7S7189C23v10Ev();
extern void _ZN7S7189C23v11Ev();
extern void _ZN7S7189C23v12Ev();
extern void _ZN7S7189C23v13Ev();
extern void _ZN7S7189C23v14Ev();
extern void _ZN7S7189C23v15Ev();
extern void _ZN7S7189C23v16Ev();
extern void _ZN7S7189C23v17Ev();
extern void _ZN7S7189C23v18Ev();
extern void _ZN7S7189C23v19Ev();
extern void _ZN7S7189C23v20Ev();
extern void _ZN7S7189C23v21Ev();
extern void _ZN7S7189C23v22Ev();
extern void _ZN7S7189C23v23Ev();
static  VTBL_ENTRY vtc_S7189C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7189C2[0]),
  (VTBL_ENTRY)&_ZN7S7189C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7189C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7189C22v9Ev,
  (VTBL_ENTRY)&_ZN7S7189C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7189C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7189C23v12Ev,
  (VTBL_ENTRY)&_ZN7S7189C23v13Ev,
  (VTBL_ENTRY)&_ZN7S7189C23v14Ev,
  (VTBL_ENTRY)&_ZN7S7189C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7189C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7189C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7189C23v18Ev,
  (VTBL_ENTRY)&_ZN7S7189C23v19Ev,
  (VTBL_ENTRY)&_ZN7S7189C23v20Ev,
  (VTBL_ENTRY)&_ZN7S7189C23v21Ev,
  (VTBL_ENTRY)&_ZN7S7189C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7189C23v23Ev,
};
extern VTBL_ENTRY _ZTI7S7189C2[];
extern  VTBL_ENTRY _ZTV7S7189C2[];
Class_Descriptor cd_S7189C2 = {  "S7189C2", // class name
  0,0,//no base classes
  &(vtc_S7189C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,76), // object size
  NSPAIRA(_ZTI7S7189C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7189C2),19, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7189C1  : S7189C2 {
  virtual  ~S7189C1(); // _ZN7S7189C1D1Ev
  virtual void  v1(); // _ZN7S7189C12v1Ev
  virtual void  v2(); // _ZN7S7189C12v2Ev
  virtual void  v3(); // _ZN7S7189C12v3Ev
  virtual void  v4(); // _ZN7S7189C12v4Ev
  virtual void  v5(); // _ZN7S7189C12v5Ev
  virtual void  v6(); // _ZN7S7189C12v6Ev
  virtual void  v7(); // _ZN7S7189C12v7Ev
  virtual void  v8(); // _ZN7S7189C12v8Ev
  S7189C1(); // tgen
};
//SIG(1 S7189C1) C1{ BC2{ vd v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 FC3{ m FC4{ m FL[2]}} FC3 Fp Fi FU5{ m FC6{ Fi:4 Fi:4 Fi:4 Fi:2 Fi:1 Fi:17} Fi} Fi:2 Fi:2 Fc:1 Fc:1 FC7{ m Fp Fp} FC8{ Fp Fp}[2]} vd v1 v2 v3 v4 v5 v6 v7 v8}


 S7189C1 ::~S7189C1(){ note_dtor("S7189C1", this);}
void  S7189C1 ::v1(){vfunc_called(this, "_ZN7S7189C12v1Ev");}
void  S7189C1 ::v2(){vfunc_called(this, "_ZN7S7189C12v2Ev");}
void  S7189C1 ::v3(){vfunc_called(this, "_ZN7S7189C12v3Ev");}
void  S7189C1 ::v4(){vfunc_called(this, "_ZN7S7189C12v4Ev");}
void  S7189C1 ::v5(){vfunc_called(this, "_ZN7S7189C12v5Ev");}
void  S7189C1 ::v6(){vfunc_called(this, "_ZN7S7189C12v6Ev");}
void  S7189C1 ::v7(){vfunc_called(this, "_ZN7S7189C12v7Ev");}
void  S7189C1 ::v8(){vfunc_called(this, "_ZN7S7189C12v8Ev");}
S7189C1 ::S7189C1(){ note_ctor("S7189C1", this);} // tgen

static void Test_S7189C1()
{
  extern Class_Descriptor cd_S7189C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,20)];
    init_test(&cd_S7189C1, buf);
    S7189C1 *dp, &lv = *(dp=new (buf) S7189C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,76), "sizeof(S7189C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7189C1)");
    check_base_class_offset(lv, (S7189C2*), 0, "S7189C1");
    test_class_info(&lv, &cd_S7189C1);
    dp->~S7189C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7189C1(Test_S7189C1, "S7189C1", ABISELECT(112,76));

#else // __cplusplus

extern void _ZN7S7189C1C1Ev();
extern void _ZN7S7189C1D1Ev();
Name_Map name_map_S7189C1[] = {
  NSPAIR(_ZN7S7189C1C1Ev),
  NSPAIR(_ZN7S7189C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7189C2;
extern VTBL_ENTRY _ZTI7S7189C2[];
extern  VTBL_ENTRY _ZTV7S7189C2[];
static Base_Class bases_S7189C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7189C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7189C1[];
extern void _ZN7S7189C1D1Ev();
extern void _ZN7S7189C1D0Ev();
extern void _ZN7S7189C22v9Ev();
extern void _ZN7S7189C23v10Ev();
extern void _ZN7S7189C23v11Ev();
extern void _ZN7S7189C23v12Ev();
extern void _ZN7S7189C23v13Ev();
extern void _ZN7S7189C23v14Ev();
extern void _ZN7S7189C23v15Ev();
extern void _ZN7S7189C23v16Ev();
extern void _ZN7S7189C23v17Ev();
extern void _ZN7S7189C23v18Ev();
extern void _ZN7S7189C23v19Ev();
extern void _ZN7S7189C23v20Ev();
extern void _ZN7S7189C23v21Ev();
extern void _ZN7S7189C23v22Ev();
extern void _ZN7S7189C23v23Ev();
extern void _ZN7S7189C12v1Ev();
extern void _ZN7S7189C12v2Ev();
extern void _ZN7S7189C12v3Ev();
extern void _ZN7S7189C12v4Ev();
extern void _ZN7S7189C12v5Ev();
extern void _ZN7S7189C12v6Ev();
extern void _ZN7S7189C12v7Ev();
extern void _ZN7S7189C12v8Ev();
static  VTBL_ENTRY vtc_S7189C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7189C1[0]),
  (VTBL_ENTRY)&_ZN7S7189C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7189C1D0Ev,
  (VTBL_ENTRY)&_ZN7S7189C22v9Ev,
  (VTBL_ENTRY)&_ZN7S7189C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7189C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7189C23v12Ev,
  (VTBL_ENTRY)&_ZN7S7189C23v13Ev,
  (VTBL_ENTRY)&_ZN7S7189C23v14Ev,
  (VTBL_ENTRY)&_ZN7S7189C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7189C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7189C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7189C23v18Ev,
  (VTBL_ENTRY)&_ZN7S7189C23v19Ev,
  (VTBL_ENTRY)&_ZN7S7189C23v20Ev,
  (VTBL_ENTRY)&_ZN7S7189C23v21Ev,
  (VTBL_ENTRY)&_ZN7S7189C23v22Ev,
  (VTBL_ENTRY)&_ZN7S7189C23v23Ev,
  (VTBL_ENTRY)&_ZN7S7189C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7189C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7189C12v3Ev,
  (VTBL_ENTRY)&_ZN7S7189C12v4Ev,
  (VTBL_ENTRY)&_ZN7S7189C12v5Ev,
  (VTBL_ENTRY)&_ZN7S7189C12v6Ev,
  (VTBL_ENTRY)&_ZN7S7189C12v7Ev,
  (VTBL_ENTRY)&_ZN7S7189C12v8Ev,
};
extern VTBL_ENTRY _ZTI7S7189C1[];
extern  VTBL_ENTRY _ZTV7S7189C1[];
Class_Descriptor cd_S7189C1 = {  "S7189C1", // class name
  bases_S7189C1, 1,
  &(vtc_S7189C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,76), // object size
  NSPAIRA(_ZTI7S7189C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7189C1),27, //virtual function table var
  2, // 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  S7118C2  {
  ::S2120C13_nt s7118c2f0;
  ::S2120C13_nt s7118c2f1;
  void *s7118c2f2;
  int s7118c2f3;
  ::S601C8 s7118c2f4;
  int s7118c2f5:2;
  int s7118c2f6:2;
  unsigned char s7118c2f7:1;
  unsigned char s7118c2f8:1;
  ::S601C53 s7118c2f9;
  ::S11720C18 s7118c2f10[2];
  virtual  ~S7118C2(); // _ZN7S7118C2D1Ev
  virtual void  v7(); // _ZN7S7118C22v7Ev
  virtual void  v8(); // _ZN7S7118C22v8Ev
  virtual void  v9(); // _ZN7S7118C22v9Ev
  virtual void  v10(); // _ZN7S7118C23v10Ev
  virtual void  v11(); // _ZN7S7118C23v11Ev
  virtual void  v12(); // _ZN7S7118C23v12Ev
  virtual void  v13(); // _ZN7S7118C23v13Ev
  virtual void  v14(); // _ZN7S7118C23v14Ev
  virtual void  v15(); // _ZN7S7118C23v15Ev
  virtual void  v16(); // _ZN7S7118C23v16Ev
  virtual void  v17(); // _ZN7S7118C23v17Ev
  virtual void  v18(); // _ZN7S7118C23v18Ev
  virtual void  v19(); // _ZN7S7118C23v19Ev
  virtual void  v20(); // _ZN7S7118C23v20Ev
  virtual void  v21(); // _ZN7S7118C23v21Ev
  S7118C2(); // tgen
};
//SIG(-1 S7118C2) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 FC2{ m FC3{ m FL[2]}} FC2 Fp Fi FU4{ m FC5{ Fi:4 Fi:4 Fi:4 Fi:2 Fi:1 Fi:17} Fi} Fi:2 Fi:2 Fc:1 Fc:1 FC6{ m Fp Fp} FC7{ Fp Fp}[2]}


 S7118C2 ::~S7118C2(){ note_dtor("S7118C2", this);}
void  S7118C2 ::v7(){vfunc_called(this, "_ZN7S7118C22v7Ev");}
void  S7118C2 ::v8(){vfunc_called(this, "_ZN7S7118C22v8Ev");}
void  S7118C2 ::v9(){vfunc_called(this, "_ZN7S7118C22v9Ev");}
void  S7118C2 ::v10(){vfunc_called(this, "_ZN7S7118C23v10Ev");}
void  S7118C2 ::v11(){vfunc_called(this, "_ZN7S7118C23v11Ev");}
void  S7118C2 ::v12(){vfunc_called(this, "_ZN7S7118C23v12Ev");}
void  S7118C2 ::v13(){vfunc_called(this, "_ZN7S7118C23v13Ev");}
void  S7118C2 ::v14(){vfunc_called(this, "_ZN7S7118C23v14Ev");}
void  S7118C2 ::v15(){vfunc_called(this, "_ZN7S7118C23v15Ev");}
void  S7118C2 ::v16(){vfunc_called(this, "_ZN7S7118C23v16Ev");}
void  S7118C2 ::v17(){vfunc_called(this, "_ZN7S7118C23v17Ev");}
void  S7118C2 ::v18(){vfunc_called(this, "_ZN7S7118C23v18Ev");}
void  S7118C2 ::v19(){vfunc_called(this, "_ZN7S7118C23v19Ev");}
void  S7118C2 ::v20(){vfunc_called(this, "_ZN7S7118C23v20Ev");}
void  S7118C2 ::v21(){vfunc_called(this, "_ZN7S7118C23v21Ev");}
S7118C2 ::S7118C2(){ note_ctor("S7118C2", this);} // tgen

static void Test_S7118C2()
{
  extern Class_Descriptor cd_S7118C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,20)];
    init_test(&cd_S7118C2, buf);
    S7118C2 *dp, &lv = *(dp=new (buf) S7118C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,76), "sizeof(S7118C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7118C2)");
    check_field_offset(lv, s7118c2f0, ABISELECT(8,4), "S7118C2.s7118c2f0");
    check_field_offset(lv, s7118c2f1, ABISELECT(24,20), "S7118C2.s7118c2f1");
    check_field_offset(lv, s7118c2f2, ABISELECT(40,36), "S7118C2.s7118c2f2");
    check_field_offset(lv, s7118c2f3, ABISELECT(48,40), "S7118C2.s7118c2f3");
    check_field_offset(lv, s7118c2f4, ABISELECT(52,44), "S7118C2.s7118c2f4");
    set_bf_and_test(lv, s7118c2f5, ABISELECT(56,48), 0, 2, 1, "S7118C2");
    set_bf_and_test(lv, s7118c2f5, ABISELECT(56,48), 0, 2, hide_sll(1LL<<1), "S7118C2");
    set_bf_and_test(lv, s7118c2f6, ABISELECT(56,48), 2, 2, 1, "S7118C2");
    set_bf_and_test(lv, s7118c2f6, ABISELECT(56,48), 2, 2, hide_sll(1LL<<1), "S7118C2");
    set_bf_and_test(lv, s7118c2f7, ABISELECT(56,48), 4, 1, 1, "S7118C2");
    set_bf_and_test(lv, s7118c2f8, ABISELECT(56,48), 5, 1, 1, "S7118C2");
    check_field_offset(lv, s7118c2f9, ABISELECT(64,52), "S7118C2.s7118c2f9");
    check_field_offset(lv, s7118c2f10, ABISELECT(80,60), "S7118C2.s7118c2f10");
    test_class_info(&lv, &cd_S7118C2);
    dp->~S7118C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7118C2(Test_S7118C2, "S7118C2", ABISELECT(112,76));

#else // __cplusplus

extern void _ZN7S7118C2C1Ev();
extern void _ZN7S7118C2D1Ev();
Name_Map name_map_S7118C2[] = {
  NSPAIR(_ZN7S7118C2C1Ev),
  NSPAIR(_ZN7S7118C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7118C2[];
extern void _ZN7S7118C2D1Ev();
extern void _ZN7S7118C2D0Ev();
extern void _ZN7S7118C22v7Ev();
extern void _ZN7S7118C22v8Ev();
extern void _ZN7S7118C22v9Ev();
extern void _ZN7S7118C23v10Ev();
extern void _ZN7S7118C23v11Ev();
extern void _ZN7S7118C23v12Ev();
extern void _ZN7S7118C23v13Ev();
extern void _ZN7S7118C23v14Ev();
extern void _ZN7S7118C23v15Ev();
extern void _ZN7S7118C23v16Ev();
extern void _ZN7S7118C23v17Ev();
extern void _ZN7S7118C23v18Ev();
extern void _ZN7S7118C23v19Ev();
extern void _ZN7S7118C23v20Ev();
extern void _ZN7S7118C23v21Ev();
static  VTBL_ENTRY vtc_S7118C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7118C2[0]),
  (VTBL_ENTRY)&_ZN7S7118C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7118C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7118C22v7Ev,
  (VTBL_ENTRY)&_ZN7S7118C22v8Ev,
  (VTBL_ENTRY)&_ZN7S7118C22v9Ev,
  (VTBL_ENTRY)&_ZN7S7118C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7118C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7118C23v12Ev,
  (VTBL_ENTRY)&_ZN7S7118C23v13Ev,
  (VTBL_ENTRY)&_ZN7S7118C23v14Ev,
  (VTBL_ENTRY)&_ZN7S7118C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7118C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7118C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7118C23v18Ev,
  (VTBL_ENTRY)&_ZN7S7118C23v19Ev,
  (VTBL_ENTRY)&_ZN7S7118C23v20Ev,
  (VTBL_ENTRY)&_ZN7S7118C23v21Ev,
};
extern VTBL_ENTRY _ZTI7S7118C2[];
extern  VTBL_ENTRY _ZTV7S7118C2[];
Class_Descriptor cd_S7118C2 = {  "S7118C2", // class name
  0,0,//no base classes
  &(vtc_S7118C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,76), // object size
  NSPAIRA(_ZTI7S7118C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7118C2),19, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7118C1  : S7118C2 {
  void *s7118c1f0;
  unsigned char s7118c1f1:1;
  virtual  ~S7118C1(); // _ZN7S7118C1D1Ev
  virtual void  v1(); // _ZN7S7118C12v1Ev
  virtual void  v2(); // _ZN7S7118C12v2Ev
  virtual void  v3(); // _ZN7S7118C12v3Ev
  virtual void  v4(); // _ZN7S7118C12v4Ev
  virtual void  v5(); // _ZN7S7118C12v5Ev
  virtual void  v6(); // _ZN7S7118C12v6Ev
  S7118C1(); // tgen
};
//SIG(1 S7118C1) C1{ BC2{ vd v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 FC3{ m FC4{ m FL[2]}} FC3 Fp Fi FU5{ m FC6{ Fi:4 Fi:4 Fi:4 Fi:2 Fi:1 Fi:17} Fi} Fi:2 Fi:2 Fc:1 Fc:1 FC7{ m Fp Fp} FC8{ Fp Fp}[2]} vd v1 v2 v3 v4 v5 v6 Fp Fc:1}


 S7118C1 ::~S7118C1(){ note_dtor("S7118C1", this);}
void  S7118C1 ::v1(){vfunc_called(this, "_ZN7S7118C12v1Ev");}
void  S7118C1 ::v2(){vfunc_called(this, "_ZN7S7118C12v2Ev");}
void  S7118C1 ::v3(){vfunc_called(this, "_ZN7S7118C12v3Ev");}
void  S7118C1 ::v4(){vfunc_called(this, "_ZN7S7118C12v4Ev");}
void  S7118C1 ::v5(){vfunc_called(this, "_ZN7S7118C12v5Ev");}
void  S7118C1 ::v6(){vfunc_called(this, "_ZN7S7118C12v6Ev");}
S7118C1 ::S7118C1(){ note_ctor("S7118C1", this);} // tgen

static void Test_S7118C1()
{
  extern Class_Descriptor cd_S7118C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,22)];
    init_test(&cd_S7118C1, buf);
    S7118C1 *dp, &lv = *(dp=new (buf) S7118C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,84), "sizeof(S7118C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7118C1)");
    check_base_class_offset(lv, (S7118C2*), 0, "S7118C1");
    check_field_offset(lv, s7118c1f0, ABISELECT(112,76), "S7118C1.s7118c1f0");
    set_bf_and_test(lv, s7118c1f1, ABISELECT(120,80), 0, 1, 1, "S7118C1");
    test_class_info(&lv, &cd_S7118C1);
    dp->~S7118C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7118C1(Test_S7118C1, "S7118C1", ABISELECT(128,84));

#else // __cplusplus

extern void _ZN7S7118C1C1Ev();
extern void _ZN7S7118C1D1Ev();
Name_Map name_map_S7118C1[] = {
  NSPAIR(_ZN7S7118C1C1Ev),
  NSPAIR(_ZN7S7118C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7118C2;
extern VTBL_ENTRY _ZTI7S7118C2[];
extern  VTBL_ENTRY _ZTV7S7118C2[];
static Base_Class bases_S7118C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7118C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7118C1[];
extern void _ZN7S7118C1D1Ev();
extern void _ZN7S7118C1D0Ev();
extern void _ZN7S7118C22v7Ev();
extern void _ZN7S7118C22v8Ev();
extern void _ZN7S7118C22v9Ev();
extern void _ZN7S7118C23v10Ev();
extern void _ZN7S7118C23v11Ev();
extern void _ZN7S7118C23v12Ev();
extern void _ZN7S7118C23v13Ev();
extern void _ZN7S7118C23v14Ev();
extern void _ZN7S7118C23v15Ev();
extern void _ZN7S7118C23v16Ev();
extern void _ZN7S7118C23v17Ev();
extern void _ZN7S7118C23v18Ev();
extern void _ZN7S7118C23v19Ev();
extern void _ZN7S7118C23v20Ev();
extern void _ZN7S7118C23v21Ev();
extern void _ZN7S7118C12v1Ev();
extern void _ZN7S7118C12v2Ev();
extern void _ZN7S7118C12v3Ev();
extern void _ZN7S7118C12v4Ev();
extern void _ZN7S7118C12v5Ev();
extern void _ZN7S7118C12v6Ev();
static  VTBL_ENTRY vtc_S7118C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7118C1[0]),
  (VTBL_ENTRY)&_ZN7S7118C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7118C1D0Ev,
  (VTBL_ENTRY)&_ZN7S7118C22v7Ev,
  (VTBL_ENTRY)&_ZN7S7118C22v8Ev,
  (VTBL_ENTRY)&_ZN7S7118C22v9Ev,
  (VTBL_ENTRY)&_ZN7S7118C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7118C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7118C23v12Ev,
  (VTBL_ENTRY)&_ZN7S7118C23v13Ev,
  (VTBL_ENTRY)&_ZN7S7118C23v14Ev,
  (VTBL_ENTRY)&_ZN7S7118C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7118C23v16Ev,
  (VTBL_ENTRY)&_ZN7S7118C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7118C23v18Ev,
  (VTBL_ENTRY)&_ZN7S7118C23v19Ev,
  (VTBL_ENTRY)&_ZN7S7118C23v20Ev,
  (VTBL_ENTRY)&_ZN7S7118C23v21Ev,
  (VTBL_ENTRY)&_ZN7S7118C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7118C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7118C12v3Ev,
  (VTBL_ENTRY)&_ZN7S7118C12v4Ev,
  (VTBL_ENTRY)&_ZN7S7118C12v5Ev,
  (VTBL_ENTRY)&_ZN7S7118C12v6Ev,
};
extern VTBL_ENTRY _ZTI7S7118C1[];
extern  VTBL_ENTRY _ZTV7S7118C1[];
Class_Descriptor cd_S7118C1 = {  "S7118C1", // class name
  bases_S7118C1, 1,
  &(vtc_S7118C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(128,84), // object size
  NSPAIRA(_ZTI7S7118C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7118C1),25, //virtual function table var
  2, // 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  S20382C3  {
  virtual  ~S20382C3(); // _ZN8S20382C3D1Ev
  virtual void  v14(); // _ZN8S20382C33v14Ev
  virtual void  v15(); // _ZN8S20382C33v15Ev
  virtual void  v16(); // _ZN8S20382C33v16Ev
  virtual void  v17(); // _ZN8S20382C33v17Ev
  virtual void  v18(); // _ZN8S20382C33v18Ev
  virtual void  v19(); // _ZN8S20382C33v19Ev
  S20382C3(); // tgen
};
//SIG(-1 S20382C3) C1{ vd v1 v2 v3 v4 v5 v6}


 S20382C3 ::~S20382C3(){ note_dtor("S20382C3", this);}
void  S20382C3 ::v14(){vfunc_called(this, "_ZN8S20382C33v14Ev");}
void  S20382C3 ::v15(){vfunc_called(this, "_ZN8S20382C33v15Ev");}
void  S20382C3 ::v16(){vfunc_called(this, "_ZN8S20382C33v16Ev");}
void  S20382C3 ::v17(){vfunc_called(this, "_ZN8S20382C33v17Ev");}
void  S20382C3 ::v18(){vfunc_called(this, "_ZN8S20382C33v18Ev");}
void  S20382C3 ::v19(){vfunc_called(this, "_ZN8S20382C33v19Ev");}
S20382C3 ::S20382C3(){ note_ctor("S20382C3", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S20382C3C1Ev();
extern void _ZN8S20382C3D1Ev();
Name_Map name_map_S20382C3[] = {
  NSPAIR(_ZN8S20382C3C1Ev),
  NSPAIR(_ZN8S20382C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20382C3[];
extern void _ZN8S20382C3D1Ev();
extern void _ZN8S20382C3D0Ev();
extern void _ZN8S20382C33v14Ev();
extern void _ZN8S20382C33v15Ev();
extern void _ZN8S20382C33v16Ev();
extern void _ZN8S20382C33v17Ev();
extern void _ZN8S20382C33v18Ev();
extern void _ZN8S20382C33v19Ev();
static  VTBL_ENTRY vtc_S20382C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20382C3[0]),
  (VTBL_ENTRY)&_ZN8S20382C3D1Ev,
  (VTBL_ENTRY)&_ZN8S20382C3D0Ev,
  (VTBL_ENTRY)&_ZN8S20382C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20382C33v15Ev,
  (VTBL_ENTRY)&_ZN8S20382C33v16Ev,
  (VTBL_ENTRY)&_ZN8S20382C33v17Ev,
  (VTBL_ENTRY)&_ZN8S20382C33v18Ev,
  (VTBL_ENTRY)&_ZN8S20382C33v19Ev,
};
extern VTBL_ENTRY _ZTI8S20382C3[];
extern  VTBL_ENTRY _ZTV8S20382C3[];
Class_Descriptor cd_S20382C3 = {  "S20382C3", // class name
  0,0,//no base classes
  &(vtc_S20382C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20382C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20382C3),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20382C2  {
  ::S20382C3 s20382c2f0;
  int s20382c2f1;
  virtual void  v8(); // _ZN8S20382C22v8Ev
  virtual void  v9(); // _ZN8S20382C22v9Ev
  virtual void  v10(); // _ZN8S20382C23v10Ev
  virtual void  v11(); // _ZN8S20382C23v11Ev
  virtual void  v12(); // _ZN8S20382C23v12Ev
  virtual void  v13(); // _ZN8S20382C23v13Ev
  ~S20382C2(); // tgen
  S20382C2(); // tgen
};
//SIG(-1 S20382C2) C1{ v1 v2 v3 v4 v5 v6 FC2{ vd v7 v8 v9 v10 v11 v12} Fi}


void  S20382C2 ::v8(){vfunc_called(this, "_ZN8S20382C22v8Ev");}
void  S20382C2 ::v9(){vfunc_called(this, "_ZN8S20382C22v9Ev");}
void  S20382C2 ::v10(){vfunc_called(this, "_ZN8S20382C23v10Ev");}
void  S20382C2 ::v11(){vfunc_called(this, "_ZN8S20382C23v11Ev");}
void  S20382C2 ::v12(){vfunc_called(this, "_ZN8S20382C23v12Ev");}
void  S20382C2 ::v13(){vfunc_called(this, "_ZN8S20382C23v13Ev");}
S20382C2 ::~S20382C2(){ note_dtor("S20382C2", this);} // tgen
S20382C2 ::S20382C2(){ note_ctor("S20382C2", this);} // tgen

static void Test_S20382C2()
{
  extern Class_Descriptor cd_S20382C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S20382C2, buf);
    S20382C2 *dp, &lv = *(dp=new (buf) S20382C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S20382C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20382C2)");
    check_field_offset(lv, s20382c2f0, ABISELECT(8,4), "S20382C2.s20382c2f0");
    check_field_offset(lv, s20382c2f1, ABISELECT(16,8), "S20382C2.s20382c2f1");
    test_class_info(&lv, &cd_S20382C2);
    dp->~S20382C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20382C2(Test_S20382C2, "S20382C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S20382C2C1Ev();
extern void _ZN8S20382C2D1Ev();
Name_Map name_map_S20382C2[] = {
  NSPAIR(_ZN8S20382C2C1Ev),
  NSPAIR(_ZN8S20382C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20382C2[];
extern void _ZN8S20382C22v8Ev();
extern void _ZN8S20382C22v9Ev();
extern void _ZN8S20382C23v10Ev();
extern void _ZN8S20382C23v11Ev();
extern void _ZN8S20382C23v12Ev();
extern void _ZN8S20382C23v13Ev();
static  VTBL_ENTRY vtc_S20382C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20382C2[0]),
  (VTBL_ENTRY)&_ZN8S20382C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20382C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20382C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20382C23v11Ev,
  (VTBL_ENTRY)&_ZN8S20382C23v12Ev,
  (VTBL_ENTRY)&_ZN8S20382C23v13Ev,
};
extern VTBL_ENTRY _ZTI8S20382C2[];
extern  VTBL_ENTRY _ZTV8S20382C2[];
Class_Descriptor cd_S20382C2 = {  "S20382C2", // class name
  0,0,//no base classes
  &(vtc_S20382C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S20382C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20382C2),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  S20382C6  : S20382C2 , S20382C3 {
  virtual  ~S20382C6(); // _ZN8S20382C6D1Ev
  virtual void  v20(); // _ZN8S20382C63v20Ev
  virtual void  v21(); // _ZN8S20382C63v21Ev
  virtual void  v22(); // _ZN8S20382C63v22Ev
  virtual void  v23(); // _ZN8S20382C63v23Ev
  virtual void  v24(); // _ZN8S20382C63v24Ev
  S20382C6(); // tgen
};
//SIG(-1 S20382C6) C1{ BC2{ v6 v7 v8 v9 v10 v11 FC3{ vd v12 v13 v14 v15 v16 v17} Fi} BC3 vd v1 v2 v3 v4 v5}


 S20382C6 ::~S20382C6(){ note_dtor("S20382C6", this);}
void  S20382C6 ::v20(){vfunc_called(this, "_ZN8S20382C63v20Ev");}
void  S20382C6 ::v21(){vfunc_called(this, "_ZN8S20382C63v21Ev");}
void  S20382C6 ::v22(){vfunc_called(this, "_ZN8S20382C63v22Ev");}
void  S20382C6 ::v23(){vfunc_called(this, "_ZN8S20382C63v23Ev");}
void  S20382C6 ::v24(){vfunc_called(this, "_ZN8S20382C63v24Ev");}
S20382C6 ::S20382C6(){ note_ctor("S20382C6", this);} // tgen

static void Test_S20382C6()
{
  extern Class_Descriptor cd_S20382C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S20382C6, buf);
    S20382C6 *dp, &lv = *(dp=new (buf) S20382C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S20382C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20382C6)");
    check_base_class_offset(lv, (S20382C2*), 0, "S20382C6");
    check_base_class_offset(lv, (S20382C3*), ABISELECT(24,12), "S20382C6");
    test_class_info(&lv, &cd_S20382C6);
    dp->~S20382C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20382C6(Test_S20382C6, "S20382C6", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S20382C6C1Ev();
extern void _ZN8S20382C6D1Ev();
Name_Map name_map_S20382C6[] = {
  NSPAIR(_ZN8S20382C6C1Ev),
  NSPAIR(_ZN8S20382C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20382C2;
extern VTBL_ENTRY _ZTI8S20382C2[];
extern  VTBL_ENTRY _ZTV8S20382C2[];
extern Class_Descriptor cd_S20382C3;
extern VTBL_ENTRY _ZTI8S20382C3[];
extern  VTBL_ENTRY _ZTV8S20382C3[];
static Base_Class bases_S20382C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20382C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S20382C3,    ABISELECT(24,12), //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
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20382C6[];
extern void _ZN8S20382C22v8Ev();
extern void _ZN8S20382C22v9Ev();
extern void _ZN8S20382C23v10Ev();
extern void _ZN8S20382C23v11Ev();
extern void _ZN8S20382C23v12Ev();
extern void _ZN8S20382C23v13Ev();
extern void _ZN8S20382C6D1Ev();
extern void _ZN8S20382C6D0Ev();
extern void _ZN8S20382C63v20Ev();
extern void _ZN8S20382C63v21Ev();
extern void _ZN8S20382C63v22Ev();
extern void _ZN8S20382C63v23Ev();
extern void _ZN8S20382C63v24Ev();
extern void ABISELECT(_ZThn24_N8S20382C6D1Ev,_ZThn12_N8S20382C6D1Ev)();
extern void ABISELECT(_ZThn24_N8S20382C6D0Ev,_ZThn12_N8S20382C6D0Ev)();
extern void _ZN8S20382C33v14Ev();
extern void _ZN8S20382C33v15Ev();
extern void _ZN8S20382C33v16Ev();
extern void _ZN8S20382C33v17Ev();
extern void _ZN8S20382C33v18Ev();
extern void _ZN8S20382C33v19Ev();
static  VTBL_ENTRY vtc_S20382C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20382C6[0]),
  (VTBL_ENTRY)&_ZN8S20382C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20382C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20382C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20382C23v11Ev,
  (VTBL_ENTRY)&_ZN8S20382C23v12Ev,
  (VTBL_ENTRY)&_ZN8S20382C23v13Ev,
  (VTBL_ENTRY)&_ZN8S20382C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20382C6D0Ev,
  (VTBL_ENTRY)&_ZN8S20382C63v20Ev,
  (VTBL_ENTRY)&_ZN8S20382C63v21Ev,
  (VTBL_ENTRY)&_ZN8S20382C63v22Ev,
  (VTBL_ENTRY)&_ZN8S20382C63v23Ev,
  (VTBL_ENTRY)&_ZN8S20382C63v24Ev,
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20382C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S20382C6D1Ev,_ZThn12_N8S20382C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S20382C6D0Ev,_ZThn12_N8S20382C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20382C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20382C33v15Ev,
  (VTBL_ENTRY)&_ZN8S20382C33v16Ev,
  (VTBL_ENTRY)&_ZN8S20382C33v17Ev,
  (VTBL_ENTRY)&_ZN8S20382C33v18Ev,
  (VTBL_ENTRY)&_ZN8S20382C33v19Ev,
};
extern VTBL_ENTRY _ZTI8S20382C6[];
extern  VTBL_ENTRY _ZTV8S20382C6[];
Class_Descriptor cd_S20382C6 = {  "S20382C6", // class name
  bases_S20382C6, 2,
  &(vtc_S20382C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S20382C6),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20382C6),25, //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  S20382C7  {
  ::S601C21_nt s20382c7f0;
  void *s20382c7f1;
  virtual void  v25(); // _ZN8S20382C73v25Ev
  virtual void  v26(); // _ZN8S20382C73v26Ev
  virtual void  v27(); // _ZN8S20382C73v27Ev
  virtual void  v28(); // _ZN8S20382C73v28Ev
  virtual void  v29(); // _ZN8S20382C73v29Ev
  ~S20382C7(); // tgen
  S20382C7(); // tgen
};
//SIG(-1 S20382C7) C1{ v1 v2 v3 v4 v5 FC2{} Fp}


void  S20382C7 ::v25(){vfunc_called(this, "_ZN8S20382C73v25Ev");}
void  S20382C7 ::v26(){vfunc_called(this, "_ZN8S20382C73v26Ev");}
void  S20382C7 ::v27(){vfunc_called(this, "_ZN8S20382C73v27Ev");}
void  S20382C7 ::v28(){vfunc_called(this, "_ZN8S20382C73v28Ev");}
void  S20382C7 ::v29(){vfunc_called(this, "_ZN8S20382C73v29Ev");}
S20382C7 ::~S20382C7(){ note_dtor("S20382C7", this);} // tgen
S20382C7 ::S20382C7(){ note_ctor("S20382C7", this);} // tgen

static void Test_S20382C7()
{
  extern Class_Descriptor cd_S20382C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S20382C7, buf);
    S20382C7 *dp, &lv = *(dp=new (buf) S20382C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S20382C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20382C7)");
    check_field_offset(lv, s20382c7f0, ABISELECT(8,4), "S20382C7.s20382c7f0");
    check_field_offset(lv, s20382c7f1, ABISELECT(16,8), "S20382C7.s20382c7f1");
    test_class_info(&lv, &cd_S20382C7);
    dp->~S20382C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20382C7(Test_S20382C7, "S20382C7", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S20382C7C1Ev();
extern void _ZN8S20382C7D1Ev();
Name_Map name_map_S20382C7[] = {
  NSPAIR(_ZN8S20382C7C1Ev),
  NSPAIR(_ZN8S20382C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20382C7[];
extern void _ZN8S20382C73v25Ev();
extern void _ZN8S20382C73v26Ev();
extern void _ZN8S20382C73v27Ev();
extern void _ZN8S20382C73v28Ev();
extern void _ZN8S20382C73v29Ev();
static  VTBL_ENTRY vtc_S20382C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20382C7[0]),
  (VTBL_ENTRY)&_ZN8S20382C73v25Ev,
  (VTBL_ENTRY)&_ZN8S20382C73v26Ev,
  (VTBL_ENTRY)&_ZN8S20382C73v27Ev,
  (VTBL_ENTRY)&_ZN8S20382C73v28Ev,
  (VTBL_ENTRY)&_ZN8S20382C73v29Ev,
};
extern VTBL_ENTRY _ZTI8S20382C7[];
extern  VTBL_ENTRY _ZTV8S20382C7[];
Class_Descriptor cd_S20382C7 = {  "S20382C7", // class name
  0,0,//no base classes
  &(vtc_S20382C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S20382C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20382C7),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  S20382C5  : virtual S20382C6 , virtual S20382C7 {
  virtual  ~S20382C5(); // _ZN8S20382C5D2Ev
  virtual void  v30(); // _ZN8S20382C53v30Ev
  virtual void  v31(); // _ZN8S20382C53v31Ev
  S20382C5(); // tgen
};
//SIG(-1 S20382C5) C1{ VBC2{ BC3{ v3 v4 v5 v6 v7 v8 FC4{ vd v9 v10 v11 v12 v13 v14} Fi} BC4 vd v15 v16 v17 v18 v19} VBC5{ v20 v21 v22 v23 v24 FC6{} Fp} vd v1 v2}


 S20382C5 ::~S20382C5(){ note_dtor("S20382C5", this);}
void  S20382C5 ::v30(){vfunc_called(this, "_ZN8S20382C53v30Ev");}
void  S20382C5 ::v31(){vfunc_called(this, "_ZN8S20382C53v31Ev");}
S20382C5 ::S20382C5(){ note_ctor("S20382C5", this);} // tgen

static void Test_S20382C5()
{
  extern Class_Descriptor cd_S20382C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[9];
    init_test(&cd_S20382C5, buf);
    S20382C5 *dp, &lv = *(dp=new (buf) S20382C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S20382C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20382C5)");
    check_base_class_offset(lv, (S20382C2*)(S20382C6*), ABISELECT(8,4), "S20382C5");
    check_base_class_offset(lv, (S20382C3*)(S20382C6*), ABISELECT(32,16), "S20382C5");
    check_base_class_offset(lv, (S20382C6*), ABISELECT(8,4), "S20382C5");
    check_base_class_offset(lv, (S20382C7*), ABISELECT(40,20), "S20382C5");
    test_class_info(&lv, &cd_S20382C5);
    dp->~S20382C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20382C5(Test_S20382C5, "S20382C5", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN8S20382C5C1Ev();
extern void _ZN8S20382C5D2Ev();
Name_Map name_map_S20382C5[] = {
  NSPAIR(_ZN8S20382C5C1Ev),
  NSPAIR(_ZN8S20382C5D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20382C2;
extern VTBL_ENTRY _ZTI8S20382C2[];
extern  VTBL_ENTRY _ZTV8S20382C2[];
extern Class_Descriptor cd_S20382C3;
extern VTBL_ENTRY _ZTI8S20382C3[];
extern  VTBL_ENTRY _ZTV8S20382C3[];
extern Class_Descriptor cd_S20382C6;
extern VTBL_ENTRY _ZTI8S20382C6[];
extern  VTBL_ENTRY _ZTV8S20382C6[];
extern Class_Descriptor cd_S20382C7;
extern VTBL_ENTRY _ZTI8S20382C7[];
extern  VTBL_ENTRY _ZTV8S20382C7[];
static Base_Class bases_S20382C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20382C2,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20382C3,    ABISELECT(32,16), //bcp->offset
    41, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20382C6,    ABISELECT(8,4), //bcp->offset
    8, //bcp->virtual_function_table_offset
    20, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20382C7,    ABISELECT(40,20), //bcp->offset
    51, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20382C5[];
extern void _ZN8S20382C5D1Ev();
extern void _ZN8S20382C5D0Ev();
extern void _ZN8S20382C53v30Ev();
extern void _ZN8S20382C53v31Ev();
extern void _ZN8S20382C22v8Ev();
extern void _ZN8S20382C22v9Ev();
extern void _ZN8S20382C23v10Ev();
extern void _ZN8S20382C23v11Ev();
extern void _ZN8S20382C23v12Ev();
extern void _ZN8S20382C23v13Ev();
extern void ABISELECT(_ZTv0_n72_N8S20382C5D1Ev,_ZTv0_n36_N8S20382C5D1Ev)();
extern void ABISELECT(_ZThn8_N8S20382C5D1Ev,_ZThn4_N8S20382C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S20382C5D0Ev,_ZTv0_n36_N8S20382C5D0Ev)();
extern void ABISELECT(_ZThn8_N8S20382C5D0Ev,_ZThn4_N8S20382C5D0Ev)() __attribute__((weak));
extern void _ZN8S20382C63v20Ev();
extern void _ZN8S20382C63v21Ev();
extern void _ZN8S20382C63v22Ev();
extern void _ZN8S20382C63v23Ev();
extern void _ZN8S20382C63v24Ev();
extern void ABISELECT(_ZTvn24_n72_N8S20382C5D1Ev,_ZTvn12_n36_N8S20382C5D1Ev)();
extern void ABISELECT(_ZTvn24_n72_N8S20382C5D0Ev,_ZTvn12_n36_N8S20382C5D0Ev)();
extern void _ZN8S20382C33v14Ev();
extern void _ZN8S20382C33v15Ev();
extern void _ZN8S20382C33v16Ev();
extern void _ZN8S20382C33v17Ev();
extern void _ZN8S20382C33v18Ev();
extern void _ZN8S20382C33v19Ev();
extern void _ZN8S20382C73v25Ev();
extern void _ZN8S20382C73v26Ev();
extern void _ZN8S20382C73v27Ev();
extern void _ZN8S20382C73v28Ev();
extern void _ZN8S20382C73v29Ev();
static  VTBL_ENTRY vtc_S20382C5[] = {
  ABISELECT(40,20),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20382C5[0]),
  (VTBL_ENTRY)&_ZN8S20382C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20382C5D0Ev,
  (VTBL_ENTRY)&_ZN8S20382C53v30Ev,
  (VTBL_ENTRY)&_ZN8S20382C53v31Ev,
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20382C5[0]),
  (VTBL_ENTRY)&_ZN8S20382C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20382C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20382C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20382C23v11Ev,
  (VTBL_ENTRY)&_ZN8S20382C23v12Ev,
  (VTBL_ENTRY)&_ZN8S20382C23v13Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20382C5D1Ev,_ZTv0_n36_N8S20382C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20382C5D0Ev,_ZTv0_n36_N8S20382C5D0Ev),
  (VTBL_ENTRY)&_ZN8S20382C63v20Ev,
  (VTBL_ENTRY)&_ZN8S20382C63v21Ev,
  (VTBL_ENTRY)&_ZN8S20382C63v22Ev,
  (VTBL_ENTRY)&_ZN8S20382C63v23Ev,
  (VTBL_ENTRY)&_ZN8S20382C63v24Ev,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S20382C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N8S20382C5D1Ev,_ZTvn12_n36_N8S20382C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N8S20382C5D0Ev,_ZTvn12_n36_N8S20382C5D0Ev),
  (VTBL_ENTRY)&_ZN8S20382C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20382C33v15Ev,
  (VTBL_ENTRY)&_ZN8S20382C33v16Ev,
  (VTBL_ENTRY)&_ZN8S20382C33v17Ev,
  (VTBL_ENTRY)&_ZN8S20382C33v18Ev,
  (VTBL_ENTRY)&_ZN8S20382C33v19Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S20382C5[0]),
  (VTBL_ENTRY)&_ZN8S20382C73v25Ev,
  (VTBL_ENTRY)&_ZN8S20382C73v26Ev,
  (VTBL_ENTRY)&_ZN8S20382C73v27Ev,
  (VTBL_ENTRY)&_ZN8S20382C73v28Ev,
  (VTBL_ENTRY)&_ZN8S20382C73v29Ev,
};
extern VTBL_ENTRY _ZTV8S20382C5[];
static  VTT_ENTRY vtt_S20382C5[] = {
  {&(_ZTV8S20382C5[4]),  4,63},
  {&(_ZTV8S20382C5[28]),  28,63},
  {&(_ZTV8S20382C5[43]),  43,63},
  {&(_ZTV8S20382C5[58]),  58,63},
};
extern VTBL_ENTRY _ZTI8S20382C5[];
extern  VTBL_ENTRY _ZTV8S20382C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20382C5[];
static VTBL_ENTRY alt_thunk_names31[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20382C5D0Ev,_ZTv0_n36_N8S20382C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20382C5D0Ev,_ZThn4_N8S20382C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20382C5D1Ev,_ZTv0_n36_N8S20382C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20382C5D1Ev,_ZThn4_N8S20382C5D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20382C5 = {  "S20382C5", // class name
  bases_S20382C5, 4,
  &(vtc_S20382C5[0]), // expected_vtbl_contents
  &(vtt_S20382C5[0]), // expected_vtt_contents
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI8S20382C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20382C5),63, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20382C5),4, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names31,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20382C4  : S20382C5 , S20382C6 {
  ::S20382C3 s20382c4f0[6];
  int s20382c4f1;
  virtual  ~S20382C4(); // _ZN8S20382C4D2Ev
  virtual void  v32(); // _ZN8S20382C43v32Ev
  virtual void  v33(); // _ZN8S20382C43v33Ev
  S20382C4(); // tgen
};
//SIG(-1 S20382C4) C1{ BC2{ VBC3{ BC4{ v3 v4 v5 v6 v7 v8 FC5{ vd v9 v10 v11 v12 v13 v14} Fi} BC5 vd v15 v16 v17 v18 v19} VBC6{ v20 v21 v22 v23 v24 FC7{} Fp} vd v25 v26} BC3 vd v1 v2 FC5[6] Fi}


 S20382C4 ::~S20382C4(){ note_dtor("S20382C4", this);}
void  S20382C4 ::v32(){vfunc_called(this, "_ZN8S20382C43v32Ev");}
void  S20382C4 ::v33(){vfunc_called(this, "_ZN8S20382C43v33Ev");}
S20382C4 ::S20382C4(){ note_ctor("S20382C4", this);} // tgen

static void Test_S20382C4()
{
  extern Class_Descriptor cd_S20382C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[20];
    init_test(&cd_S20382C4, buf);
    S20382C4 *dp, &lv = *(dp=new (buf) S20382C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,76), "sizeof(S20382C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20382C4)");
    /*is_ambiguous_... S20382C4::S20382C6 */ AMB_check_base_class_offset(lv, (S20382C2*)(S20382C6*), ABISELECT(96,48), "S20382C4");
    /*is_ambiguous_... S20382C4::S20382C6 */ AMB_check_base_class_offset(lv, (S20382C3*)(S20382C6*), ABISELECT(120,60), "S20382C4");
    check_base_class_offset(lv, (S20382C6*)(S20382C5*), ABISELECT(96,48), "S20382C4");
    check_base_class_offset(lv, (S20382C7*)(S20382C5*), ABISELECT(128,64), "S20382C4");
    check_base_class_offset(lv, (S20382C5*), 0, "S20382C4");
    /*is_ambiguous_... S20382C4::S20382C6 */ AMB_check_base_class_offset(lv, (S20382C2*)(S20382C6*), ABISELECT(8,4), "S20382C4");
    /*is_ambiguous_... S20382C4::S20382C6 */ AMB_check_base_class_offset(lv, (S20382C3*)(S20382C6*), ABISELECT(32,16), "S20382C4");
    /*is_ambiguous_... S20382C4::S20382C6 */ AMB_check_base_class_offset(lv, (S20382C6*), ABISELECT(8,4), "S20382C4");
    check_field_offset(lv, s20382c4f0, ABISELECT(40,20), "S20382C4.s20382c4f0");
    check_field_offset(lv, s20382c4f1, ABISELECT(88,44), "S20382C4.s20382c4f1");
    test_class_info(&lv, &cd_S20382C4);
    dp->~S20382C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20382C4(Test_S20382C4, "S20382C4", ABISELECT(152,76));

#else // __cplusplus

extern void _ZN8S20382C4C1Ev();
extern void _ZN8S20382C4D2Ev();
Name_Map name_map_S20382C4[] = {
  NSPAIR(_ZN8S20382C4C1Ev),
  NSPAIR(_ZN8S20382C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20382C2;
extern VTBL_ENTRY _ZTI8S20382C2[];
extern  VTBL_ENTRY _ZTV8S20382C2[];
extern Class_Descriptor cd_S20382C3;
extern VTBL_ENTRY _ZTI8S20382C3[];
extern  VTBL_ENTRY _ZTV8S20382C3[];
extern Class_Descriptor cd_S20382C6;
extern VTBL_ENTRY _ZTI8S20382C6[];
extern  VTBL_ENTRY _ZTV8S20382C6[];
extern Class_Descriptor cd_S20382C7;
extern VTBL_ENTRY _ZTI8S20382C7[];
extern  VTBL_ENTRY _ZTV8S20382C7[];
extern Class_Descriptor cd_S20382C5;
extern VTBL_ENTRY _ZTI8S20382C5[];
extern  VTBL_ENTRY _ZTV8S20382C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20382C5[];
extern Class_Descriptor cd_S20382C2;
extern VTBL_ENTRY _ZTI8S20382C2[];
extern  VTBL_ENTRY _ZTV8S20382C2[];
extern Class_Descriptor cd_S20382C3;
extern VTBL_ENTRY _ZTI8S20382C3[];
extern  VTBL_ENTRY _ZTV8S20382C3[];
extern Class_Descriptor cd_S20382C6;
extern VTBL_ENTRY _ZTI8S20382C6[];
extern  VTBL_ENTRY _ZTV8S20382C6[];
static Base_Class bases_S20382C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20382C2,    ABISELECT(96,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20382C3,    ABISELECT(120,60), //bcp->offset
    68, //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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20382C6,    ABISELECT(96,48), //bcp->offset
    35, //bcp->virtual_function_table_offset
    20, //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
    4, //immediately_derived
  0, 1},
  {&cd_S20382C7,    ABISELECT(128,64), //bcp->offset
    78, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20382C5,    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_S20382C2,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20382C3,    ABISELECT(32,16), //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
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20382C6,    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
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20382C4[];
extern void _ZN8S20382C4D1Ev();
extern void _ZN8S20382C4D0Ev();
extern void _ZN8S20382C53v30Ev();
extern void _ZN8S20382C53v31Ev();
extern void _ZN8S20382C43v32Ev();
extern void _ZN8S20382C43v33Ev();
extern void _ZN8S20382C22v8Ev();
extern void _ZN8S20382C22v9Ev();
extern void _ZN8S20382C23v10Ev();
extern void _ZN8S20382C23v11Ev();
extern void _ZN8S20382C23v12Ev();
extern void _ZN8S20382C23v13Ev();
extern void ABISELECT(_ZThn8_N8S20382C4D1Ev,_ZThn4_N8S20382C4D1Ev)();
extern void ABISELECT(_ZThn8_N8S20382C4D0Ev,_ZThn4_N8S20382C4D0Ev)();
extern void _ZN8S20382C63v20Ev();
extern void _ZN8S20382C63v21Ev();
extern void _ZN8S20382C63v22Ev();
extern void _ZN8S20382C63v23Ev();
extern void _ZN8S20382C63v24Ev();
extern void ABISELECT(_ZThn32_N8S20382C4D1Ev,_ZThn16_N8S20382C4D1Ev)();
extern void ABISELECT(_ZThn32_N8S20382C4D0Ev,_ZThn16_N8S20382C4D0Ev)();
extern void _ZN8S20382C33v14Ev();
extern void _ZN8S20382C33v15Ev();
extern void _ZN8S20382C33v16Ev();
extern void _ZN8S20382C33v17Ev();
extern void _ZN8S20382C33v18Ev();
extern void _ZN8S20382C33v19Ev();
extern void _ZN8S20382C22v8Ev();
extern void _ZN8S20382C22v9Ev();
extern void _ZN8S20382C23v10Ev();
extern void _ZN8S20382C23v11Ev();
extern void _ZN8S20382C23v12Ev();
extern void _ZN8S20382C23v13Ev();
extern void ABISELECT(_ZTv0_n72_N8S20382C4D1Ev,_ZTv0_n36_N8S20382C4D1Ev)();
extern void ABISELECT(_ZThn96_N8S20382C4D1Ev,_ZThn48_N8S20382C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S20382C4D0Ev,_ZTv0_n36_N8S20382C4D0Ev)();
extern void ABISELECT(_ZThn96_N8S20382C4D0Ev,_ZThn48_N8S20382C4D0Ev)() __attribute__((weak));
extern void _ZN8S20382C63v20Ev();
extern void _ZN8S20382C63v21Ev();
extern void _ZN8S20382C63v22Ev();
extern void _ZN8S20382C63v23Ev();
extern void _ZN8S20382C63v24Ev();
extern void ABISELECT(_ZTvn24_n72_N8S20382C4D1Ev,_ZTvn12_n36_N8S20382C4D1Ev)();
extern void ABISELECT(_ZTvn24_n72_N8S20382C4D0Ev,_ZTvn12_n36_N8S20382C4D0Ev)();
extern void _ZN8S20382C33v14Ev();
extern void _ZN8S20382C33v15Ev();
extern void _ZN8S20382C33v16Ev();
extern void _ZN8S20382C33v17Ev();
extern void _ZN8S20382C33v18Ev();
extern void _ZN8S20382C33v19Ev();
extern void _ZN8S20382C73v25Ev();
extern void _ZN8S20382C73v26Ev();
extern void _ZN8S20382C73v27Ev();
extern void _ZN8S20382C73v28Ev();
extern void _ZN8S20382C73v29Ev();
static  VTBL_ENTRY vtc_S20382C4[] = {
  ABISELECT(128,64),
  ABISELECT(96,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S20382C4[0]),
  (VTBL_ENTRY)&_ZN8S20382C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20382C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20382C53v30Ev,
  (VTBL_ENTRY)&_ZN8S20382C53v31Ev,
  (VTBL_ENTRY)&_ZN8S20382C43v32Ev,
  (VTBL_ENTRY)&_ZN8S20382C43v33Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20382C4[0]),
  (VTBL_ENTRY)&_ZN8S20382C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20382C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20382C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20382C23v11Ev,
  (VTBL_ENTRY)&_ZN8S20382C23v12Ev,
  (VTBL_ENTRY)&_ZN8S20382C23v13Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S20382C4D1Ev,_ZThn4_N8S20382C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S20382C4D0Ev,_ZThn4_N8S20382C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20382C63v20Ev,
  (VTBL_ENTRY)&_ZN8S20382C63v21Ev,
  (VTBL_ENTRY)&_ZN8S20382C63v22Ev,
  (VTBL_ENTRY)&_ZN8S20382C63v23Ev,
  (VTBL_ENTRY)&_ZN8S20382C63v24Ev,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S20382C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S20382C4D1Ev,_ZThn16_N8S20382C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S20382C4D0Ev,_ZThn16_N8S20382C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20382C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20382C33v15Ev,
  (VTBL_ENTRY)&_ZN8S20382C33v16Ev,
  (VTBL_ENTRY)&_ZN8S20382C33v17Ev,
  (VTBL_ENTRY)&_ZN8S20382C33v18Ev,
  (VTBL_ENTRY)&_ZN8S20382C33v19Ev,
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-96,-48),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-96,-48),
  (VTBL_ENTRY)&(_ZTI8S20382C4[0]),
  (VTBL_ENTRY)&_ZN8S20382C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20382C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20382C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20382C23v11Ev,
  (VTBL_ENTRY)&_ZN8S20382C23v12Ev,
  (VTBL_ENTRY)&_ZN8S20382C23v13Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20382C4D1Ev,_ZTv0_n36_N8S20382C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20382C4D0Ev,_ZTv0_n36_N8S20382C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20382C63v20Ev,
  (VTBL_ENTRY)&_ZN8S20382C63v21Ev,
  (VTBL_ENTRY)&_ZN8S20382C63v22Ev,
  (VTBL_ENTRY)&_ZN8S20382C63v23Ev,
  (VTBL_ENTRY)&_ZN8S20382C63v24Ev,
  ABISELECT(-120,-60),
  (VTBL_ENTRY)&(_ZTI8S20382C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N8S20382C4D1Ev,_ZTvn12_n36_N8S20382C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N8S20382C4D0Ev,_ZTvn12_n36_N8S20382C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20382C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20382C33v15Ev,
  (VTBL_ENTRY)&_ZN8S20382C33v16Ev,
  (VTBL_ENTRY)&_ZN8S20382C33v17Ev,
  (VTBL_ENTRY)&_ZN8S20382C33v18Ev,
  (VTBL_ENTRY)&_ZN8S20382C33v19Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-128,-64),
  (VTBL_ENTRY)&(_ZTI8S20382C4[0]),
  (VTBL_ENTRY)&_ZN8S20382C73v25Ev,
  (VTBL_ENTRY)&_ZN8S20382C73v26Ev,
  (VTBL_ENTRY)&_ZN8S20382C73v27Ev,
  (VTBL_ENTRY)&_ZN8S20382C73v28Ev,
  (VTBL_ENTRY)&_ZN8S20382C73v29Ev,
};
extern VTBL_ENTRY _ZTV8S20382C4[];
extern void _ZN8S20382C5D1Ev();
extern void _ZN8S20382C5D0Ev();
extern void _ZN8S20382C53v30Ev();
extern void _ZN8S20382C53v31Ev();
static  VTBL_ENTRY _tg__ZTV8S20382C5__8S20382C4[] = {
  ABISELECT(128,64),
  ABISELECT(96,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S20382C5[0]),
  (VTBL_ENTRY)&_ZN8S20382C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20382C5D0Ev,
  (VTBL_ENTRY)&_ZN8S20382C53v30Ev,
  (VTBL_ENTRY)&_ZN8S20382C53v31Ev,
};
extern void _ZN8S20382C22v8Ev();
extern void _ZN8S20382C22v9Ev();
extern void _ZN8S20382C23v10Ev();
extern void _ZN8S20382C23v11Ev();
extern void _ZN8S20382C23v12Ev();
extern void _ZN8S20382C23v13Ev();
extern void ABISELECT(_ZTv0_n72_N8S20382C5D1Ev,_ZTv0_n36_N8S20382C5D1Ev)();
extern void ABISELECT(_ZThn96_N8S20382C5D1Ev,_ZThn48_N8S20382C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S20382C5D0Ev,_ZTv0_n36_N8S20382C5D0Ev)();
extern void ABISELECT(_ZThn96_N8S20382C5D0Ev,_ZThn48_N8S20382C5D0Ev)() __attribute__((weak));
extern void _ZN8S20382C63v20Ev();
extern void _ZN8S20382C63v21Ev();
extern void _ZN8S20382C63v22Ev();
extern void _ZN8S20382C63v23Ev();
extern void _ZN8S20382C63v24Ev();
static  VTBL_ENTRY _tg__ZTV8S20382C6__8S20382C5__8S20382C4[] = {
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-96,-48),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-96,-48),
  (VTBL_ENTRY)&(_ZTI8S20382C5[0]),
  (VTBL_ENTRY)&_ZN8S20382C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20382C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20382C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20382C23v11Ev,
  (VTBL_ENTRY)&_ZN8S20382C23v12Ev,
  (VTBL_ENTRY)&_ZN8S20382C23v13Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20382C5D1Ev,_ZTv0_n36_N8S20382C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20382C5D0Ev,_ZTv0_n36_N8S20382C5D0Ev),
  (VTBL_ENTRY)&_ZN8S20382C63v20Ev,
  (VTBL_ENTRY)&_ZN8S20382C63v21Ev,
  (VTBL_ENTRY)&_ZN8S20382C63v22Ev,
  (VTBL_ENTRY)&_ZN8S20382C63v23Ev,
  (VTBL_ENTRY)&_ZN8S20382C63v24Ev,
};
extern void ABISELECT(_ZTvn24_n72_N8S20382C5D1Ev,_ZTvn12_n36_N8S20382C5D1Ev)();
extern void ABISELECT(_ZTvn24_n72_N8S20382C5D0Ev,_ZTvn12_n36_N8S20382C5D0Ev)();
extern void _ZN8S20382C33v14Ev();
extern void _ZN8S20382C33v15Ev();
extern void _ZN8S20382C33v16Ev();
extern void _ZN8S20382C33v17Ev();
extern void _ZN8S20382C33v18Ev();
extern void _ZN8S20382C33v19Ev();
static  VTBL_ENTRY _tg__ZTV8S20382C38S20382C6__8S20382C5__8S20382C4[] = {
  ABISELECT(-120,-60),
  (VTBL_ENTRY)&(_ZTI8S20382C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N8S20382C5D1Ev,_ZTvn12_n36_N8S20382C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N8S20382C5D0Ev,_ZTvn12_n36_N8S20382C5D0Ev),
  (VTBL_ENTRY)&_ZN8S20382C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20382C33v15Ev,
  (VTBL_ENTRY)&_ZN8S20382C33v16Ev,
  (VTBL_ENTRY)&_ZN8S20382C33v17Ev,
  (VTBL_ENTRY)&_ZN8S20382C33v18Ev,
  (VTBL_ENTRY)&_ZN8S20382C33v19Ev,
};
extern void _ZN8S20382C73v25Ev();
extern void _ZN8S20382C73v26Ev();
extern void _ZN8S20382C73v27Ev();
extern void _ZN8S20382C73v28Ev();
extern void _ZN8S20382C73v29Ev();
static  VTBL_ENTRY _tg__ZTV8S20382C7__8S20382C5__8S20382C4[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-128,-64),
  (VTBL_ENTRY)&(_ZTI8S20382C5[0]),
  (VTBL_ENTRY)&_ZN8S20382C73v25Ev,
  (VTBL_ENTRY)&_ZN8S20382C73v26Ev,
  (VTBL_ENTRY)&_ZN8S20382C73v27Ev,
  (VTBL_ENTRY)&_ZN8S20382C73v28Ev,
  (VTBL_ENTRY)&_ZN8S20382C73v29Ev,
};
static  VTT_ENTRY vtt_S20382C4[] = {
  {&(_ZTV8S20382C4[4]),  4,90},
  {&(_tg__ZTV8S20382C5__8S20382C4[4]),  4,8},
  {&(_tg__ZTV8S20382C6__8S20382C5__8S20382C4[20]),  20,33},
  {&(_tg__ZTV8S20382C38S20382C6__8S20382C5__8S20382C4[2]),  2,10},
  {&(_tg__ZTV8S20382C7__8S20382C5__8S20382C4[7]),  7,12},
  {&(_ZTV8S20382C4[55]),  55,90},
  {&(_ZTV8S20382C4[70]),  70,90},
  {&(_ZTV8S20382C4[85]),  85,90},
};
extern VTBL_ENTRY _ZTI8S20382C4[];
extern  VTBL_ENTRY _ZTV8S20382C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20382C4[];
static VTBL_ENTRY alt_thunk_names32[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20382C5D0Ev,_ZTv0_n36_N8S20382C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S20382C5D0Ev,_ZThn48_N8S20382C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20382C5D1Ev,_ZTv0_n36_N8S20382C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S20382C5D1Ev,_ZThn48_N8S20382C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20382C4D0Ev,_ZTv0_n36_N8S20382C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S20382C4D0Ev,_ZThn48_N8S20382C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20382C4D1Ev,_ZTv0_n36_N8S20382C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S20382C4D1Ev,_ZThn48_N8S20382C4D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20382C4 = {  "S20382C4", // class name
  bases_S20382C4, 8,
  &(vtc_S20382C4[0]), // expected_vtbl_contents
  &(vtt_S20382C4[0]), // expected_vtt_contents
  ABISELECT(152,76), // object size
  NSPAIRA(_ZTI8S20382C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20382C4),90, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20382C4),8, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names32,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20382C1  : virtual S20382C2 , S20382C4 {
  __tsi64 s20382c1f0[3];
  virtual  ~S20382C1(); // _ZN8S20382C1D2Ev
  virtual void  v1(); // _ZN8S20382C12v1Ev
  virtual void  v2(); // _ZN8S20382C12v2Ev
  virtual void  v3(); // _ZN8S20382C12v3Ev
  virtual void  v4(); // _ZN8S20382C12v4Ev
  virtual void  v5(); // _ZN8S20382C12v5Ev
  virtual void  v6(); // _ZN8S20382C12v6Ev
  virtual void  v7(); // _ZN8S20382C12v7Ev
  S20382C1(); // tgen
};
//SIG(1 S20382C1) C1{ VBC2{ v8 v9 v10 v11 v12 v13 FC3{ vd v14 v15 v16 v17 v18 v19} Fi} BC4{ BC5{ VBC6{ BC2 BC3 vd v20 v21 v22 v23 v24} VBC7{ v25 v26 v27 v28 v29 FC8{} Fp} vd v30 v31} BC6 vd v32 v33 FC3[6] Fi} vd v1 v2 v3 v4 v5 v6 v7 FL[3]}


 S20382C1 ::~S20382C1(){ note_dtor("S20382C1", this);}
void  S20382C1 ::v1(){vfunc_called(this, "_ZN8S20382C12v1Ev");}
void  S20382C1 ::v2(){vfunc_called(this, "_ZN8S20382C12v2Ev");}
void  S20382C1 ::v3(){vfunc_called(this, "_ZN8S20382C12v3Ev");}
void  S20382C1 ::v4(){vfunc_called(this, "_ZN8S20382C12v4Ev");}
void  S20382C1 ::v5(){vfunc_called(this, "_ZN8S20382C12v5Ev");}
void  S20382C1 ::v6(){vfunc_called(this, "_ZN8S20382C12v6Ev");}
void  S20382C1 ::v7(){vfunc_called(this, "_ZN8S20382C12v7Ev");}
S20382C1 ::S20382C1(){ note_ctor("S20382C1", this);} // tgen

static void Test_S20382C1()
{
  extern Class_Descriptor cd_S20382C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(26,29)];
    init_test(&cd_S20382C1, buf);
    S20382C1 *dp, &lv = *(dp=new (buf) S20382C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(200,112), "sizeof(S20382C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20382C1)");
    /*is_ambiguous_... S20382C1::S20382C2 */ AMB_check_base_class_offset(lv, (S20382C2*), ABISELECT(120,72), "S20382C1");
    /*is_ambiguous_... S20382C1::S20382C6 */ AMB_check_base_class_offset(lv, (S20382C2*)(S20382C6*), ABISELECT(144,84), "S20382C1");
    /*is_ambiguous_... S20382C1::S20382C6 */ AMB_check_base_class_offset(lv, (S20382C3*)(S20382C6*), ABISELECT(168,96), "S20382C1");
    check_base_class_offset(lv, (S20382C6*)(S20382C5*)(S20382C4*), ABISELECT(144,84), "S20382C1");
    check_base_class_offset(lv, (S20382C7*)(S20382C5*)(S20382C4*), ABISELECT(176,100), "S20382C1");
    check_base_class_offset(lv, (S20382C5*)(S20382C4*), 0, "S20382C1");
    /*is_ambiguous_... S20382C4::S20382C6 */ AMB_check_base_class_offset(lv, (S20382C2*)(S20382C6*)(S20382C4*), ABISELECT(8,4), "S20382C1");
    /*is_ambiguous_... S20382C4::S20382C6 */ AMB_check_base_class_offset(lv, (S20382C3*)(S20382C6*)(S20382C4*), ABISELECT(32,16), "S20382C1");
    /*is_ambiguous_... S20382C4::S20382C6 */ AMB_check_base_class_offset(lv, (S20382C6*)(S20382C4*), ABISELECT(8,4), "S20382C1");
    check_base_class_offset(lv, (S20382C4*), 0, "S20382C1");
    check_field_offset(lv, s20382c1f0, ABISELECT(96,48), "S20382C1.s20382c1f0");
    test_class_info(&lv, &cd_S20382C1);
    dp->~S20382C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20382C1(Test_S20382C1, "S20382C1", ABISELECT(200,112));

#else // __cplusplus

extern void _ZN8S20382C1C1Ev();
extern void _ZN8S20382C1D2Ev();
Name_Map name_map_S20382C1[] = {
  NSPAIR(_ZN8S20382C1C1Ev),
  NSPAIR(_ZN8S20382C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20382C2;
extern VTBL_ENTRY _ZTI8S20382C2[];
extern  VTBL_ENTRY _ZTV8S20382C2[];
extern Class_Descriptor cd_S20382C2;
extern VTBL_ENTRY _ZTI8S20382C2[];
extern  VTBL_ENTRY _ZTV8S20382C2[];
extern Class_Descriptor cd_S20382C3;
extern VTBL_ENTRY _ZTI8S20382C3[];
extern  VTBL_ENTRY _ZTV8S20382C3[];
extern Class_Descriptor cd_S20382C6;
extern VTBL_ENTRY _ZTI8S20382C6[];
extern  VTBL_ENTRY _ZTV8S20382C6[];
extern Class_Descriptor cd_S20382C7;
extern VTBL_ENTRY _ZTI8S20382C7[];
extern  VTBL_ENTRY _ZTV8S20382C7[];
extern Class_Descriptor cd_S20382C5;
extern VTBL_ENTRY _ZTI8S20382C5[];
extern  VTBL_ENTRY _ZTV8S20382C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20382C5[];
extern Class_Descriptor cd_S20382C2;
extern VTBL_ENTRY _ZTI8S20382C2[];
extern  VTBL_ENTRY _ZTV8S20382C2[];
extern Class_Descriptor cd_S20382C3;
extern VTBL_ENTRY _ZTI8S20382C3[];
extern  VTBL_ENTRY _ZTV8S20382C3[];
extern Class_Descriptor cd_S20382C6;
extern VTBL_ENTRY _ZTI8S20382C6[];
extern  VTBL_ENTRY _ZTV8S20382C6[];
extern Class_Descriptor cd_S20382C4;
extern VTBL_ENTRY _ZTI8S20382C4[];
extern  VTBL_ENTRY _ZTV8S20382C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20382C4[];
static Base_Class bases_S20382C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20382C2,    ABISELECT(120,72), //bcp->offset
    43, //bcp->virtual_function_table_offset
    8, //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_S20382C2,    ABISELECT(144,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
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20382C3,    ABISELECT(168,96), //bcp->offset
    90, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20382C6,    ABISELECT(144,84), //bcp->offset
    57, //bcp->virtual_function_table_offset
    20, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20382C7,    ABISELECT(176,100), //bcp->offset
    100, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20382C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20382C2,    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
    7, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20382C3,    ABISELECT(32,16), //bcp->offset
    33, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20382C6,    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
    9, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20382C4,    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},
  {0}};
extern VTBL_ENTRY _ZTI8S20382C1[];
extern void _ZN8S20382C1D1Ev();
extern void _ZN8S20382C1D0Ev();
extern void _ZN8S20382C53v30Ev();
extern void _ZN8S20382C53v31Ev();
extern void _ZN8S20382C43v32Ev();
extern void _ZN8S20382C43v33Ev();
extern void _ZN8S20382C12v1Ev();
extern void _ZN8S20382C12v2Ev();
extern void _ZN8S20382C12v3Ev();
extern void _ZN8S20382C12v4Ev();
extern void _ZN8S20382C12v5Ev();
extern void _ZN8S20382C12v6Ev();
extern void _ZN8S20382C12v7Ev();
extern void _ZN8S20382C22v8Ev();
extern void _ZN8S20382C22v9Ev();
extern void _ZN8S20382C23v10Ev();
extern void _ZN8S20382C23v11Ev();
extern void _ZN8S20382C23v12Ev();
extern void _ZN8S20382C23v13Ev();
extern void ABISELECT(_ZThn8_N8S20382C1D1Ev,_ZThn4_N8S20382C1D1Ev)();
extern void ABISELECT(_ZThn8_N8S20382C1D0Ev,_ZThn4_N8S20382C1D0Ev)();
extern void _ZN8S20382C63v20Ev();
extern void _ZN8S20382C63v21Ev();
extern void _ZN8S20382C63v22Ev();
extern void _ZN8S20382C63v23Ev();
extern void _ZN8S20382C63v24Ev();
extern void ABISELECT(_ZThn32_N8S20382C1D1Ev,_ZThn16_N8S20382C1D1Ev)();
extern void ABISELECT(_ZThn32_N8S20382C1D0Ev,_ZThn16_N8S20382C1D0Ev)();
extern void _ZN8S20382C33v14Ev();
extern void _ZN8S20382C33v15Ev();
extern void _ZN8S20382C33v16Ev();
extern void _ZN8S20382C33v17Ev();
extern void _ZN8S20382C33v18Ev();
extern void _ZN8S20382C33v19Ev();
extern void _ZN8S20382C22v8Ev();
extern void _ZN8S20382C22v9Ev();
extern void _ZN8S20382C23v10Ev();
extern void _ZN8S20382C23v11Ev();
extern void _ZN8S20382C23v12Ev();
extern void _ZN8S20382C23v13Ev();
extern void _ZN8S20382C22v8Ev();
extern void _ZN8S20382C22v9Ev();
extern void _ZN8S20382C23v10Ev();
extern void _ZN8S20382C23v11Ev();
extern void _ZN8S20382C23v12Ev();
extern void _ZN8S20382C23v13Ev();
extern void ABISELECT(_ZTv0_n72_N8S20382C1D1Ev,_ZTv0_n36_N8S20382C1D1Ev)();
extern void ABISELECT(_ZThn144_N8S20382C1D1Ev,_ZThn84_N8S20382C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S20382C1D0Ev,_ZTv0_n36_N8S20382C1D0Ev)();
extern void ABISELECT(_ZThn144_N8S20382C1D0Ev,_ZThn84_N8S20382C1D0Ev)() __attribute__((weak));
extern void _ZN8S20382C63v20Ev();
extern void _ZN8S20382C63v21Ev();
extern void _ZN8S20382C63v22Ev();
extern void _ZN8S20382C63v23Ev();
extern void _ZN8S20382C63v24Ev();
extern void ABISELECT(_ZTvn24_n72_N8S20382C1D1Ev,_ZTvn12_n36_N8S20382C1D1Ev)();
extern void ABISELECT(_ZTvn24_n72_N8S20382C1D0Ev,_ZTvn12_n36_N8S20382C1D0Ev)();
extern void _ZN8S20382C33v14Ev();
extern void _ZN8S20382C33v15Ev();
extern void _ZN8S20382C33v16Ev();
extern void _ZN8S20382C33v17Ev();
extern void _ZN8S20382C33v18Ev();
extern void _ZN8S20382C33v19Ev();
extern void _ZN8S20382C73v25Ev();
extern void _ZN8S20382C73v26Ev();
extern void _ZN8S20382C73v27Ev();
extern void _ZN8S20382C73v28Ev();
extern void _ZN8S20382C73v29Ev();
static  VTBL_ENTRY vtc_S20382C1[] = {
  ABISELECT(120,72),
  ABISELECT(176,100),
  ABISELECT(144,84),
  0,
  (VTBL_ENTRY)&(_ZTI8S20382C1[0]),
  (VTBL_ENTRY)&_ZN8S20382C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20382C1D0Ev,
  (VTBL_ENTRY)&_ZN8S20382C53v30Ev,
  (VTBL_ENTRY)&_ZN8S20382C53v31Ev,
  (VTBL_ENTRY)&_ZN8S20382C43v32Ev,
  (VTBL_ENTRY)&_ZN8S20382C43v33Ev,
  (VTBL_ENTRY)&_ZN8S20382C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20382C12v2Ev,
  (VTBL_ENTRY)&_ZN8S20382C12v3Ev,
  (VTBL_ENTRY)&_ZN8S20382C12v4Ev,
  (VTBL_ENTRY)&_ZN8S20382C12v5Ev,
  (VTBL_ENTRY)&_ZN8S20382C12v6Ev,
  (VTBL_ENTRY)&_ZN8S20382C12v7Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20382C1[0]),
  (VTBL_ENTRY)&_ZN8S20382C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20382C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20382C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20382C23v11Ev,
  (VTBL_ENTRY)&_ZN8S20382C23v12Ev,
  (VTBL_ENTRY)&_ZN8S20382C23v13Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S20382C1D1Ev,_ZThn4_N8S20382C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S20382C1D0Ev,_ZThn4_N8S20382C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20382C63v20Ev,
  (VTBL_ENTRY)&_ZN8S20382C63v21Ev,
  (VTBL_ENTRY)&_ZN8S20382C63v22Ev,
  (VTBL_ENTRY)&_ZN8S20382C63v23Ev,
  (VTBL_ENTRY)&_ZN8S20382C63v24Ev,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S20382C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S20382C1D1Ev,_ZThn16_N8S20382C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N8S20382C1D0Ev,_ZThn16_N8S20382C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20382C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20382C33v15Ev,
  (VTBL_ENTRY)&_ZN8S20382C33v16Ev,
  (VTBL_ENTRY)&_ZN8S20382C33v17Ev,
  (VTBL_ENTRY)&_ZN8S20382C33v18Ev,
  (VTBL_ENTRY)&_ZN8S20382C33v19Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-120,-72),
  (VTBL_ENTRY)&(_ZTI8S20382C1[0]),
  (VTBL_ENTRY)&_ZN8S20382C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20382C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20382C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20382C23v11Ev,
  (VTBL_ENTRY)&_ZN8S20382C23v12Ev,
  (VTBL_ENTRY)&_ZN8S20382C23v13Ev,
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-144,-84),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-144,-84),
  (VTBL_ENTRY)&(_ZTI8S20382C1[0]),
  (VTBL_ENTRY)&_ZN8S20382C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20382C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20382C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20382C23v11Ev,
  (VTBL_ENTRY)&_ZN8S20382C23v12Ev,
  (VTBL_ENTRY)&_ZN8S20382C23v13Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20382C1D1Ev,_ZTv0_n36_N8S20382C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20382C1D0Ev,_ZTv0_n36_N8S20382C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20382C63v20Ev,
  (VTBL_ENTRY)&_ZN8S20382C63v21Ev,
  (VTBL_ENTRY)&_ZN8S20382C63v22Ev,
  (VTBL_ENTRY)&_ZN8S20382C63v23Ev,
  (VTBL_ENTRY)&_ZN8S20382C63v24Ev,
  ABISELECT(-168,-96),
  (VTBL_ENTRY)&(_ZTI8S20382C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N8S20382C1D1Ev,_ZTvn12_n36_N8S20382C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N8S20382C1D0Ev,_ZTvn12_n36_N8S20382C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20382C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20382C33v15Ev,
  (VTBL_ENTRY)&_ZN8S20382C33v16Ev,
  (VTBL_ENTRY)&_ZN8S20382C33v17Ev,
  (VTBL_ENTRY)&_ZN8S20382C33v18Ev,
  (VTBL_ENTRY)&_ZN8S20382C33v19Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-176,-100),
  (VTBL_ENTRY)&(_ZTI8S20382C1[0]),
  (VTBL_ENTRY)&_ZN8S20382C73v25Ev,
  (VTBL_ENTRY)&_ZN8S20382C73v26Ev,
  (VTBL_ENTRY)&_ZN8S20382C73v27Ev,
  (VTBL_ENTRY)&_ZN8S20382C73v28Ev,
  (VTBL_ENTRY)&_ZN8S20382C73v29Ev,
};
extern VTBL_ENTRY _ZTV8S20382C1[];
extern void _ZN8S20382C4D1Ev();
extern void _ZN8S20382C4D0Ev();
extern void _ZN8S20382C53v30Ev();
extern void _ZN8S20382C53v31Ev();
extern void _ZN8S20382C43v32Ev();
extern void _ZN8S20382C43v33Ev();
static  VTBL_ENTRY _tg__ZTV8S20382C4__8S20382C1[] = {
  ABISELECT(176,100),
  ABISELECT(144,84),
  0,
  (VTBL_ENTRY)&(_ZTI8S20382C4[0]),
  (VTBL_ENTRY)&_ZN8S20382C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20382C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20382C53v30Ev,
  (VTBL_ENTRY)&_ZN8S20382C53v31Ev,
  (VTBL_ENTRY)&_ZN8S20382C43v32Ev,
  (VTBL_ENTRY)&_ZN8S20382C43v33Ev,
};
extern void _ZN8S20382C5D1Ev();
extern void _ZN8S20382C5D0Ev();
extern void _ZN8S20382C53v30Ev();
extern void _ZN8S20382C53v31Ev();
static  VTBL_ENTRY _tg__ZTV8S20382C58S20382C4__8S20382C1[] = {
  ABISELECT(176,100),
  ABISELECT(144,84),
  0,
  (VTBL_ENTRY)&(_ZTI8S20382C5[0]),
  (VTBL_ENTRY)&_ZN8S20382C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20382C5D0Ev,
  (VTBL_ENTRY)&_ZN8S20382C53v30Ev,
  (VTBL_ENTRY)&_ZN8S20382C53v31Ev,
};
extern void _ZN8S20382C22v8Ev();
extern void _ZN8S20382C22v9Ev();
extern void _ZN8S20382C23v10Ev();
extern void _ZN8S20382C23v11Ev();
extern void _ZN8S20382C23v12Ev();
extern void _ZN8S20382C23v13Ev();
extern void ABISELECT(_ZTv0_n72_N8S20382C5D1Ev,_ZTv0_n36_N8S20382C5D1Ev)();
extern void ABISELECT(_ZThn144_N8S20382C5D1Ev,_ZThn84_N8S20382C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S20382C5D0Ev,_ZTv0_n36_N8S20382C5D0Ev)();
extern void ABISELECT(_ZThn144_N8S20382C5D0Ev,_ZThn84_N8S20382C5D0Ev)() __attribute__((weak));
extern void _ZN8S20382C63v20Ev();
extern void _ZN8S20382C63v21Ev();
extern void _ZN8S20382C63v22Ev();
extern void _ZN8S20382C63v23Ev();
extern void _ZN8S20382C63v24Ev();
static  VTBL_ENTRY _tg__ZTV8S20382C6__8S20382C58S20382C4__8S20382C1[] = {
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-144,-84),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-144,-84),
  (VTBL_ENTRY)&(_ZTI8S20382C5[0]),
  (VTBL_ENTRY)&_ZN8S20382C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20382C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20382C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20382C23v11Ev,
  (VTBL_ENTRY)&_ZN8S20382C23v12Ev,
  (VTBL_ENTRY)&_ZN8S20382C23v13Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20382C5D1Ev,_ZTv0_n36_N8S20382C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20382C5D0Ev,_ZTv0_n36_N8S20382C5D0Ev),
  (VTBL_ENTRY)&_ZN8S20382C63v20Ev,
  (VTBL_ENTRY)&_ZN8S20382C63v21Ev,
  (VTBL_ENTRY)&_ZN8S20382C63v22Ev,
  (VTBL_ENTRY)&_ZN8S20382C63v23Ev,
  (VTBL_ENTRY)&_ZN8S20382C63v24Ev,
};
extern void ABISELECT(_ZTvn24_n72_N8S20382C5D1Ev,_ZTvn12_n36_N8S20382C5D1Ev)();
extern void ABISELECT(_ZTvn24_n72_N8S20382C5D0Ev,_ZTvn12_n36_N8S20382C5D0Ev)();
extern void _ZN8S20382C33v14Ev();
extern void _ZN8S20382C33v15Ev();
extern void _ZN8S20382C33v16Ev();
extern void _ZN8S20382C33v17Ev();
extern void _ZN8S20382C33v18Ev();
extern void _ZN8S20382C33v19Ev();
static  VTBL_ENTRY _tg__ZTV8S20382C38S20382C6__8S20382C58S20382C4__8S20382C1[] = {
  ABISELECT(-168,-96),
  (VTBL_ENTRY)&(_ZTI8S20382C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N8S20382C5D1Ev,_ZTvn12_n36_N8S20382C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N8S20382C5D0Ev,_ZTvn12_n36_N8S20382C5D0Ev),
  (VTBL_ENTRY)&_ZN8S20382C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20382C33v15Ev,
  (VTBL_ENTRY)&_ZN8S20382C33v16Ev,
  (VTBL_ENTRY)&_ZN8S20382C33v17Ev,
  (VTBL_ENTRY)&_ZN8S20382C33v18Ev,
  (VTBL_ENTRY)&_ZN8S20382C33v19Ev,
};
extern void _ZN8S20382C73v25Ev();
extern void _ZN8S20382C73v26Ev();
extern void _ZN8S20382C73v27Ev();
extern void _ZN8S20382C73v28Ev();
extern void _ZN8S20382C73v29Ev();
static  VTBL_ENTRY _tg__ZTV8S20382C7__8S20382C58S20382C4__8S20382C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-176,-100),
  (VTBL_ENTRY)&(_ZTI8S20382C5[0]),
  (VTBL_ENTRY)&_ZN8S20382C73v25Ev,
  (VTBL_ENTRY)&_ZN8S20382C73v26Ev,
  (VTBL_ENTRY)&_ZN8S20382C73v27Ev,
  (VTBL_ENTRY)&_ZN8S20382C73v28Ev,
  (VTBL_ENTRY)&_ZN8S20382C73v29Ev,
};
extern void _ZN8S20382C22v8Ev();
extern void _ZN8S20382C22v9Ev();
extern void _ZN8S20382C23v10Ev();
extern void _ZN8S20382C23v11Ev();
extern void _ZN8S20382C23v12Ev();
extern void _ZN8S20382C23v13Ev();
extern void ABISELECT(_ZTv0_n72_N8S20382C4D1Ev,_ZTv0_n36_N8S20382C4D1Ev)();
extern void ABISELECT(_ZThn144_N8S20382C4D1Ev,_ZThn84_N8S20382C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S20382C4D0Ev,_ZTv0_n36_N8S20382C4D0Ev)();
extern void ABISELECT(_ZThn144_N8S20382C4D0Ev,_ZThn84_N8S20382C4D0Ev)() __attribute__((weak));
extern void _ZN8S20382C63v20Ev();
extern void _ZN8S20382C63v21Ev();
extern void _ZN8S20382C63v22Ev();
extern void _ZN8S20382C63v23Ev();
extern void _ZN8S20382C63v24Ev();
static  VTBL_ENTRY _tg__ZTV8S20382C6__8S20382C4__8S20382C1[] = {
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-144,-84),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-144,-84),
  (VTBL_ENTRY)&(_ZTI8S20382C4[0]),
  (VTBL_ENTRY)&_ZN8S20382C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20382C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20382C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20382C23v11Ev,
  (VTBL_ENTRY)&_ZN8S20382C23v12Ev,
  (VTBL_ENTRY)&_ZN8S20382C23v13Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20382C4D1Ev,_ZTv0_n36_N8S20382C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20382C4D0Ev,_ZTv0_n36_N8S20382C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20382C63v20Ev,
  (VTBL_ENTRY)&_ZN8S20382C63v21Ev,
  (VTBL_ENTRY)&_ZN8S20382C63v22Ev,
  (VTBL_ENTRY)&_ZN8S20382C63v23Ev,
  (VTBL_ENTRY)&_ZN8S20382C63v24Ev,
};
extern void ABISELECT(_ZTvn24_n72_N8S20382C4D1Ev,_ZTvn12_n36_N8S20382C4D1Ev)();
extern void ABISELECT(_ZTvn24_n72_N8S20382C4D0Ev,_ZTvn12_n36_N8S20382C4D0Ev)();
extern void _ZN8S20382C33v14Ev();
extern void _ZN8S20382C33v15Ev();
extern void _ZN8S20382C33v16Ev();
extern void _ZN8S20382C33v17Ev();
extern void _ZN8S20382C33v18Ev();
extern void _ZN8S20382C33v19Ev();
static  VTBL_ENTRY _tg__ZTV8S20382C38S20382C6__8S20382C4__8S20382C1[] = {
  ABISELECT(-168,-96),
  (VTBL_ENTRY)&(_ZTI8S20382C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N8S20382C4D1Ev,_ZTvn12_n36_N8S20382C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N8S20382C4D0Ev,_ZTvn12_n36_N8S20382C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20382C33v14Ev,
  (VTBL_ENTRY)&_ZN8S20382C33v15Ev,
  (VTBL_ENTRY)&_ZN8S20382C33v16Ev,
  (VTBL_ENTRY)&_ZN8S20382C33v17Ev,
  (VTBL_ENTRY)&_ZN8S20382C33v18Ev,
  (VTBL_ENTRY)&_ZN8S20382C33v19Ev,
};
extern void _ZN8S20382C73v25Ev();
extern void _ZN8S20382C73v26Ev();
extern void _ZN8S20382C73v27Ev();
extern void _ZN8S20382C73v28Ev();
extern void _ZN8S20382C73v29Ev();
static  VTBL_ENTRY _tg__ZTV8S20382C7__8S20382C4__8S20382C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-176,-100),
  (VTBL_ENTRY)&(_ZTI8S20382C4[0]),
  (VTBL_ENTRY)&_ZN8S20382C73v25Ev,
  (VTBL_ENTRY)&_ZN8S20382C73v26Ev,
  (VTBL_ENTRY)&_ZN8S20382C73v27Ev,
  (VTBL_ENTRY)&_ZN8S20382C73v28Ev,
  (VTBL_ENTRY)&_ZN8S20382C73v29Ev,
};
static  VTT_ENTRY vtt_S20382C1[] = {
  {&(_ZTV8S20382C1[5]),  5,112},
  {&(_tg__ZTV8S20382C4__8S20382C1[4]),  4,10},
  {&(_tg__ZTV8S20382C58S20382C4__8S20382C1[4]),  4,8},
  {&(_tg__ZTV8S20382C6__8S20382C58S20382C4__8S20382C1[20]),  20,33},
  {&(_tg__ZTV8S20382C38S20382C6__8S20382C58S20382C4__8S20382C1[2]),  2,10},
  {&(_tg__ZTV8S20382C7__8S20382C58S20382C4__8S20382C1[7]),  7,12},
  {&(_tg__ZTV8S20382C6__8S20382C4__8S20382C1[20]),  20,33},
  {&(_tg__ZTV8S20382C38S20382C6__8S20382C4__8S20382C1[2]),  2,10},
  {&(_tg__ZTV8S20382C7__8S20382C4__8S20382C1[7]),  7,12},
  {&(_ZTV8S20382C1[51]),  51,112},
  {&(_ZTV8S20382C1[77]),  77,112},
  {&(_ZTV8S20382C1[92]),  92,112},
  {&(_ZTV8S20382C1[107]),  107,112},
};
extern VTBL_ENTRY _ZTI8S20382C1[];
extern  VTBL_ENTRY _ZTV8S20382C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20382C1[];
static VTBL_ENTRY alt_thunk_names33[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20382C4D0Ev,_ZTv0_n36_N8S20382C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S20382C4D0Ev,_ZThn84_N8S20382C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20382C4D1Ev,_ZTv0_n36_N8S20382C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S20382C4D1Ev,_ZThn84_N8S20382C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20382C5D0Ev,_ZTv0_n36_N8S20382C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S20382C5D0Ev,_ZThn84_N8S20382C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20382C5D1Ev,_ZTv0_n36_N8S20382C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S20382C5D1Ev,_ZThn84_N8S20382C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20382C1D0Ev,_ZTv0_n36_N8S20382C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S20382C1D0Ev,_ZThn84_N8S20382C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20382C1D1Ev,_ZTv0_n36_N8S20382C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S20382C1D1Ev,_ZThn84_N8S20382C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20382C1 = {  "S20382C1", // class name
  bases_S20382C1, 10,
  &(vtc_S20382C1[0]), // expected_vtbl_contents
  &(vtt_S20382C1[0]), // expected_vtt_contents
  ABISELECT(200,112), // object size
  NSPAIRA(_ZTI8S20382C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20382C1),112, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20382C1),13, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names33,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2249C4  {
  ::S2428C5 s2249c4f0;
  void *s2249c4f1;
  __tsi64 s2249c4f2;
  int s2249c4f3;
  void *s2249c4f4;
  virtual  ~S2249C4(); // _ZN7S2249C4D1Ev
  virtual void  v4(); // _ZN7S2249C42v4Ev
  virtual void  v5(); // _ZN7S2249C42v5Ev
  virtual void  v6(); // _ZN7S2249C42v6Ev
  virtual void  v7(); // _ZN7S2249C42v7Ev
  S2249C4(); // tgen
};
//SIG(-1 S2249C4) C1{ vd v1 v2 v3 v4 FC2{ m FC3{ m FC4{ m Fp Fi FC5{ m}} FC4 FL} FL Fi Fc[2] FC4 Fp Fi FC4[9] FC4 FC4 Fi FC4 FC4 FC4 Fi[4]} Fp FL Fi Fp}


 S2249C4 ::~S2249C4(){ note_dtor("S2249C4", this);}
void  S2249C4 ::v4(){vfunc_called(this, "_ZN7S2249C42v4Ev");}
void  S2249C4 ::v5(){vfunc_called(this, "_ZN7S2249C42v5Ev");}
void  S2249C4 ::v6(){vfunc_called(this, "_ZN7S2249C42v6Ev");}
void  S2249C4 ::v7(){vfunc_called(this, "_ZN7S2249C42v7Ev");}
S2249C4 ::S2249C4(){ note_ctor("S2249C4", this);} // tgen

static void Test_S2249C4()
{
  extern Class_Descriptor cd_S2249C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(48,71)];
    init_test(&cd_S2249C4, buf);
    S2249C4 *dp, &lv = *(dp=new (buf) S2249C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(376,280), "sizeof(S2249C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2249C4)");
    check_field_offset(lv, s2249c4f0, ABISELECT(8,4), "S2249C4.s2249c4f0");
    check_field_offset(lv, s2249c4f1, ABISELECT(344,260), "S2249C4.s2249c4f1");
    check_field_offset(lv, s2249c4f2, ABISELECT(352,264), "S2249C4.s2249c4f2");
    check_field_offset(lv, s2249c4f3, ABISELECT(360,272), "S2249C4.s2249c4f3");
    check_field_offset(lv, s2249c4f4, ABISELECT(368,276), "S2249C4.s2249c4f4");
    test_class_info(&lv, &cd_S2249C4);
    dp->~S2249C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2249C4(Test_S2249C4, "S2249C4", ABISELECT(376,280));

#else // __cplusplus

extern void _ZN7S2249C4C1Ev();
extern void _ZN7S2249C4D1Ev();
Name_Map name_map_S2249C4[] = {
  NSPAIR(_ZN7S2249C4C1Ev),
  NSPAIR(_ZN7S2249C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2249C4[];
extern void _ZN7S2249C4D1Ev();
extern void _ZN7S2249C4D0Ev();
extern void _ZN7S2249C42v4Ev();
extern void _ZN7S2249C42v5Ev();
extern void _ZN7S2249C42v6Ev();
extern void _ZN7S2249C42v7Ev();
static  VTBL_ENTRY vtc_S2249C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2249C4[0]),
  (VTBL_ENTRY)&_ZN7S2249C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2249C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2249C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2249C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2249C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2249C42v7Ev,
};
extern VTBL_ENTRY _ZTI7S2249C4[];
extern  VTBL_ENTRY _ZTV7S2249C4[];
Class_Descriptor cd_S2249C4 = {  "S2249C4", // class name
  0,0,//no base classes
  &(vtc_S2249C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(376,280), // object size
  NSPAIRA(_ZTI7S2249C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2249C4),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  S2249C3  : S2249C4 {
  void *s2249c3f0;
  virtual  ~S2249C3(); // _ZN7S2249C3D1Ev
  virtual void  v8(); // _ZN7S2249C32v8Ev
  virtual void  v9(); // _ZN7S2249C32v9Ev
  virtual void  v10(); // _ZN7S2249C33v10Ev
  virtual void  v11(); // _ZN7S2249C33v11Ev
  virtual void  v12(); // _ZN7S2249C33v12Ev
  virtual void  v13(); // _ZN7S2249C33v13Ev
  virtual void  v14(); // _ZN7S2249C33v14Ev
  virtual void  v15(); // _ZN7S2249C33v15Ev
  virtual void  v16(); // _ZN7S2249C33v16Ev
  S2249C3(); // tgen
};
//SIG(-1 S2249C3) C1{ BC2{ vd v10 v11 v12 v13 FC3{ m FC4{ m FC5{ m Fp Fi FC6{ m}} FC5 FL} FL Fi Fc[2] FC5 Fp Fi FC5[9] FC5 FC5 Fi FC5 FC5 FC5 Fi[4]} Fp FL Fi Fp} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 Fp}


 S2249C3 ::~S2249C3(){ note_dtor("S2249C3", this);}
void  S2249C3 ::v8(){vfunc_called(this, "_ZN7S2249C32v8Ev");}
void  S2249C3 ::v9(){vfunc_called(this, "_ZN7S2249C32v9Ev");}
void  S2249C3 ::v10(){vfunc_called(this, "_ZN7S2249C33v10Ev");}
void  S2249C3 ::v11(){vfunc_called(this, "_ZN7S2249C33v11Ev");}
void  S2249C3 ::v12(){vfunc_called(this, "_ZN7S2249C33v12Ev");}
void  S2249C3 ::v13(){vfunc_called(this, "_ZN7S2249C33v13Ev");}
void  S2249C3 ::v14(){vfunc_called(this, "_ZN7S2249C33v14Ev");}
void  S2249C3 ::v15(){vfunc_called(this, "_ZN7S2249C33v15Ev");}
void  S2249C3 ::v16(){vfunc_called(this, "_ZN7S2249C33v16Ev");}
S2249C3 ::S2249C3(){ note_ctor("S2249C3", this);} // tgen

static void Test_S2249C3()
{
  extern Class_Descriptor cd_S2249C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(49,72)];
    init_test(&cd_S2249C3, buf);
    S2249C3 *dp, &lv = *(dp=new (buf) S2249C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(384,284), "sizeof(S2249C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2249C3)");
    check_base_class_offset(lv, (S2249C4*), 0, "S2249C3");
    check_field_offset(lv, s2249c3f0, ABISELECT(376,280), "S2249C3.s2249c3f0");
    test_class_info(&lv, &cd_S2249C3);
    dp->~S2249C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2249C3(Test_S2249C3, "S2249C3", ABISELECT(384,284));

#else // __cplusplus

extern void _ZN7S2249C3C1Ev();
extern void _ZN7S2249C3D1Ev();
Name_Map name_map_S2249C3[] = {
  NSPAIR(_ZN7S2249C3C1Ev),
  NSPAIR(_ZN7S2249C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2249C4;
extern VTBL_ENTRY _ZTI7S2249C4[];
extern  VTBL_ENTRY _ZTV7S2249C4[];
static Base_Class bases_S2249C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2249C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2249C3[];
extern void _ZN7S2249C3D1Ev();
extern void _ZN7S2249C3D0Ev();
extern void _ZN7S2249C42v4Ev();
extern void _ZN7S2249C42v5Ev();
extern void _ZN7S2249C42v6Ev();
extern void _ZN7S2249C42v7Ev();
extern void _ZN7S2249C32v8Ev();
extern void _ZN7S2249C32v9Ev();
extern void _ZN7S2249C33v10Ev();
extern void _ZN7S2249C33v11Ev();
extern void _ZN7S2249C33v12Ev();
extern void _ZN7S2249C33v13Ev();
extern void _ZN7S2249C33v14Ev();
extern void _ZN7S2249C33v15Ev();
extern void _ZN7S2249C33v16Ev();
static  VTBL_ENTRY vtc_S2249C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2249C3[0]),
  (VTBL_ENTRY)&_ZN7S2249C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2249C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2249C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2249C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2249C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2249C42v7Ev,
  (VTBL_ENTRY)&_ZN7S2249C32v8Ev,
  (VTBL_ENTRY)&_ZN7S2249C32v9Ev,
  (VTBL_ENTRY)&_ZN7S2249C33v10Ev,
  (VTBL_ENTRY)&_ZN7S2249C33v11Ev,
  (VTBL_ENTRY)&_ZN7S2249C33v12Ev,
  (VTBL_ENTRY)&_ZN7S2249C33v13Ev,
  (VTBL_ENTRY)&_ZN7S2249C33v14Ev,
  (VTBL_ENTRY)&_ZN7S2249C33v15Ev,
  (VTBL_ENTRY)&_ZN7S2249C33v16Ev,
};
extern VTBL_ENTRY _ZTI7S2249C3[];
extern  VTBL_ENTRY _ZTV7S2249C3[];
Class_Descriptor cd_S2249C3 = {  "S2249C3", // class name
  bases_S2249C3, 1,
  &(vtc_S2249C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(384,284), // object size
  NSPAIRA(_ZTI7S2249C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2249C3),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2249C2  : S2249C3 {
  virtual void  v17(); // _ZN7S2249C23v17Ev
  virtual void  v18(); // _ZN7S2249C23v18Ev
  virtual void  v19(); // _ZN7S2249C23v19Ev
  virtual void  v20(); // _ZN7S2249C23v20Ev
  ~S2249C2(); // tgen
  S2249C2(); // tgen
};
//SIG(-1 S2249C2) C1{ BC2{ BC3{ vd v5 v6 v7 v8 FC4{ m FC5{ m FC6{ m Fp Fi FC7{ m}} FC6 FL} FL Fi Fc[2] FC6 Fp Fi FC6[9] FC6 FC6 Fi FC6 FC6 FC6 Fi[4]} Fp FL Fi Fp} vd v9 v10 v11 v12 v13 v14 v15 v16 v17 Fp} v1 v2 v3 v4}


void  S2249C2 ::v17(){vfunc_called(this, "_ZN7S2249C23v17Ev");}
void  S2249C2 ::v18(){vfunc_called(this, "_ZN7S2249C23v18Ev");}
void  S2249C2 ::v19(){vfunc_called(this, "_ZN7S2249C23v19Ev");}
void  S2249C2 ::v20(){vfunc_called(this, "_ZN7S2249C23v20Ev");}
S2249C2 ::~S2249C2(){ note_dtor("S2249C2", this);} // tgen
S2249C2 ::S2249C2(){ note_ctor("S2249C2", this);} // tgen

static void Test_S2249C2()
{
  extern Class_Descriptor cd_S2249C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(49,72)];
    init_test(&cd_S2249C2, buf);
    S2249C2 *dp, &lv = *(dp=new (buf) S2249C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(384,284), "sizeof(S2249C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2249C2)");
    check_base_class_offset(lv, (S2249C4*)(S2249C3*), 0, "S2249C2");
    check_base_class_offset(lv, (S2249C3*), 0, "S2249C2");
    test_class_info(&lv, &cd_S2249C2);
    dp->~S2249C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2249C2(Test_S2249C2, "S2249C2", ABISELECT(384,284));

#else // __cplusplus

extern void _ZN7S2249C2C1Ev();
extern void _ZN7S2249C2D1Ev();
Name_Map name_map_S2249C2[] = {
  NSPAIR(_ZN7S2249C2C1Ev),
  NSPAIR(_ZN7S2249C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2249C4;
extern VTBL_ENTRY _ZTI7S2249C4[];
extern  VTBL_ENTRY _ZTV7S2249C4[];
extern Class_Descriptor cd_S2249C3;
extern VTBL_ENTRY _ZTI7S2249C3[];
extern  VTBL_ENTRY _ZTV7S2249C3[];
static Base_Class bases_S2249C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2249C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2249C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S2249C2[];
extern void _ZN7S2249C2D1Ev();
extern void _ZN7S2249C2D0Ev();
extern void _ZN7S2249C42v4Ev();
extern void _ZN7S2249C42v5Ev();
extern void _ZN7S2249C42v6Ev();
extern void _ZN7S2249C42v7Ev();
extern void _ZN7S2249C32v8Ev();
extern void _ZN7S2249C32v9Ev();
extern void _ZN7S2249C33v10Ev();
extern void _ZN7S2249C33v11Ev();
extern void _ZN7S2249C33v12Ev();
extern void _ZN7S2249C33v13Ev();
extern void _ZN7S2249C33v14Ev();
extern void _ZN7S2249C33v15Ev();
extern void _ZN7S2249C33v16Ev();
extern void _ZN7S2249C23v17Ev();
extern void _ZN7S2249C23v18Ev();
extern void _ZN7S2249C23v19Ev();
extern void _ZN7S2249C23v20Ev();
static  VTBL_ENTRY vtc_S2249C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2249C2[0]),
  (VTBL_ENTRY)&_ZN7S2249C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2249C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2249C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2249C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2249C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2249C42v7Ev,
  (VTBL_ENTRY)&_ZN7S2249C32v8Ev,
  (VTBL_ENTRY)&_ZN7S2249C32v9Ev,
  (VTBL_ENTRY)&_ZN7S2249C33v10Ev,
  (VTBL_ENTRY)&_ZN7S2249C33v11Ev,
  (VTBL_ENTRY)&_ZN7S2249C33v12Ev,
  (VTBL_ENTRY)&_ZN7S2249C33v13Ev,
  (VTBL_ENTRY)&_ZN7S2249C33v14Ev,
  (VTBL_ENTRY)&_ZN7S2249C33v15Ev,
  (VTBL_ENTRY)&_ZN7S2249C33v16Ev,
  (VTBL_ENTRY)&_ZN7S2249C23v17Ev,
  (VTBL_ENTRY)&_ZN7S2249C23v18Ev,
  (VTBL_ENTRY)&_ZN7S2249C23v19Ev,
  (VTBL_ENTRY)&_ZN7S2249C23v20Ev,
};
extern VTBL_ENTRY _ZTI7S2249C2[];
extern  VTBL_ENTRY _ZTV7S2249C2[];
Class_Descriptor cd_S2249C2 = {  "S2249C2", // class name
  bases_S2249C2, 2,
  &(vtc_S2249C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(384,284), // object size
  NSPAIRA(_ZTI7S2249C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2249C2),21, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2249C1  : S2249C2 {
  virtual void  v1(); // _ZN7S2249C12v1Ev
  virtual void  v2(); // _ZN7S2249C12v2Ev
  virtual void  v3(); // _ZN7S2249C12v3Ev
  ~S2249C1(); // tgen
  S2249C1(); // tgen
};
//SIG(1 S2249C1) C1{ BC2{ BC3{ BC4{ vd v4 v5 v6 v7 FC5{ m FC6{ m FC7{ m Fp Fi FC8{ m}} FC7 FL} FL Fi Fc[2] FC7 Fp Fi FC7[9] FC7 FC7 Fi FC7 FC7 FC7 Fi[4]} Fp FL Fi Fp} vd v8 v9 v10 v11 v12 v13 v14 v15 v16 Fp} v17 v18 v19 v20} v1 v2 v3}


void  S2249C1 ::v1(){vfunc_called(this, "_ZN7S2249C12v1Ev");}
void  S2249C1 ::v2(){vfunc_called(this, "_ZN7S2249C12v2Ev");}
void  S2249C1 ::v3(){vfunc_called(this, "_ZN7S2249C12v3Ev");}
S2249C1 ::~S2249C1(){ note_dtor("S2249C1", this);} // tgen
S2249C1 ::S2249C1(){ note_ctor("S2249C1", this);} // tgen

static void Test_S2249C1()
{
  extern Class_Descriptor cd_S2249C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(49,72)];
    init_test(&cd_S2249C1, buf);
    S2249C1 *dp, &lv = *(dp=new (buf) S2249C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(384,284), "sizeof(S2249C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2249C1)");
    check_base_class_offset(lv, (S2249C4*)(S2249C3*)(S2249C2*), 0, "S2249C1");
    check_base_class_offset(lv, (S2249C3*)(S2249C2*), 0, "S2249C1");
    check_base_class_offset(lv, (S2249C2*), 0, "S2249C1");
    test_class_info(&lv, &cd_S2249C1);
    dp->~S2249C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2249C1(Test_S2249C1, "S2249C1", ABISELECT(384,284));

#else // __cplusplus

extern void _ZN7S2249C1C1Ev();
extern void _ZN7S2249C1D1Ev();
Name_Map name_map_S2249C1[] = {
  NSPAIR(_ZN7S2249C1C1Ev),
  NSPAIR(_ZN7S2249C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2249C4;
extern VTBL_ENTRY _ZTI7S2249C4[];
extern  VTBL_ENTRY _ZTV7S2249C4[];
extern Class_Descriptor cd_S2249C3;
extern VTBL_ENTRY _ZTI7S2249C3[];
extern  VTBL_ENTRY _ZTV7S2249C3[];
extern Class_Descriptor cd_S2249C2;
extern VTBL_ENTRY _ZTI7S2249C2[];
extern  VTBL_ENTRY _ZTV7S2249C2[];
static Base_Class bases_S2249C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2249C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2249C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2249C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S2249C1[];
extern void _ZN7S2249C1D1Ev();
extern void _ZN7S2249C1D0Ev();
extern void _ZN7S2249C42v4Ev();
extern void _ZN7S2249C42v5Ev();
extern void _ZN7S2249C42v6Ev();
extern void _ZN7S2249C42v7Ev();
extern void _ZN7S2249C32v8Ev();
extern void _ZN7S2249C32v9Ev();
extern void _ZN7S2249C33v10Ev();
extern void _ZN7S2249C33v11Ev();
extern void _ZN7S2249C33v12Ev();
extern void _ZN7S2249C33v13Ev();
extern void _ZN7S2249C33v14Ev();
extern void _ZN7S2249C33v15Ev();
extern void _ZN7S2249C33v16Ev();
extern void _ZN7S2249C23v17Ev();
extern void _ZN7S2249C23v18Ev();
extern void _ZN7S2249C23v19Ev();
extern void _ZN7S2249C23v20Ev();
extern void _ZN7S2249C12v1Ev();
extern void _ZN7S2249C12v2Ev();
extern void _ZN7S2249C12v3Ev();
static  VTBL_ENTRY vtc_S2249C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2249C1[0]),
  (VTBL_ENTRY)&_ZN7S2249C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2249C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2249C42v4Ev,
  (VTBL_ENTRY)&_ZN7S2249C42v5Ev,
  (VTBL_ENTRY)&_ZN7S2249C42v6Ev,
  (VTBL_ENTRY)&_ZN7S2249C42v7Ev,
  (VTBL_ENTRY)&_ZN7S2249C32v8Ev,
  (VTBL_ENTRY)&_ZN7S2249C32v9Ev,
  (VTBL_ENTRY)&_ZN7S2249C33v10Ev,
  (VTBL_ENTRY)&_ZN7S2249C33v11Ev,
  (VTBL_ENTRY)&_ZN7S2249C33v12Ev,
  (VTBL_ENTRY)&_ZN7S2249C33v13Ev,
  (VTBL_ENTRY)&_ZN7S2249C33v14Ev,
  (VTBL_ENTRY)&_ZN7S2249C33v15Ev,
  (VTBL_ENTRY)&_ZN7S2249C33v16Ev,
  (VTBL_ENTRY)&_ZN7S2249C23v17Ev,
  (VTBL_ENTRY)&_ZN7S2249C23v18Ev,
  (VTBL_ENTRY)&_ZN7S2249C23v19Ev,
  (VTBL_ENTRY)&_ZN7S2249C23v20Ev,
  (VTBL_ENTRY)&_ZN7S2249C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2249C12v2Ev,
  (VTBL_ENTRY)&_ZN7S2249C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S2249C1[];
extern  VTBL_ENTRY _ZTV7S2249C1[];
Class_Descriptor cd_S2249C1 = {  "S2249C1", // class name
  bases_S2249C1, 3,
  &(vtc_S2249C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(384,284), // object size
  NSPAIRA(_ZTI7S2249C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2249C1),24, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6954C2  {
  ::S2120C13_nt s6954c2f0;
  ::S2120C13_nt s6954c2f1;
  void *s6954c2f2;
  int s6954c2f3;
  ::S601C8 s6954c2f4;
  int s6954c2f5:2;
  int s6954c2f6:2;
  unsigned char s6954c2f7:1;
  unsigned char s6954c2f8:1;
  ::S601C53 s6954c2f9;
  ::S11720C18 s6954c2f10[2];
  virtual  ~S6954C2(); // _ZN7S6954C2D1Ev
  virtual void  v5(); // _ZN7S6954C22v5Ev
  virtual void  v6(); // _ZN7S6954C22v6Ev
  virtual void  v7(); // _ZN7S6954C22v7Ev
  virtual void  v8(); // _ZN7S6954C22v8Ev
  virtual void  v9(); // _ZN7S6954C22v9Ev
  virtual void  v10(); // _ZN7S6954C23v10Ev
  virtual void  v11(); // _ZN7S6954C23v11Ev
  virtual void  v12(); // _ZN7S6954C23v12Ev
  virtual void  v13(); // _ZN7S6954C23v13Ev
  virtual void  v14(); // _ZN7S6954C23v14Ev
  virtual void  v15(); // _ZN7S6954C23v15Ev
  virtual void  v16(); // _ZN7S6954C23v16Ev
  virtual void  v17(); // _ZN7S6954C23v17Ev
  virtual void  v18(); // _ZN7S6954C23v18Ev
  virtual void  v19(); // _ZN7S6954C23v19Ev
  S6954C2(); // tgen
};
//SIG(-1 S6954C2) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 FC2{ m FC3{ m FL[2]}} FC2 Fp Fi FU4{ m FC5{ Fi:4 Fi:4 Fi:4 Fi:2 Fi:1 Fi:17} Fi} Fi:2 Fi:2 Fc:1 Fc:1 FC6{ m Fp Fp} FC7{ Fp Fp}[2]}


 S6954C2 ::~S6954C2(){ note_dtor("S6954C2", this);}
void  S6954C2 ::v5(){vfunc_called(this, "_ZN7S6954C22v5Ev");}
void  S6954C2 ::v6(){vfunc_called(this, "_ZN7S6954C22v6Ev");}
void  S6954C2 ::v7(){vfunc_called(this, "_ZN7S6954C22v7Ev");}
void  S6954C2 ::v8(){vfunc_called(this, "_ZN7S6954C22v8Ev");}
void  S6954C2 ::v9(){vfunc_called(this, "_ZN7S6954C22v9Ev");}
void  S6954C2 ::v10(){vfunc_called(this, "_ZN7S6954C23v10Ev");}
void  S6954C2 ::v11(){vfunc_called(this, "_ZN7S6954C23v11Ev");}
void  S6954C2 ::v12(){vfunc_called(this, "_ZN7S6954C23v12Ev");}
void  S6954C2 ::v13(){vfunc_called(this, "_ZN7S6954C23v13Ev");}
void  S6954C2 ::v14(){vfunc_called(this, "_ZN7S6954C23v14Ev");}
void  S6954C2 ::v15(){vfunc_called(this, "_ZN7S6954C23v15Ev");}
void  S6954C2 ::v16(){vfunc_called(this, "_ZN7S6954C23v16Ev");}
void  S6954C2 ::v17(){vfunc_called(this, "_ZN7S6954C23v17Ev");}
void  S6954C2 ::v18(){vfunc_called(this, "_ZN7S6954C23v18Ev");}
void  S6954C2 ::v19(){vfunc_called(this, "_ZN7S6954C23v19Ev");}
S6954C2 ::S6954C2(){ note_ctor("S6954C2", this);} // tgen

static void Test_S6954C2()
{
  extern Class_Descriptor cd_S6954C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,20)];
    init_test(&cd_S6954C2, buf);
    S6954C2 *dp, &lv = *(dp=new (buf) S6954C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,76), "sizeof(S6954C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6954C2)");
    check_field_offset(lv, s6954c2f0, ABISELECT(8,4), "S6954C2.s6954c2f0");
    check_field_offset(lv, s6954c2f1, ABISELECT(24,20), "S6954C2.s6954c2f1");
    check_field_offset(lv, s6954c2f2, ABISELECT(40,36), "S6954C2.s6954c2f2");
    check_field_offset(lv, s6954c2f3, ABISELECT(48,40), "S6954C2.s6954c2f3");
    check_field_offset(lv, s6954c2f4, ABISELECT(52,44), "S6954C2.s6954c2f4");
    set_bf_and_test(lv, s6954c2f5, ABISELECT(56,48), 0, 2, 1, "S6954C2");
    set_bf_and_test(lv, s6954c2f5, ABISELECT(56,48), 0, 2, hide_sll(1LL<<1), "S6954C2");
    set_bf_and_test(lv, s6954c2f6, ABISELECT(56,48), 2, 2, 1, "S6954C2");
    set_bf_and_test(lv, s6954c2f6, ABISELECT(56,48), 2, 2, hide_sll(1LL<<1), "S6954C2");
    set_bf_and_test(lv, s6954c2f7, ABISELECT(56,48), 4, 1, 1, "S6954C2");
    set_bf_and_test(lv, s6954c2f8, ABISELECT(56,48), 5, 1, 1, "S6954C2");
    check_field_offset(lv, s6954c2f9, ABISELECT(64,52), "S6954C2.s6954c2f9");
    check_field_offset(lv, s6954c2f10, ABISELECT(80,60), "S6954C2.s6954c2f10");
    test_class_info(&lv, &cd_S6954C2);
    dp->~S6954C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6954C2(Test_S6954C2, "S6954C2", ABISELECT(112,76));

#else // __cplusplus

extern void _ZN7S6954C2C1Ev();
extern void _ZN7S6954C2D1Ev();
Name_Map name_map_S6954C2[] = {
  NSPAIR(_ZN7S6954C2C1Ev),
  NSPAIR(_ZN7S6954C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6954C2[];
extern void _ZN7S6954C2D1Ev();
extern void _ZN7S6954C2D0Ev();
extern void _ZN7S6954C22v5Ev();
extern void _ZN7S6954C22v6Ev();
extern void _ZN7S6954C22v7Ev();
extern void _ZN7S6954C22v8Ev();
extern void _ZN7S6954C22v9Ev();
extern void _ZN7S6954C23v10Ev();
extern void _ZN7S6954C23v11Ev();
extern void _ZN7S6954C23v12Ev();
extern void _ZN7S6954C23v13Ev();
extern void _ZN7S6954C23v14Ev();
extern void _ZN7S6954C23v15Ev();
extern void _ZN7S6954C23v16Ev();
extern void _ZN7S6954C23v17Ev();
extern void _ZN7S6954C23v18Ev();
extern void _ZN7S6954C23v19Ev();
static  VTBL_ENTRY vtc_S6954C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6954C2[0]),
  (VTBL_ENTRY)&_ZN7S6954C2D1Ev,
  (VTBL_ENTRY)&_ZN7S6954C2D0Ev,
  (VTBL_ENTRY)&_ZN7S6954C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6954C22v6Ev,
  (VTBL_ENTRY)&_ZN7S6954C22v7Ev,
  (VTBL_ENTRY)&_ZN7S6954C22v8Ev,
  (VTBL_ENTRY)&_ZN7S6954C22v9Ev,
  (VTBL_ENTRY)&_ZN7S6954C23v10Ev,
  (VTBL_ENTRY)&_ZN7S6954C23v11Ev,
  (VTBL_ENTRY)&_ZN7S6954C23v12Ev,
  (VTBL_ENTRY)&_ZN7S6954C23v13Ev,
  (VTBL_ENTRY)&_ZN7S6954C23v14Ev,
  (VTBL_ENTRY)&_ZN7S6954C23v15Ev,
  (VTBL_ENTRY)&_ZN7S6954C23v16Ev,
  (VTBL_ENTRY)&_ZN7S6954C23v17Ev,
  (VTBL_ENTRY)&_ZN7S6954C23v18Ev,
  (VTBL_ENTRY)&_ZN7S6954C23v19Ev,
};
extern VTBL_ENTRY _ZTI7S6954C2[];
extern  VTBL_ENTRY _ZTV7S6954C2[];
Class_Descriptor cd_S6954C2 = {  "S6954C2", // class name
  0,0,//no base classes
  &(vtc_S6954C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,76), // object size
  NSPAIRA(_ZTI7S6954C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6954C2),19, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6954C1  : S6954C2 {
  void *s6954c1f0;
  virtual  ~S6954C1(); // _ZN7S6954C1D1Ev
  virtual void  v1(); // _ZN7S6954C12v1Ev
  virtual void  v2(); // _ZN7S6954C12v2Ev
  virtual void  v3(); // _ZN7S6954C12v3Ev
  virtual void  v4(); // _ZN7S6954C12v4Ev
  S6954C1(); // tgen
};
//SIG(1 S6954C1) C1{ BC2{ vd v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 FC3{ m FC4{ m FL[2]}} FC3 Fp Fi FU5{ m FC6{ Fi:4 Fi:4 Fi:4 Fi:2 Fi:1 Fi:17} Fi} Fi:2 Fi:2 Fc:1 Fc:1 FC7{ m Fp Fp} FC8{ Fp Fp}[2]} vd v1 v2 v3 v4 Fp}


 S6954C1 ::~S6954C1(){ note_dtor("S6954C1", this);}
void  S6954C1 ::v1(){vfunc_called(this, "_ZN7S6954C12v1Ev");}
void  S6954C1 ::v2(){vfunc_called(this, "_ZN7S6954C12v2Ev");}
void  S6954C1 ::v3(){vfunc_called(this, "_ZN7S6954C12v3Ev");}
void  S6954C1 ::v4(){vfunc_called(this, "_ZN7S6954C12v4Ev");}
S6954C1 ::S6954C1(){ note_ctor("S6954C1", this);} // tgen

static void Test_S6954C1()
{
  extern Class_Descriptor cd_S6954C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,21)];
    init_test(&cd_S6954C1, buf);
    S6954C1 *dp, &lv = *(dp=new (buf) S6954C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,80), "sizeof(S6954C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6954C1)");
    check_base_class_offset(lv, (S6954C2*), 0, "S6954C1");
    check_field_offset(lv, s6954c1f0, ABISELECT(112,76), "S6954C1.s6954c1f0");
    test_class_info(&lv, &cd_S6954C1);
    dp->~S6954C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6954C1(Test_S6954C1, "S6954C1", ABISELECT(120,80));

#else // __cplusplus

extern void _ZN7S6954C1C1Ev();
extern void _ZN7S6954C1D1Ev();
Name_Map name_map_S6954C1[] = {
  NSPAIR(_ZN7S6954C1C1Ev),
  NSPAIR(_ZN7S6954C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6954C2;
extern VTBL_ENTRY _ZTI7S6954C2[];
extern  VTBL_ENTRY _ZTV7S6954C2[];
static Base_Class bases_S6954C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6954C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6954C1[];
extern void _ZN7S6954C1D1Ev();
extern void _ZN7S6954C1D0Ev();
extern void _ZN7S6954C22v5Ev();
extern void _ZN7S6954C22v6Ev();
extern void _ZN7S6954C22v7Ev();
extern void _ZN7S6954C22v8Ev();
extern void _ZN7S6954C22v9Ev();
extern void _ZN7S6954C23v10Ev();
extern void _ZN7S6954C23v11Ev();
extern void _ZN7S6954C23v12Ev();
extern void _ZN7S6954C23v13Ev();
extern void _ZN7S6954C23v14Ev();
extern void _ZN7S6954C23v15Ev();
extern void _ZN7S6954C23v16Ev();
extern void _ZN7S6954C23v17Ev();
extern void _ZN7S6954C23v18Ev();
extern void _ZN7S6954C23v19Ev();
extern void _ZN7S6954C12v1Ev();
extern void _ZN7S6954C12v2Ev();
extern void _ZN7S6954C12v3Ev();
extern void _ZN7S6954C12v4Ev();
static  VTBL_ENTRY vtc_S6954C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6954C1[0]),
  (VTBL_ENTRY)&_ZN7S6954C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6954C1D0Ev,
  (VTBL_ENTRY)&_ZN7S6954C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6954C22v6Ev,
  (VTBL_ENTRY)&_ZN7S6954C22v7Ev,
  (VTBL_ENTRY)&_ZN7S6954C22v8Ev,
  (VTBL_ENTRY)&_ZN7S6954C22v9Ev,
  (VTBL_ENTRY)&_ZN7S6954C23v10Ev,
  (VTBL_ENTRY)&_ZN7S6954C23v11Ev,
  (VTBL_ENTRY)&_ZN7S6954C23v12Ev,
  (VTBL_ENTRY)&_ZN7S6954C23v13Ev,
  (VTBL_ENTRY)&_ZN7S6954C23v14Ev,
  (VTBL_ENTRY)&_ZN7S6954C23v15Ev,
  (VTBL_ENTRY)&_ZN7S6954C23v16Ev,
  (VTBL_ENTRY)&_ZN7S6954C23v17Ev,
  (VTBL_ENTRY)&_ZN7S6954C23v18Ev,
  (VTBL_ENTRY)&_ZN7S6954C23v19Ev,
  (VTBL_ENTRY)&_ZN7S6954C12v1Ev,
  (VTBL_ENTRY)&_ZN7S6954C12v2Ev,
  (VTBL_ENTRY)&_ZN7S6954C12v3Ev,
  (VTBL_ENTRY)&_ZN7S6954C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S6954C1[];
extern  VTBL_ENTRY _ZTV7S6954C1[];
Class_Descriptor cd_S6954C1 = {  "S6954C1", // class name
  bases_S6954C1, 1,
  &(vtc_S6954C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,80), // object size
  NSPAIRA(_ZTI7S6954C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6954C1),23, //virtual function table var
  2, // 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  S19448C6  {
  virtual  ~S19448C6(); // _ZN8S19448C6D1Ev
  virtual void  v14(); // _ZN8S19448C63v14Ev
  virtual void  v15(); // _ZN8S19448C63v15Ev
  virtual void  v16(); // _ZN8S19448C63v16Ev
  virtual void  v17(); // _ZN8S19448C63v17Ev
  virtual void  v18(); // _ZN8S19448C63v18Ev
  virtual void  v19(); // _ZN8S19448C63v19Ev
  S19448C6(); // tgen
};
//SIG(-1 S19448C6) C1{ vd v1 v2 v3 v4 v5 v6}


 S19448C6 ::~S19448C6(){ note_dtor("S19448C6", this);}
void  S19448C6 ::v14(){vfunc_called(this, "_ZN8S19448C63v14Ev");}
void  S19448C6 ::v15(){vfunc_called(this, "_ZN8S19448C63v15Ev");}
void  S19448C6 ::v16(){vfunc_called(this, "_ZN8S19448C63v16Ev");}
void  S19448C6 ::v17(){vfunc_called(this, "_ZN8S19448C63v17Ev");}
void  S19448C6 ::v18(){vfunc_called(this, "_ZN8S19448C63v18Ev");}
void  S19448C6 ::v19(){vfunc_called(this, "_ZN8S19448C63v19Ev");}
S19448C6 ::S19448C6(){ note_ctor("S19448C6", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S19448C6C1Ev();
extern void _ZN8S19448C6D1Ev();
Name_Map name_map_S19448C6[] = {
  NSPAIR(_ZN8S19448C6C1Ev),
  NSPAIR(_ZN8S19448C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19448C6[];
extern void _ZN8S19448C6D1Ev();
extern void _ZN8S19448C6D0Ev();
extern void _ZN8S19448C63v14Ev();
extern void _ZN8S19448C63v15Ev();
extern void _ZN8S19448C63v16Ev();
extern void _ZN8S19448C63v17Ev();
extern void _ZN8S19448C63v18Ev();
extern void _ZN8S19448C63v19Ev();
static  VTBL_ENTRY vtc_S19448C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19448C6[0]),
  (VTBL_ENTRY)&_ZN8S19448C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19448C6D0Ev,
  (VTBL_ENTRY)&_ZN8S19448C63v14Ev,
  (VTBL_ENTRY)&_ZN8S19448C63v15Ev,
  (VTBL_ENTRY)&_ZN8S19448C63v16Ev,
  (VTBL_ENTRY)&_ZN8S19448C63v17Ev,
  (VTBL_ENTRY)&_ZN8S19448C63v18Ev,
  (VTBL_ENTRY)&_ZN8S19448C63v19Ev,
};
extern VTBL_ENTRY _ZTI8S19448C6[];
extern  VTBL_ENTRY _ZTV8S19448C6[];
Class_Descriptor cd_S19448C6 = {  "S19448C6", // class name
  0,0,//no base classes
  &(vtc_S19448C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19448C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19448C6),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19448C5  {
  ::S19448C6 s19448c5f0;
  int s19448c5f1;
  virtual void  v8(); // _ZN8S19448C52v8Ev
  virtual void  v9(); // _ZN8S19448C52v9Ev
  virtual void  v10(); // _ZN8S19448C53v10Ev
  virtual void  v11(); // _ZN8S19448C53v11Ev
  virtual void  v12(); // _ZN8S19448C53v12Ev
  virtual void  v13(); // _ZN8S19448C53v13Ev
  ~S19448C5(); // tgen
  S19448C5(); // tgen
};
//SIG(-1 S19448C5) C1{ v1 v2 v3 v4 v5 v6 FC2{ vd v7 v8 v9 v10 v11 v12} Fi}


void  S19448C5 ::v8(){vfunc_called(this, "_ZN8S19448C52v8Ev");}
void  S19448C5 ::v9(){vfunc_called(this, "_ZN8S19448C52v9Ev");}
void  S19448C5 ::v10(){vfunc_called(this, "_ZN8S19448C53v10Ev");}
void  S19448C5 ::v11(){vfunc_called(this, "_ZN8S19448C53v11Ev");}
void  S19448C5 ::v12(){vfunc_called(this, "_ZN8S19448C53v12Ev");}
void  S19448C5 ::v13(){vfunc_called(this, "_ZN8S19448C53v13Ev");}
S19448C5 ::~S19448C5(){ note_dtor("S19448C5", this);} // tgen
S19448C5 ::S19448C5(){ note_ctor("S19448C5", this);} // tgen

static void Test_S19448C5()
{
  extern Class_Descriptor cd_S19448C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S19448C5, buf);
    S19448C5 *dp, &lv = *(dp=new (buf) S19448C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S19448C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19448C5)");
    check_field_offset(lv, s19448c5f0, ABISELECT(8,4), "S19448C5.s19448c5f0");
    check_field_offset(lv, s19448c5f1, ABISELECT(16,8), "S19448C5.s19448c5f1");
    test_class_info(&lv, &cd_S19448C5);
    dp->~S19448C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19448C5(Test_S19448C5, "S19448C5", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S19448C5C1Ev();
extern void _ZN8S19448C5D1Ev();
Name_Map name_map_S19448C5[] = {
  NSPAIR(_ZN8S19448C5C1Ev),
  NSPAIR(_ZN8S19448C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19448C5[];
extern void _ZN8S19448C52v8Ev();
extern void _ZN8S19448C52v9Ev();
extern void _ZN8S19448C53v10Ev();
extern void _ZN8S19448C53v11Ev();
extern void _ZN8S19448C53v12Ev();
extern void _ZN8S19448C53v13Ev();
static  VTBL_ENTRY vtc_S19448C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19448C5[0]),
  (VTBL_ENTRY)&_ZN8S19448C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19448C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19448C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19448C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19448C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19448C53v13Ev,
};
extern VTBL_ENTRY _ZTI8S19448C5[];
extern  VTBL_ENTRY _ZTV8S19448C5[];
Class_Descriptor cd_S19448C5 = {  "S19448C5", // class name
  0,0,//no base classes
  &(vtc_S19448C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S19448C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19448C5),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  S19448C4  : S19448C5 , S19448C6 {
  virtual  ~S19448C4(); // _ZN8S19448C4D1Ev
  virtual void  v20(); // _ZN8S19448C43v20Ev
  virtual void  v21(); // _ZN8S19448C43v21Ev
  virtual void  v22(); // _ZN8S19448C43v22Ev
  virtual void  v23(); // _ZN8S19448C43v23Ev
  virtual void  v24(); // _ZN8S19448C43v24Ev
  S19448C4(); // tgen
};
//SIG(-1 S19448C4) C1{ BC2{ v6 v7 v8 v9 v10 v11 FC3{ vd v12 v13 v14 v15 v16 v17} Fi} BC3 vd v1 v2 v3 v4 v5}


 S19448C4 ::~S19448C4(){ note_dtor("S19448C4", this);}
void  S19448C4 ::v20(){vfunc_called(this, "_ZN8S19448C43v20Ev");}
void  S19448C4 ::v21(){vfunc_called(this, "_ZN8S19448C43v21Ev");}
void  S19448C4 ::v22(){vfunc_called(this, "_ZN8S19448C43v22Ev");}
void  S19448C4 ::v23(){vfunc_called(this, "_ZN8S19448C43v23Ev");}
void  S19448C4 ::v24(){vfunc_called(this, "_ZN8S19448C43v24Ev");}
S19448C4 ::S19448C4(){ note_ctor("S19448C4", this);} // tgen

static void Test_S19448C4()
{
  extern Class_Descriptor cd_S19448C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S19448C4, buf);
    S19448C4 *dp, &lv = *(dp=new (buf) S19448C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S19448C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19448C4)");
    check_base_class_offset(lv, (S19448C5*), 0, "S19448C4");
    check_base_class_offset(lv, (S19448C6*), ABISELECT(24,12), "S19448C4");
    test_class_info(&lv, &cd_S19448C4);
    dp->~S19448C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19448C4(Test_S19448C4, "S19448C4", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S19448C4C1Ev();
extern void _ZN8S19448C4D1Ev();
Name_Map name_map_S19448C4[] = {
  NSPAIR(_ZN8S19448C4C1Ev),
  NSPAIR(_ZN8S19448C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19448C5;
extern VTBL_ENTRY _ZTI8S19448C5[];
extern  VTBL_ENTRY _ZTV8S19448C5[];
extern Class_Descriptor cd_S19448C6;
extern VTBL_ENTRY _ZTI8S19448C6[];
extern  VTBL_ENTRY _ZTV8S19448C6[];
static Base_Class bases_S19448C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19448C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S19448C6,    ABISELECT(24,12), //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
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19448C4[];
extern void _ZN8S19448C52v8Ev();
extern void _ZN8S19448C52v9Ev();
extern void _ZN8S19448C53v10Ev();
extern void _ZN8S19448C53v11Ev();
extern void _ZN8S19448C53v12Ev();
extern void _ZN8S19448C53v13Ev();
extern void _ZN8S19448C4D1Ev();
extern void _ZN8S19448C4D0Ev();
extern void _ZN8S19448C43v20Ev();
extern void _ZN8S19448C43v21Ev();
extern void _ZN8S19448C43v22Ev();
extern void _ZN8S19448C43v23Ev();
extern void _ZN8S19448C43v24Ev();
extern void ABISELECT(_ZThn24_N8S19448C4D1Ev,_ZThn12_N8S19448C4D1Ev)();
extern void ABISELECT(_ZThn24_N8S19448C4D0Ev,_ZThn12_N8S19448C4D0Ev)();
extern void _ZN8S19448C63v14Ev();
extern void _ZN8S19448C63v15Ev();
extern void _ZN8S19448C63v16Ev();
extern void _ZN8S19448C63v17Ev();
extern void _ZN8S19448C63v18Ev();
extern void _ZN8S19448C63v19Ev();
static  VTBL_ENTRY vtc_S19448C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19448C4[0]),
  (VTBL_ENTRY)&_ZN8S19448C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19448C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19448C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19448C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19448C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19448C53v13Ev,
  (VTBL_ENTRY)&_ZN8S19448C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19448C4D0Ev,
  (VTBL_ENTRY)&_ZN8S19448C43v20Ev,
  (VTBL_ENTRY)&_ZN8S19448C43v21Ev,
  (VTBL_ENTRY)&_ZN8S19448C43v22Ev,
  (VTBL_ENTRY)&_ZN8S19448C43v23Ev,
  (VTBL_ENTRY)&_ZN8S19448C43v24Ev,
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S19448C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S19448C4D1Ev,_ZThn12_N8S19448C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S19448C4D0Ev,_ZThn12_N8S19448C4D0Ev),
  (VTBL_ENTRY)&_ZN8S19448C63v14Ev,
  (VTBL_ENTRY)&_ZN8S19448C63v15Ev,
  (VTBL_ENTRY)&_ZN8S19448C63v16Ev,
  (VTBL_ENTRY)&_ZN8S19448C63v17Ev,
  (VTBL_ENTRY)&_ZN8S19448C63v18Ev,
  (VTBL_ENTRY)&_ZN8S19448C63v19Ev,
};
extern VTBL_ENTRY _ZTI8S19448C4[];
extern  VTBL_ENTRY _ZTV8S19448C4[];
Class_Descriptor cd_S19448C4 = {  "S19448C4", // class name
  bases_S19448C4, 2,
  &(vtc_S19448C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S19448C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19448C4),25, //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  S19448C7  {
  ::S601C21_nt s19448c7f0;
  void *s19448c7f1;
  virtual void  v25(); // _ZN8S19448C73v25Ev
  virtual void  v26(); // _ZN8S19448C73v26Ev
  virtual void  v27(); // _ZN8S19448C73v27Ev
  virtual void  v28(); // _ZN8S19448C73v28Ev
  virtual void  v29(); // _ZN8S19448C73v29Ev
  ~S19448C7(); // tgen
  S19448C7(); // tgen
};
//SIG(-1 S19448C7) C1{ v1 v2 v3 v4 v5 FC2{} Fp}


void  S19448C7 ::v25(){vfunc_called(this, "_ZN8S19448C73v25Ev");}
void  S19448C7 ::v26(){vfunc_called(this, "_ZN8S19448C73v26Ev");}
void  S19448C7 ::v27(){vfunc_called(this, "_ZN8S19448C73v27Ev");}
void  S19448C7 ::v28(){vfunc_called(this, "_ZN8S19448C73v28Ev");}
void  S19448C7 ::v29(){vfunc_called(this, "_ZN8S19448C73v29Ev");}
S19448C7 ::~S19448C7(){ note_dtor("S19448C7", this);} // tgen
S19448C7 ::S19448C7(){ note_ctor("S19448C7", this);} // tgen

static void Test_S19448C7()
{
  extern Class_Descriptor cd_S19448C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S19448C7, buf);
    S19448C7 *dp, &lv = *(dp=new (buf) S19448C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S19448C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19448C7)");
    check_field_offset(lv, s19448c7f0, ABISELECT(8,4), "S19448C7.s19448c7f0");
    check_field_offset(lv, s19448c7f1, ABISELECT(16,8), "S19448C7.s19448c7f1");
    test_class_info(&lv, &cd_S19448C7);
    dp->~S19448C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19448C7(Test_S19448C7, "S19448C7", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S19448C7C1Ev();
extern void _ZN8S19448C7D1Ev();
Name_Map name_map_S19448C7[] = {
  NSPAIR(_ZN8S19448C7C1Ev),
  NSPAIR(_ZN8S19448C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19448C7[];
extern void _ZN8S19448C73v25Ev();
extern void _ZN8S19448C73v26Ev();
extern void _ZN8S19448C73v27Ev();
extern void _ZN8S19448C73v28Ev();
extern void _ZN8S19448C73v29Ev();
static  VTBL_ENTRY vtc_S19448C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19448C7[0]),
  (VTBL_ENTRY)&_ZN8S19448C73v25Ev,
  (VTBL_ENTRY)&_ZN8S19448C73v26Ev,
  (VTBL_ENTRY)&_ZN8S19448C73v27Ev,
  (VTBL_ENTRY)&_ZN8S19448C73v28Ev,
  (VTBL_ENTRY)&_ZN8S19448C73v29Ev,
};
extern VTBL_ENTRY _ZTI8S19448C7[];
extern  VTBL_ENTRY _ZTV8S19448C7[];
Class_Descriptor cd_S19448C7 = {  "S19448C7", // class name
  0,0,//no base classes
  &(vtc_S19448C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S19448C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19448C7),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  S19448C3  : virtual S19448C4 , virtual S19448C7 {
  virtual  ~S19448C3(); // _ZN8S19448C3D2Ev
  virtual void  v30(); // _ZN8S19448C33v30Ev
  virtual void  v31(); // _ZN8S19448C33v31Ev
  S19448C3(); // tgen
};
//SIG(-1 S19448C3) C1{ VBC2{ BC3{ v3 v4 v5 v6 v7 v8 FC4{ vd v9 v10 v11 v12 v13 v14} Fi} BC4 vd v15 v16 v17 v18 v19} VBC5{ v20 v21 v22 v23 v24 FC6{} Fp} vd v1 v2}


 S19448C3 ::~S19448C3(){ note_dtor("S19448C3", this);}
void  S19448C3 ::v30(){vfunc_called(this, "_ZN8S19448C33v30Ev");}
void  S19448C3 ::v31(){vfunc_called(this, "_ZN8S19448C33v31Ev");}
S19448C3 ::S19448C3(){ note_ctor("S19448C3", this);} // tgen

static void Test_S19448C3()
{
  extern Class_Descriptor cd_S19448C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[9];
    init_test(&cd_S19448C3, buf);
    S19448C3 *dp, &lv = *(dp=new (buf) S19448C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S19448C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19448C3)");
    check_base_class_offset(lv, (S19448C5*)(S19448C4*), ABISELECT(8,4), "S19448C3");
    check_base_class_offset(lv, (S19448C6*)(S19448C4*), ABISELECT(32,16), "S19448C3");
    check_base_class_offset(lv, (S19448C4*), ABISELECT(8,4), "S19448C3");
    check_base_class_offset(lv, (S19448C7*), ABISELECT(40,20), "S19448C3");
    test_class_info(&lv, &cd_S19448C3);
    dp->~S19448C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19448C3(Test_S19448C3, "S19448C3", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN8S19448C3C1Ev();
extern void _ZN8S19448C3D2Ev();
Name_Map name_map_S19448C3[] = {
  NSPAIR(_ZN8S19448C3C1Ev),
  NSPAIR(_ZN8S19448C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19448C5;
extern VTBL_ENTRY _ZTI8S19448C5[];
extern  VTBL_ENTRY _ZTV8S19448C5[];
extern Class_Descriptor cd_S19448C6;
extern VTBL_ENTRY _ZTI8S19448C6[];
extern  VTBL_ENTRY _ZTV8S19448C6[];
extern Class_Descriptor cd_S19448C4;
extern VTBL_ENTRY _ZTI8S19448C4[];
extern  VTBL_ENTRY _ZTV8S19448C4[];
extern Class_Descriptor cd_S19448C7;
extern VTBL_ENTRY _ZTI8S19448C7[];
extern  VTBL_ENTRY _ZTV8S19448C7[];
static Base_Class bases_S19448C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19448C5,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19448C6,    ABISELECT(32,16), //bcp->offset
    41, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19448C4,    ABISELECT(8,4), //bcp->offset
    8, //bcp->virtual_function_table_offset
    20, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19448C7,    ABISELECT(40,20), //bcp->offset
    51, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19448C3[];
extern void _ZN8S19448C3D1Ev();
extern void _ZN8S19448C3D0Ev();
extern void _ZN8S19448C33v30Ev();
extern void _ZN8S19448C33v31Ev();
extern void _ZN8S19448C52v8Ev();
extern void _ZN8S19448C52v9Ev();
extern void _ZN8S19448C53v10Ev();
extern void _ZN8S19448C53v11Ev();
extern void _ZN8S19448C53v12Ev();
extern void _ZN8S19448C53v13Ev();
extern void ABISELECT(_ZTv0_n72_N8S19448C3D1Ev,_ZTv0_n36_N8S19448C3D1Ev)();
extern void ABISELECT(_ZThn8_N8S19448C3D1Ev,_ZThn4_N8S19448C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S19448C3D0Ev,_ZTv0_n36_N8S19448C3D0Ev)();
extern void ABISELECT(_ZThn8_N8S19448C3D0Ev,_ZThn4_N8S19448C3D0Ev)() __attribute__((weak));
extern void _ZN8S19448C43v20Ev();
extern void _ZN8S19448C43v21Ev();
extern void _ZN8S19448C43v22Ev();
extern void _ZN8S19448C43v23Ev();
extern void _ZN8S19448C43v24Ev();
extern void ABISELECT(_ZTvn24_n72_N8S19448C3D1Ev,_ZTvn12_n36_N8S19448C3D1Ev)();
extern void ABISELECT(_ZTvn24_n72_N8S19448C3D0Ev,_ZTvn12_n36_N8S19448C3D0Ev)();
extern void _ZN8S19448C63v14Ev();
extern void _ZN8S19448C63v15Ev();
extern void _ZN8S19448C63v16Ev();
extern void _ZN8S19448C63v17Ev();
extern void _ZN8S19448C63v18Ev();
extern void _ZN8S19448C63v19Ev();
extern void _ZN8S19448C73v25Ev();
extern void _ZN8S19448C73v26Ev();
extern void _ZN8S19448C73v27Ev();
extern void _ZN8S19448C73v28Ev();
extern void _ZN8S19448C73v29Ev();
static  VTBL_ENTRY vtc_S19448C3[] = {
  ABISELECT(40,20),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19448C3[0]),
  (VTBL_ENTRY)&_ZN8S19448C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19448C3D0Ev,
  (VTBL_ENTRY)&_ZN8S19448C33v30Ev,
  (VTBL_ENTRY)&_ZN8S19448C33v31Ev,
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19448C3[0]),
  (VTBL_ENTRY)&_ZN8S19448C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19448C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19448C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19448C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19448C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19448C53v13Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19448C3D1Ev,_ZTv0_n36_N8S19448C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19448C3D0Ev,_ZTv0_n36_N8S19448C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19448C43v20Ev,
  (VTBL_ENTRY)&_ZN8S19448C43v21Ev,
  (VTBL_ENTRY)&_ZN8S19448C43v22Ev,
  (VTBL_ENTRY)&_ZN8S19448C43v23Ev,
  (VTBL_ENTRY)&_ZN8S19448C43v24Ev,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S19448C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N8S19448C3D1Ev,_ZTvn12_n36_N8S19448C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N8S19448C3D0Ev,_ZTvn12_n36_N8S19448C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19448C63v14Ev,
  (VTBL_ENTRY)&_ZN8S19448C63v15Ev,
  (VTBL_ENTRY)&_ZN8S19448C63v16Ev,
  (VTBL_ENTRY)&_ZN8S19448C63v17Ev,
  (VTBL_ENTRY)&_ZN8S19448C63v18Ev,
  (VTBL_ENTRY)&_ZN8S19448C63v19Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S19448C3[0]),
  (VTBL_ENTRY)&_ZN8S19448C73v25Ev,
  (VTBL_ENTRY)&_ZN8S19448C73v26Ev,
  (VTBL_ENTRY)&_ZN8S19448C73v27Ev,
  (VTBL_ENTRY)&_ZN8S19448C73v28Ev,
  (VTBL_ENTRY)&_ZN8S19448C73v29Ev,
};
extern VTBL_ENTRY _ZTV8S19448C3[];
static  VTT_ENTRY vtt_S19448C3[] = {
  {&(_ZTV8S19448C3[4]),  4,63},
  {&(_ZTV8S19448C3[28]),  28,63},
  {&(_ZTV8S19448C3[43]),  43,63},
  {&(_ZTV8S19448C3[58]),  58,63},
};
extern VTBL_ENTRY _ZTI8S19448C3[];
extern  VTBL_ENTRY _ZTV8S19448C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19448C3[];
static VTBL_ENTRY alt_thunk_names34[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19448C3D0Ev,_ZTv0_n36_N8S19448C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S19448C3D0Ev,_ZThn4_N8S19448C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19448C3D1Ev,_ZTv0_n36_N8S19448C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S19448C3D1Ev,_ZThn4_N8S19448C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19448C3 = {  "S19448C3", // class name
  bases_S19448C3, 4,
  &(vtc_S19448C3[0]), // expected_vtbl_contents
  &(vtt_S19448C3[0]), // expected_vtt_contents
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI8S19448C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19448C3),63, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19448C3),4, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names34,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19448C2  : S19448C3 {
  void *s19448c2f0;
  virtual  ~S19448C2(); // _ZN8S19448C2D2Ev
  virtual void  v32(); // _ZN8S19448C23v32Ev
  virtual void  v33(); // _ZN8S19448C23v33Ev
  virtual void  v34(); // _ZN8S19448C23v34Ev
  virtual void  v35(); // _ZN8S19448C23v35Ev
  virtual void  v36(); // _ZN8S19448C23v36Ev
  S19448C2(); // tgen
};
//SIG(-1 S19448C2) C1{ BC2{ VBC3{ BC4{ v6 v7 v8 v9 v10 v11 FC5{ vd v12 v13 v14 v15 v16 v17} Fi} BC5 vd v18 v19 v20 v21 v22} VBC6{ v23 v24 v25 v26 v27 FC7{} Fp} vd v28 v29} vd v1 v2 v3 v4 v5 Fp}


 S19448C2 ::~S19448C2(){ note_dtor("S19448C2", this);}
void  S19448C2 ::v32(){vfunc_called(this, "_ZN8S19448C23v32Ev");}
void  S19448C2 ::v33(){vfunc_called(this, "_ZN8S19448C23v33Ev");}
void  S19448C2 ::v34(){vfunc_called(this, "_ZN8S19448C23v34Ev");}
void  S19448C2 ::v35(){vfunc_called(this, "_ZN8S19448C23v35Ev");}
void  S19448C2 ::v36(){vfunc_called(this, "_ZN8S19448C23v36Ev");}
S19448C2 ::S19448C2(){ note_ctor("S19448C2", this);} // tgen

static void Test_S19448C2()
{
  extern Class_Descriptor cd_S19448C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[10];
    init_test(&cd_S19448C2, buf);
    S19448C2 *dp, &lv = *(dp=new (buf) S19448C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,36), "sizeof(S19448C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19448C2)");
    check_base_class_offset(lv, (S19448C5*)(S19448C4*), ABISELECT(16,8), "S19448C2");
    check_base_class_offset(lv, (S19448C6*)(S19448C4*), ABISELECT(40,20), "S19448C2");
    check_base_class_offset(lv, (S19448C4*)(S19448C3*), ABISELECT(16,8), "S19448C2");
    check_base_class_offset(lv, (S19448C7*)(S19448C3*), ABISELECT(48,24), "S19448C2");
    check_base_class_offset(lv, (S19448C3*), 0, "S19448C2");
    check_field_offset(lv, s19448c2f0, ABISELECT(8,4), "S19448C2.s19448c2f0");
    test_class_info(&lv, &cd_S19448C2);
    dp->~S19448C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19448C2(Test_S19448C2, "S19448C2", ABISELECT(72,36));

#else // __cplusplus

extern void _ZN8S19448C2C1Ev();
extern void _ZN8S19448C2D2Ev();
Name_Map name_map_S19448C2[] = {
  NSPAIR(_ZN8S19448C2C1Ev),
  NSPAIR(_ZN8S19448C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19448C5;
extern VTBL_ENTRY _ZTI8S19448C5[];
extern  VTBL_ENTRY _ZTV8S19448C5[];
extern Class_Descriptor cd_S19448C6;
extern VTBL_ENTRY _ZTI8S19448C6[];
extern  VTBL_ENTRY _ZTV8S19448C6[];
extern Class_Descriptor cd_S19448C4;
extern VTBL_ENTRY _ZTI8S19448C4[];
extern  VTBL_ENTRY _ZTV8S19448C4[];
extern Class_Descriptor cd_S19448C7;
extern VTBL_ENTRY _ZTI8S19448C7[];
extern  VTBL_ENTRY _ZTV8S19448C7[];
extern Class_Descriptor cd_S19448C3;
extern VTBL_ENTRY _ZTI8S19448C3[];
extern  VTBL_ENTRY _ZTV8S19448C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19448C3[];
static Base_Class bases_S19448C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19448C5,    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, 0},
  {&cd_S19448C6,    ABISELECT(40,20), //bcp->offset
    46, //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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19448C4,    ABISELECT(16,8), //bcp->offset
    13, //bcp->virtual_function_table_offset
    20, //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
    4, //immediately_derived
  0, 1},
  {&cd_S19448C7,    ABISELECT(48,24), //bcp->offset
    56, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19448C3,    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},
  {0}};
extern VTBL_ENTRY _ZTI8S19448C2[];
extern void _ZN8S19448C2D1Ev();
extern void _ZN8S19448C2D0Ev();
extern void _ZN8S19448C33v30Ev();
extern void _ZN8S19448C33v31Ev();
extern void _ZN8S19448C23v32Ev();
extern void _ZN8S19448C23v33Ev();
extern void _ZN8S19448C23v34Ev();
extern void _ZN8S19448C23v35Ev();
extern void _ZN8S19448C23v36Ev();
extern void _ZN8S19448C52v8Ev();
extern void _ZN8S19448C52v9Ev();
extern void _ZN8S19448C53v10Ev();
extern void _ZN8S19448C53v11Ev();
extern void _ZN8S19448C53v12Ev();
extern void _ZN8S19448C53v13Ev();
extern void ABISELECT(_ZTv0_n72_N8S19448C2D1Ev,_ZTv0_n36_N8S19448C2D1Ev)();
extern void ABISELECT(_ZThn16_N8S19448C2D1Ev,_ZThn8_N8S19448C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S19448C2D0Ev,_ZTv0_n36_N8S19448C2D0Ev)();
extern void ABISELECT(_ZThn16_N8S19448C2D0Ev,_ZThn8_N8S19448C2D0Ev)() __attribute__((weak));
extern void _ZN8S19448C43v20Ev();
extern void _ZN8S19448C43v21Ev();
extern void _ZN8S19448C43v22Ev();
extern void _ZN8S19448C43v23Ev();
extern void _ZN8S19448C43v24Ev();
extern void ABISELECT(_ZTvn24_n72_N8S19448C2D1Ev,_ZTvn12_n36_N8S19448C2D1Ev)();
extern void ABISELECT(_ZTvn24_n72_N8S19448C2D0Ev,_ZTvn12_n36_N8S19448C2D0Ev)();
extern void _ZN8S19448C63v14Ev();
extern void _ZN8S19448C63v15Ev();
extern void _ZN8S19448C63v16Ev();
extern void _ZN8S19448C63v17Ev();
extern void _ZN8S19448C63v18Ev();
extern void _ZN8S19448C63v19Ev();
extern void _ZN8S19448C73v25Ev();
extern void _ZN8S19448C73v26Ev();
extern void _ZN8S19448C73v27Ev();
extern void _ZN8S19448C73v28Ev();
extern void _ZN8S19448C73v29Ev();
static  VTBL_ENTRY vtc_S19448C2[] = {
  ABISELECT(48,24),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19448C2[0]),
  (VTBL_ENTRY)&_ZN8S19448C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19448C2D0Ev,
  (VTBL_ENTRY)&_ZN8S19448C33v30Ev,
  (VTBL_ENTRY)&_ZN8S19448C33v31Ev,
  (VTBL_ENTRY)&_ZN8S19448C23v32Ev,
  (VTBL_ENTRY)&_ZN8S19448C23v33Ev,
  (VTBL_ENTRY)&_ZN8S19448C23v34Ev,
  (VTBL_ENTRY)&_ZN8S19448C23v35Ev,
  (VTBL_ENTRY)&_ZN8S19448C23v36Ev,
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19448C2[0]),
  (VTBL_ENTRY)&_ZN8S19448C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19448C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19448C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19448C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19448C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19448C53v13Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19448C2D1Ev,_ZTv0_n36_N8S19448C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19448C2D0Ev,_ZTv0_n36_N8S19448C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19448C43v20Ev,
  (VTBL_ENTRY)&_ZN8S19448C43v21Ev,
  (VTBL_ENTRY)&_ZN8S19448C43v22Ev,
  (VTBL_ENTRY)&_ZN8S19448C43v23Ev,
  (VTBL_ENTRY)&_ZN8S19448C43v24Ev,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S19448C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N8S19448C2D1Ev,_ZTvn12_n36_N8S19448C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N8S19448C2D0Ev,_ZTvn12_n36_N8S19448C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19448C63v14Ev,
  (VTBL_ENTRY)&_ZN8S19448C63v15Ev,
  (VTBL_ENTRY)&_ZN8S19448C63v16Ev,
  (VTBL_ENTRY)&_ZN8S19448C63v17Ev,
  (VTBL_ENTRY)&_ZN8S19448C63v18Ev,
  (VTBL_ENTRY)&_ZN8S19448C63v19Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S19448C2[0]),
  (VTBL_ENTRY)&_ZN8S19448C73v25Ev,
  (VTBL_ENTRY)&_ZN8S19448C73v26Ev,
  (VTBL_ENTRY)&_ZN8S19448C73v27Ev,
  (VTBL_ENTRY)&_ZN8S19448C73v28Ev,
  (VTBL_ENTRY)&_ZN8S19448C73v29Ev,
};
extern VTBL_ENTRY _ZTV8S19448C2[];
extern void _ZN8S19448C3D1Ev();
extern void _ZN8S19448C3D0Ev();
extern void _ZN8S19448C33v30Ev();
extern void _ZN8S19448C33v31Ev();
static  VTBL_ENTRY _tg__ZTV8S19448C3__8S19448C2[] = {
  ABISELECT(48,24),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19448C3[0]),
  (VTBL_ENTRY)&_ZN8S19448C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19448C3D0Ev,
  (VTBL_ENTRY)&_ZN8S19448C33v30Ev,
  (VTBL_ENTRY)&_ZN8S19448C33v31Ev,
};
extern void _ZN8S19448C52v8Ev();
extern void _ZN8S19448C52v9Ev();
extern void _ZN8S19448C53v10Ev();
extern void _ZN8S19448C53v11Ev();
extern void _ZN8S19448C53v12Ev();
extern void _ZN8S19448C53v13Ev();
extern void ABISELECT(_ZTv0_n72_N8S19448C3D1Ev,_ZTv0_n36_N8S19448C3D1Ev)();
extern void ABISELECT(_ZThn16_N8S19448C3D1Ev,_ZThn8_N8S19448C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S19448C3D0Ev,_ZTv0_n36_N8S19448C3D0Ev)();
extern void ABISELECT(_ZThn16_N8S19448C3D0Ev,_ZThn8_N8S19448C3D0Ev)() __attribute__((weak));
extern void _ZN8S19448C43v20Ev();
extern void _ZN8S19448C43v21Ev();
extern void _ZN8S19448C43v22Ev();
extern void _ZN8S19448C43v23Ev();
extern void _ZN8S19448C43v24Ev();
static  VTBL_ENTRY _tg__ZTV8S19448C4__8S19448C3__8S19448C2[] = {
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19448C3[0]),
  (VTBL_ENTRY)&_ZN8S19448C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19448C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19448C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19448C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19448C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19448C53v13Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19448C3D1Ev,_ZTv0_n36_N8S19448C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19448C3D0Ev,_ZTv0_n36_N8S19448C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19448C43v20Ev,
  (VTBL_ENTRY)&_ZN8S19448C43v21Ev,
  (VTBL_ENTRY)&_ZN8S19448C43v22Ev,
  (VTBL_ENTRY)&_ZN8S19448C43v23Ev,
  (VTBL_ENTRY)&_ZN8S19448C43v24Ev,
};
extern void ABISELECT(_ZTvn24_n72_N8S19448C3D1Ev,_ZTvn12_n36_N8S19448C3D1Ev)();
extern void ABISELECT(_ZTvn24_n72_N8S19448C3D0Ev,_ZTvn12_n36_N8S19448C3D0Ev)();
extern void _ZN8S19448C63v14Ev();
extern void _ZN8S19448C63v15Ev();
extern void _ZN8S19448C63v16Ev();
extern void _ZN8S19448C63v17Ev();
extern void _ZN8S19448C63v18Ev();
extern void _ZN8S19448C63v19Ev();
static  VTBL_ENTRY _tg__ZTV8S19448C68S19448C4__8S19448C3__8S19448C2[] = {
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S19448C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N8S19448C3D1Ev,_ZTvn12_n36_N8S19448C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N8S19448C3D0Ev,_ZTvn12_n36_N8S19448C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19448C63v14Ev,
  (VTBL_ENTRY)&_ZN8S19448C63v15Ev,
  (VTBL_ENTRY)&_ZN8S19448C63v16Ev,
  (VTBL_ENTRY)&_ZN8S19448C63v17Ev,
  (VTBL_ENTRY)&_ZN8S19448C63v18Ev,
  (VTBL_ENTRY)&_ZN8S19448C63v19Ev,
};
extern void _ZN8S19448C73v25Ev();
extern void _ZN8S19448C73v26Ev();
extern void _ZN8S19448C73v27Ev();
extern void _ZN8S19448C73v28Ev();
extern void _ZN8S19448C73v29Ev();
static  VTBL_ENTRY _tg__ZTV8S19448C7__8S19448C3__8S19448C2[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S19448C3[0]),
  (VTBL_ENTRY)&_ZN8S19448C73v25Ev,
  (VTBL_ENTRY)&_ZN8S19448C73v26Ev,
  (VTBL_ENTRY)&_ZN8S19448C73v27Ev,
  (VTBL_ENTRY)&_ZN8S19448C73v28Ev,
  (VTBL_ENTRY)&_ZN8S19448C73v29Ev,
};
static  VTT_ENTRY vtt_S19448C2[] = {
  {&(_ZTV8S19448C2[4]),  4,68},
  {&(_tg__ZTV8S19448C3__8S19448C2[4]),  4,8},
  {&(_tg__ZTV8S19448C4__8S19448C3__8S19448C2[20]),  20,33},
  {&(_tg__ZTV8S19448C68S19448C4__8S19448C3__8S19448C2[2]),  2,10},
  {&(_tg__ZTV8S19448C7__8S19448C3__8S19448C2[7]),  7,12},
  {&(_ZTV8S19448C2[33]),  33,68},
  {&(_ZTV8S19448C2[48]),  48,68},
  {&(_ZTV8S19448C2[63]),  63,68},
};
extern VTBL_ENTRY _ZTI8S19448C2[];
extern  VTBL_ENTRY _ZTV8S19448C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19448C2[];
static VTBL_ENTRY alt_thunk_names35[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19448C3D0Ev,_ZTv0_n36_N8S19448C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19448C3D0Ev,_ZThn8_N8S19448C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19448C3D1Ev,_ZTv0_n36_N8S19448C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19448C3D1Ev,_ZThn8_N8S19448C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19448C2D0Ev,_ZTv0_n36_N8S19448C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19448C2D0Ev,_ZThn8_N8S19448C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19448C2D1Ev,_ZTv0_n36_N8S19448C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19448C2D1Ev,_ZThn8_N8S19448C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19448C2 = {  "S19448C2", // class name
  bases_S19448C2, 5,
  &(vtc_S19448C2[0]), // expected_vtbl_contents
  &(vtt_S19448C2[0]), // expected_vtt_contents
  ABISELECT(72,36), // object size
  NSPAIRA(_ZTI8S19448C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19448C2),68, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19448C2),8, //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  S19448C1  : virtual S19448C2 , S19448C7 {
  virtual void  v1(); // _ZN8S19448C12v1Ev
  virtual void  v2(); // _ZN8S19448C12v2Ev
  virtual void  v3(); // _ZN8S19448C12v3Ev
  virtual void  v4(); // _ZN8S19448C12v4Ev
  virtual void  v5(); // _ZN8S19448C12v5Ev
  virtual void  v6(); // _ZN8S19448C12v6Ev
  virtual void  v7(); // _ZN8S19448C12v7Ev
  ~S19448C1(); // tgen
  S19448C1(); // tgen
};
//SIG(1 S19448C1) C1{ VBC2{ BC3{ VBC4{ BC5{ v8 v9 v10 v11 v12 v13 FC6{ vd v14 v15 v16 v17 v18 v19} Fi} BC6 vd v20 v21 v22 v23 v24} VBC7{ v25 v26 v27 v28 v29 FC8{} Fp} vd v30 v31} vd v32 v33 v34 v35 v36 Fp} BC7 v1 v2 v3 v4 v5 v6 v7}


void  S19448C1 ::v1(){vfunc_called(this, "_ZN8S19448C12v1Ev");}
void  S19448C1 ::v2(){vfunc_called(this, "_ZN8S19448C12v2Ev");}
void  S19448C1 ::v3(){vfunc_called(this, "_ZN8S19448C12v3Ev");}
void  S19448C1 ::v4(){vfunc_called(this, "_ZN8S19448C12v4Ev");}
void  S19448C1 ::v5(){vfunc_called(this, "_ZN8S19448C12v5Ev");}
void  S19448C1 ::v6(){vfunc_called(this, "_ZN8S19448C12v6Ev");}
void  S19448C1 ::v7(){vfunc_called(this, "_ZN8S19448C12v7Ev");}
S19448C1 ::~S19448C1(){ note_dtor("S19448C1", this);} // tgen
S19448C1 ::S19448C1(){ note_ctor("S19448C1", this);} // tgen

static void Test_S19448C1()
{
  extern Class_Descriptor cd_S19448C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[13];
    init_test(&cd_S19448C1, buf);
    S19448C1 *dp, &lv = *(dp=new (buf) S19448C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,48), "sizeof(S19448C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19448C1)");
    check_base_class_offset(lv, (S19448C5*)(S19448C4*), ABISELECT(40,20), "S19448C1");
    check_base_class_offset(lv, (S19448C6*)(S19448C4*), ABISELECT(64,32), "S19448C1");
    check_base_class_offset(lv, (S19448C4*)(S19448C3*)(S19448C2*), ABISELECT(40,20), "S19448C1");
    check_base_class_offset(lv, (S19448C7*)(S19448C3*)(S19448C2*), ABISELECT(72,36), "S19448C1");
    check_base_class_offset(lv, (S19448C3*)(S19448C2*), ABISELECT(24,12), "S19448C1");
    check_base_class_offset(lv, (S19448C2*), ABISELECT(24,12), "S19448C1");
    /*is_ambiguous_... S19448C1::S19448C7 */ AMB_check_base_class_offset(lv, (S19448C7*), 0, "S19448C1");
    test_class_info(&lv, &cd_S19448C1);
    dp->~S19448C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19448C1(Test_S19448C1, "S19448C1", ABISELECT(96,48));

#else // __cplusplus

extern void _ZN8S19448C1C1Ev();
extern void _ZN8S19448C1D1Ev();
Name_Map name_map_S19448C1[] = {
  NSPAIR(_ZN8S19448C1C1Ev),
  NSPAIR(_ZN8S19448C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19448C5;
extern VTBL_ENTRY _ZTI8S19448C5[];
extern  VTBL_ENTRY _ZTV8S19448C5[];
extern Class_Descriptor cd_S19448C6;
extern VTBL_ENTRY _ZTI8S19448C6[];
extern  VTBL_ENTRY _ZTV8S19448C6[];
extern Class_Descriptor cd_S19448C4;
extern VTBL_ENTRY _ZTI8S19448C4[];
extern  VTBL_ENTRY _ZTV8S19448C4[];
extern Class_Descriptor cd_S19448C7;
extern VTBL_ENTRY _ZTI8S19448C7[];
extern  VTBL_ENTRY _ZTV8S19448C7[];
extern Class_Descriptor cd_S19448C3;
extern VTBL_ENTRY _ZTI8S19448C3[];
extern  VTBL_ENTRY _ZTV8S19448C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19448C3[];
extern Class_Descriptor cd_S19448C2;
extern VTBL_ENTRY _ZTI8S19448C2[];
extern  VTBL_ENTRY _ZTV8S19448C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19448C2[];
extern Class_Descriptor cd_S19448C7;
extern VTBL_ENTRY _ZTI8S19448C7[];
extern  VTBL_ENTRY _ZTV8S19448C7[];
static Base_Class bases_S19448C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19448C5,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19448C6,    ABISELECT(64,32), //bcp->offset
    73, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19448C4,    ABISELECT(40,20), //bcp->offset
    40, //bcp->virtual_function_table_offset
    20, //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
    4, //immediately_derived
  0, 1},
  {&cd_S19448C7,    ABISELECT(72,36), //bcp->offset
    83, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19448C3,    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
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19448C2,    ABISELECT(24,12), //bcp->offset
    19, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19448C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI8S19448C1[];
extern void _ZN8S19448C73v25Ev();
extern void _ZN8S19448C73v26Ev();
extern void _ZN8S19448C73v27Ev();
extern void _ZN8S19448C73v28Ev();
extern void _ZN8S19448C73v29Ev();
extern void _ZN8S19448C12v1Ev();
extern void _ZN8S19448C12v2Ev();
extern void _ZN8S19448C12v3Ev();
extern void _ZN8S19448C12v4Ev();
extern void _ZN8S19448C12v5Ev();
extern void _ZN8S19448C12v6Ev();
extern void _ZN8S19448C12v7Ev();
extern void _ZN8S19448C1D1Ev();
extern void _ZN8S19448C1D0Ev();
extern void ABISELECT(_ZTv0_n40_N8S19448C1D1Ev,_ZTv0_n20_N8S19448C1D1Ev)();
extern void ABISELECT(_ZThn24_N8S19448C1D1Ev,_ZThn12_N8S19448C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19448C1D0Ev,_ZTv0_n20_N8S19448C1D0Ev)();
extern void ABISELECT(_ZThn24_N8S19448C1D0Ev,_ZThn12_N8S19448C1D0Ev)() __attribute__((weak));
extern void _ZN8S19448C33v30Ev();
extern void _ZN8S19448C33v31Ev();
extern void _ZN8S19448C23v32Ev();
extern void _ZN8S19448C23v33Ev();
extern void _ZN8S19448C23v34Ev();
extern void _ZN8S19448C23v35Ev();
extern void _ZN8S19448C23v36Ev();
extern void _ZN8S19448C52v8Ev();
extern void _ZN8S19448C52v9Ev();
extern void _ZN8S19448C53v10Ev();
extern void _ZN8S19448C53v11Ev();
extern void _ZN8S19448C53v12Ev();
extern void _ZN8S19448C53v13Ev();
extern void ABISELECT(_ZTv0_n72_N8S19448C1D1Ev,_ZTv0_n36_N8S19448C1D1Ev)();
extern void ABISELECT(_ZThn40_N8S19448C1D1Ev,_ZThn20_N8S19448C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S19448C1D0Ev,_ZTv0_n36_N8S19448C1D0Ev)();
extern void ABISELECT(_ZThn40_N8S19448C1D0Ev,_ZThn20_N8S19448C1D0Ev)() __attribute__((weak));
extern void _ZN8S19448C43v20Ev();
extern void _ZN8S19448C43v21Ev();
extern void _ZN8S19448C43v22Ev();
extern void _ZN8S19448C43v23Ev();
extern void _ZN8S19448C43v24Ev();
extern void ABISELECT(_ZTvn24_n72_N8S19448C1D1Ev,_ZTvn12_n36_N8S19448C1D1Ev)();
extern void ABISELECT(_ZTvn24_n72_N8S19448C1D0Ev,_ZTvn12_n36_N8S19448C1D0Ev)();
extern void _ZN8S19448C63v14Ev();
extern void _ZN8S19448C63v15Ev();
extern void _ZN8S19448C63v16Ev();
extern void _ZN8S19448C63v17Ev();
extern void _ZN8S19448C63v18Ev();
extern void _ZN8S19448C63v19Ev();
extern void _ZN8S19448C73v25Ev();
extern void _ZN8S19448C73v26Ev();
extern void _ZN8S19448C73v27Ev();
extern void _ZN8S19448C73v28Ev();
extern void _ZN8S19448C73v29Ev();
static  VTBL_ENTRY vtc_S19448C1[] = {
  ABISELECT(72,36),
  ABISELECT(40,20),
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S19448C1[0]),
  (VTBL_ENTRY)&_ZN8S19448C73v25Ev,
  (VTBL_ENTRY)&_ZN8S19448C73v26Ev,
  (VTBL_ENTRY)&_ZN8S19448C73v27Ev,
  (VTBL_ENTRY)&_ZN8S19448C73v28Ev,
  (VTBL_ENTRY)&_ZN8S19448C73v29Ev,
  (VTBL_ENTRY)&_ZN8S19448C12v1Ev,
  (VTBL_ENTRY)&_ZN8S19448C12v2Ev,
  (VTBL_ENTRY)&_ZN8S19448C12v3Ev,
  (VTBL_ENTRY)&_ZN8S19448C12v4Ev,
  (VTBL_ENTRY)&_ZN8S19448C12v5Ev,
  (VTBL_ENTRY)&_ZN8S19448C12v6Ev,
  (VTBL_ENTRY)&_ZN8S19448C12v7Ev,
  (VTBL_ENTRY)&_ZN8S19448C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19448C1D0Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-12),
  ABISELECT(48,24),
  ABISELECT(16,8),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S19448C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19448C1D1Ev,_ZTv0_n20_N8S19448C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19448C1D0Ev,_ZTv0_n20_N8S19448C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19448C33v30Ev,
  (VTBL_ENTRY)&_ZN8S19448C33v31Ev,
  (VTBL_ENTRY)&_ZN8S19448C23v32Ev,
  (VTBL_ENTRY)&_ZN8S19448C23v33Ev,
  (VTBL_ENTRY)&_ZN8S19448C23v34Ev,
  (VTBL_ENTRY)&_ZN8S19448C23v35Ev,
  (VTBL_ENTRY)&_ZN8S19448C23v36Ev,
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-20),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S19448C1[0]),
  (VTBL_ENTRY)&_ZN8S19448C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19448C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19448C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19448C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19448C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19448C53v13Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19448C1D1Ev,_ZTv0_n36_N8S19448C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19448C1D0Ev,_ZTv0_n36_N8S19448C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19448C43v20Ev,
  (VTBL_ENTRY)&_ZN8S19448C43v21Ev,
  (VTBL_ENTRY)&_ZN8S19448C43v22Ev,
  (VTBL_ENTRY)&_ZN8S19448C43v23Ev,
  (VTBL_ENTRY)&_ZN8S19448C43v24Ev,
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S19448C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N8S19448C1D1Ev,_ZTvn12_n36_N8S19448C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N8S19448C1D0Ev,_ZTvn12_n36_N8S19448C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19448C63v14Ev,
  (VTBL_ENTRY)&_ZN8S19448C63v15Ev,
  (VTBL_ENTRY)&_ZN8S19448C63v16Ev,
  (VTBL_ENTRY)&_ZN8S19448C63v17Ev,
  (VTBL_ENTRY)&_ZN8S19448C63v18Ev,
  (VTBL_ENTRY)&_ZN8S19448C63v19Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI8S19448C1[0]),
  (VTBL_ENTRY)&_ZN8S19448C73v25Ev,
  (VTBL_ENTRY)&_ZN8S19448C73v26Ev,
  (VTBL_ENTRY)&_ZN8S19448C73v27Ev,
  (VTBL_ENTRY)&_ZN8S19448C73v28Ev,
  (VTBL_ENTRY)&_ZN8S19448C73v29Ev,
};
extern VTBL_ENTRY _ZTV8S19448C1[];
extern void _ZN8S19448C2D1Ev();
extern void _ZN8S19448C2D0Ev();
extern void _ZN8S19448C33v30Ev();
extern void _ZN8S19448C33v31Ev();
extern void _ZN8S19448C23v32Ev();
extern void _ZN8S19448C23v33Ev();
extern void _ZN8S19448C23v34Ev();
extern void _ZN8S19448C23v35Ev();
extern void _ZN8S19448C23v36Ev();
static  VTBL_ENTRY _tg__ZTV8S19448C2__8S19448C1[] = {
  ABISELECT(48,24),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19448C2[0]),
  (VTBL_ENTRY)&_ZN8S19448C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19448C2D0Ev,
  (VTBL_ENTRY)&_ZN8S19448C33v30Ev,
  (VTBL_ENTRY)&_ZN8S19448C33v31Ev,
  (VTBL_ENTRY)&_ZN8S19448C23v32Ev,
  (VTBL_ENTRY)&_ZN8S19448C23v33Ev,
  (VTBL_ENTRY)&_ZN8S19448C23v34Ev,
  (VTBL_ENTRY)&_ZN8S19448C23v35Ev,
  (VTBL_ENTRY)&_ZN8S19448C23v36Ev,
};
extern void _ZN8S19448C3D1Ev();
extern void _ZN8S19448C3D0Ev();
extern void _ZN8S19448C33v30Ev();
extern void _ZN8S19448C33v31Ev();
static  VTBL_ENTRY _tg__ZTV8S19448C38S19448C2__8S19448C1[] = {
  ABISELECT(48,24),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19448C3[0]),
  (VTBL_ENTRY)&_ZN8S19448C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19448C3D0Ev,
  (VTBL_ENTRY)&_ZN8S19448C33v30Ev,
  (VTBL_ENTRY)&_ZN8S19448C33v31Ev,
};
extern void _ZN8S19448C52v8Ev();
extern void _ZN8S19448C52v9Ev();
extern void _ZN8S19448C53v10Ev();
extern void _ZN8S19448C53v11Ev();
extern void _ZN8S19448C53v12Ev();
extern void _ZN8S19448C53v13Ev();
extern void ABISELECT(_ZTv0_n72_N8S19448C3D1Ev,_ZTv0_n36_N8S19448C3D1Ev)();
extern void ABISELECT(_ZThn16_N8S19448C3D1Ev,_ZThn8_N8S19448C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S19448C3D0Ev,_ZTv0_n36_N8S19448C3D0Ev)();
extern void ABISELECT(_ZThn16_N8S19448C3D0Ev,_ZThn8_N8S19448C3D0Ev)() __attribute__((weak));
extern void _ZN8S19448C43v20Ev();
extern void _ZN8S19448C43v21Ev();
extern void _ZN8S19448C43v22Ev();
extern void _ZN8S19448C43v23Ev();
extern void _ZN8S19448C43v24Ev();
static  VTBL_ENTRY _tg__ZTV8S19448C4__8S19448C38S19448C2__8S19448C1[] = {
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19448C3[0]),
  (VTBL_ENTRY)&_ZN8S19448C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19448C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19448C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19448C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19448C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19448C53v13Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19448C3D1Ev,_ZTv0_n36_N8S19448C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19448C3D0Ev,_ZTv0_n36_N8S19448C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19448C43v20Ev,
  (VTBL_ENTRY)&_ZN8S19448C43v21Ev,
  (VTBL_ENTRY)&_ZN8S19448C43v22Ev,
  (VTBL_ENTRY)&_ZN8S19448C43v23Ev,
  (VTBL_ENTRY)&_ZN8S19448C43v24Ev,
};
extern void ABISELECT(_ZTvn24_n72_N8S19448C3D1Ev,_ZTvn12_n36_N8S19448C3D1Ev)();
extern void ABISELECT(_ZTvn24_n72_N8S19448C3D0Ev,_ZTvn12_n36_N8S19448C3D0Ev)();
extern void _ZN8S19448C63v14Ev();
extern void _ZN8S19448C63v15Ev();
extern void _ZN8S19448C63v16Ev();
extern void _ZN8S19448C63v17Ev();
extern void _ZN8S19448C63v18Ev();
extern void _ZN8S19448C63v19Ev();
static  VTBL_ENTRY _tg__ZTV8S19448C68S19448C4__8S19448C38S19448C2__8S19448C1[] = {
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S19448C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N8S19448C3D1Ev,_ZTvn12_n36_N8S19448C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N8S19448C3D0Ev,_ZTvn12_n36_N8S19448C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19448C63v14Ev,
  (VTBL_ENTRY)&_ZN8S19448C63v15Ev,
  (VTBL_ENTRY)&_ZN8S19448C63v16Ev,
  (VTBL_ENTRY)&_ZN8S19448C63v17Ev,
  (VTBL_ENTRY)&_ZN8S19448C63v18Ev,
  (VTBL_ENTRY)&_ZN8S19448C63v19Ev,
};
extern void _ZN8S19448C73v25Ev();
extern void _ZN8S19448C73v26Ev();
extern void _ZN8S19448C73v27Ev();
extern void _ZN8S19448C73v28Ev();
extern void _ZN8S19448C73v29Ev();
static  VTBL_ENTRY _tg__ZTV8S19448C7__8S19448C38S19448C2__8S19448C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S19448C3[0]),
  (VTBL_ENTRY)&_ZN8S19448C73v25Ev,
  (VTBL_ENTRY)&_ZN8S19448C73v26Ev,
  (VTBL_ENTRY)&_ZN8S19448C73v27Ev,
  (VTBL_ENTRY)&_ZN8S19448C73v28Ev,
  (VTBL_ENTRY)&_ZN8S19448C73v29Ev,
};
extern void _ZN8S19448C52v8Ev();
extern void _ZN8S19448C52v9Ev();
extern void _ZN8S19448C53v10Ev();
extern void _ZN8S19448C53v11Ev();
extern void _ZN8S19448C53v12Ev();
extern void _ZN8S19448C53v13Ev();
extern void ABISELECT(_ZTv0_n72_N8S19448C2D1Ev,_ZTv0_n36_N8S19448C2D1Ev)();
extern void ABISELECT(_ZThn16_N8S19448C2D1Ev,_ZThn8_N8S19448C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S19448C2D0Ev,_ZTv0_n36_N8S19448C2D0Ev)();
extern void ABISELECT(_ZThn16_N8S19448C2D0Ev,_ZThn8_N8S19448C2D0Ev)() __attribute__((weak));
extern void _ZN8S19448C43v20Ev();
extern void _ZN8S19448C43v21Ev();
extern void _ZN8S19448C43v22Ev();
extern void _ZN8S19448C43v23Ev();
extern void _ZN8S19448C43v24Ev();
static  VTBL_ENTRY _tg__ZTV8S19448C4__8S19448C2__8S19448C1[] = {
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  ABISELECT(24,12),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19448C2[0]),
  (VTBL_ENTRY)&_ZN8S19448C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19448C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19448C53v10Ev,
  (VTBL_ENTRY)&_ZN8S19448C53v11Ev,
  (VTBL_ENTRY)&_ZN8S19448C53v12Ev,
  (VTBL_ENTRY)&_ZN8S19448C53v13Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19448C2D1Ev,_ZTv0_n36_N8S19448C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19448C2D0Ev,_ZTv0_n36_N8S19448C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19448C43v20Ev,
  (VTBL_ENTRY)&_ZN8S19448C43v21Ev,
  (VTBL_ENTRY)&_ZN8S19448C43v22Ev,
  (VTBL_ENTRY)&_ZN8S19448C43v23Ev,
  (VTBL_ENTRY)&_ZN8S19448C43v24Ev,
};
extern void ABISELECT(_ZTvn24_n72_N8S19448C2D1Ev,_ZTvn12_n36_N8S19448C2D1Ev)();
extern void ABISELECT(_ZTvn24_n72_N8S19448C2D0Ev,_ZTvn12_n36_N8S19448C2D0Ev)();
extern void _ZN8S19448C63v14Ev();
extern void _ZN8S19448C63v15Ev();
extern void _ZN8S19448C63v16Ev();
extern void _ZN8S19448C63v17Ev();
extern void _ZN8S19448C63v18Ev();
extern void _ZN8S19448C63v19Ev();
static  VTBL_ENTRY _tg__ZTV8S19448C68S19448C4__8S19448C2__8S19448C1[] = {
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S19448C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N8S19448C2D1Ev,_ZTvn12_n36_N8S19448C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n72_N8S19448C2D0Ev,_ZTvn12_n36_N8S19448C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19448C63v14Ev,
  (VTBL_ENTRY)&_ZN8S19448C63v15Ev,
  (VTBL_ENTRY)&_ZN8S19448C63v16Ev,
  (VTBL_ENTRY)&_ZN8S19448C63v17Ev,
  (VTBL_ENTRY)&_ZN8S19448C63v18Ev,
  (VTBL_ENTRY)&_ZN8S19448C63v19Ev,
};
extern void _ZN8S19448C73v25Ev();
extern void _ZN8S19448C73v26Ev();
extern void _ZN8S19448C73v27Ev();
extern void _ZN8S19448C73v28Ev();
extern void _ZN8S19448C73v29Ev();
static  VTBL_ENTRY _tg__ZTV8S19448C7__8S19448C2__8S19448C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S19448C2[0]),
  (VTBL_ENTRY)&_ZN8S19448C73v25Ev,
  (VTBL_ENTRY)&_ZN8S19448C73v26Ev,
  (VTBL_ENTRY)&_ZN8S19448C73v27Ev,
  (VTBL_ENTRY)&_ZN8S19448C73v28Ev,
  (VTBL_ENTRY)&_ZN8S19448C73v29Ev,
};
static  VTT_ENTRY vtt_S19448C1[] = {
  {&(_ZTV8S19448C1[5]),  5,95},
  {&(_ZTV8S19448C1[31]),  31,95},
  {&(_ZTV8S19448C1[60]),  60,95},
  {&(_ZTV8S19448C1[75]),  75,95},
  {&(_ZTV8S19448C1[90]),  90,95},
  {&(_tg__ZTV8S19448C2__8S19448C1[4]),  4,13},
  {&(_tg__ZTV8S19448C38S19448C2__8S19448C1[4]),  4,8},
  {&(_tg__ZTV8S19448C4__8S19448C38S19448C2__8S19448C1[20]),  20,33},
  {&(_tg__ZTV8S19448C68S19448C4__8S19448C38S19448C2__8S19448C1[2]),  2,10},
  {&(_tg__ZTV8S19448C7__8S19448C38S19448C2__8S19448C1[7]),  7,12},
  {&(_tg__ZTV8S19448C4__8S19448C2__8S19448C1[20]),  20,33},
  {&(_tg__ZTV8S19448C68S19448C4__8S19448C2__8S19448C1[2]),  2,10},
  {&(_tg__ZTV8S19448C7__8S19448C2__8S19448C1[7]),  7,12},
};
extern VTBL_ENTRY _ZTI8S19448C1[];
extern  VTBL_ENTRY _ZTV8S19448C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19448C1[];
static VTBL_ENTRY alt_thunk_names36[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19448C2D0Ev,_ZTv0_n36_N8S19448C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19448C2D0Ev,_ZThn8_N8S19448C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19448C2D1Ev,_ZTv0_n36_N8S19448C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19448C2D1Ev,_ZThn8_N8S19448C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19448C3D0Ev,_ZTv0_n36_N8S19448C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19448C3D0Ev,_ZThn8_N8S19448C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19448C3D1Ev,_ZTv0_n36_N8S19448C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19448C3D1Ev,_ZThn8_N8S19448C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19448C1D0Ev,_ZTv0_n36_N8S19448C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S19448C1D0Ev,_ZThn20_N8S19448C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19448C1D1Ev,_ZTv0_n36_N8S19448C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S19448C1D1Ev,_ZThn20_N8S19448C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19448C1D0Ev,_ZTv0_n20_N8S19448C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19448C1D0Ev,_ZThn12_N8S19448C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19448C1D1Ev,_ZTv0_n20_N8S19448C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19448C1D1Ev,_ZThn12_N8S19448C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19448C1 = {  "S19448C1", // class name
  bases_S19448C1, 7,
  &(vtc_S19448C1[0]), // expected_vtbl_contents
  &(vtt_S19448C1[0]), // expected_vtt_contents
  ABISELECT(96,48), // object size
  NSPAIRA(_ZTI8S19448C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19448C1),95, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19448C1),13, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names36,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16968C4_nt  {
  char s16968c4f0;
  char s16968c4f1[15];
  void  mf16968c4(); // _ZN11S16968C4_nt9mf16968c4Ev
};
//SIG(-1 S16968C4_nt) C1{ m Fc[16]}


void  S16968C4_nt ::mf16968c4(){}

//skip512 S16968C4_nt

#else // __cplusplus

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

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

#ifdef __cplusplus

struct  S16968C3_nt  : S16968C4_nt {
};
//SIG(-1 S16968C3_nt) C1{ BC2{ m Fc[16]}}



//skip512 S16968C3_nt

#else // __cplusplus

extern Class_Descriptor cd_S16968C4_nt;
static Base_Class bases_S16968C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16968C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S16968C3_nt = {  "S16968C3_nt", // class name
  bases_S16968C3_nt, 1,
  0, // no vftv
  0, //no vtt
  16, // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16968C2_nt  : S16968C3_nt {
};
//SIG(-1 S16968C2_nt) C1{ BC2{ BC3{ m Fc[16]}}}



//skip512 S16968C2_nt

#else // __cplusplus

extern Class_Descriptor cd_S16968C4_nt;
extern Class_Descriptor cd_S16968C3_nt;
static Base_Class bases_S16968C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16968C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S16968C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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  S16968C6_nt  {
  ::S16968C4_nt s16968c6f0;
  ::S16968C4_nt s16968c6f1;
  ::S16968C4_nt s16968c6f2;
  ::S16968C4_nt s16968c6f3;
  void  mf16968c6(); // _ZN11S16968C6_nt9mf16968c6Ev
};
//SIG(-1 S16968C6_nt) C1{ m FC2{ m Fc[16]} FC2 FC2 FC2}


void  S16968C6_nt ::mf16968c6(){}

//skip512 S16968C6_nt

#else // __cplusplus

Class_Descriptor cd_S16968C6_nt = {  "S16968C6_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  64, // 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  S16968C5_nt  : S16968C6_nt {
};
//SIG(-1 S16968C5_nt) C1{ BC2{ m FC3{ m Fc[16]} FC3 FC3 FC3}}



//skip512 S16968C5_nt

#else // __cplusplus

extern Class_Descriptor cd_S16968C6_nt;
static Base_Class bases_S16968C5_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16968C6_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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  S16968C7_nt  {
  ::S16968C2_nt s16968c7f0;
  ::S16968C2_nt s16968c7f1;
  ::S16968C2_nt s16968c7f2;
  ::S16968C2_nt s16968c7f3;
  ::S16968C2_nt s16968c7f4;
};
//SIG(-1 S16968C7_nt) C1{ FC2{ BC3{ BC4{ m Fc[16]}}} FC2 FC2 FC2 FC2}



//skip512 S16968C7_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16968C10  {
  char s16968c10f0;
  char s16968c10f1[15];
  void  mf16968c10(); // _ZN9S16968C1010mf16968c10Ev
};
//SIG(-1 S16968C10) C1{ m Fc[16]}


void  S16968C10 ::mf16968c10(){}

static void Test_S16968C10()
{
  {
    init_simple_test("S16968C10");
    S16968C10 lv;
    check2(sizeof(lv), 16, "sizeof(S16968C10)");
    check2(__alignof__(lv), 1, "__alignof__(S16968C10)");
    check_field_offset(lv, s16968c10f0, 0, "S16968C10.s16968c10f0");
    check_field_offset(lv, s16968c10f1, 1, "S16968C10.s16968c10f1");
  }
}
static Arrange_To_Call_Me vS16968C10(Test_S16968C10, "S16968C10", 16);

#else // __cplusplus

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

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

#ifdef __cplusplus

struct  S16968C9  : S16968C10 {
};
//SIG(-1 S16968C9) C1{ BC2{ m Fc[16]}}



static void Test_S16968C9()
{
  extern Class_Descriptor cd_S16968C9;
  void *lvp;
  {
    char buf[16];
    init_test(&cd_S16968C9, buf);
    S16968C9 &lv = *(new (buf) S16968C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), 16, "sizeof(S16968C9)");
    check2(__alignof__(lv), 1, "__alignof__(S16968C9)");
    check_base_class_offset(lv, (S16968C10*), 0, "S16968C9");
    test_class_info(&lv, &cd_S16968C9);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS16968C9(Test_S16968C9, "S16968C9", 16);

#else // __cplusplus

extern Class_Descriptor cd_S16968C10;
static Base_Class bases_S16968C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16968C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S16968C9 = {  "S16968C9", // class name
  bases_S16968C9, 1,
  0, // no vftv
  0, //no vtt
  16, // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16968C8_nt  {
  ::S16968C9 s16968c8f0;
  ::S16968C9 s16968c8f1;
  int s16968c8f2[5];
};
//SIG(-1 S16968C8_nt) C1{ FC2{ BC3{ m Fc[16]}} FC2 Fi[5]}



//skip512 S16968C8_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16968C1  {
  int s16968c1f0;
  void *s16968c1f1[2];
  int s16968c1f2[2];
  void *s16968c1f3[4];
  int s16968c1f4;
  ::S16968C2_nt s16968c1f5;
  ::S16968C5_nt s16968c1f6;
  ::S16968C5_nt s16968c1f7;
  ::S16968C5_nt s16968c1f8;
  ::S16968C5_nt s16968c1f9;
  char s16968c1f10;
  ::S16968C7_nt s16968c1f11;
  ::S16968C8_nt s16968c1f12;
  char s16968c1f13[3];
  int s16968c1f14[3];
  void *s16968c1f15;
  int s16968c1f16;
  void *s16968c1f17;
  void  mf16968c1(); // _ZN8S16968C19mf16968c1Ev
};
//SIG(1 S16968C1) C1{ m Fi Fp[2] Fi[2] Fp[4] Fi FC2{ BC3{ BC4{ m Fc[16]}}} FC5{ BC6{ m FC4 FC4 FC4 FC4}} FC5 FC5 FC5 Fc FC7{ FC2 FC2 FC2 FC2 FC2} FC8{ FC9{ BC10{ m Fc[16]}} FC9 Fi[5]} Fc[3] Fi[3] Fp Fi Fp}


void  S16968C1 ::mf16968c1(){}

static void Test_S16968C1()
{
  {
    init_simple_test("S16968C1");
    S16968C1 lv;
    check2(sizeof(lv), ABISELECT(520,476), "sizeof(S16968C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16968C1)");
    check_field_offset(lv, s16968c1f0, 0, "S16968C1.s16968c1f0");
    check_field_offset(lv, s16968c1f1, ABISELECT(8,4), "S16968C1.s16968c1f1");
    check_field_offset(lv, s16968c1f2, ABISELECT(24,12), "S16968C1.s16968c1f2");
    check_field_offset(lv, s16968c1f3, ABISELECT(32,20), "S16968C1.s16968c1f3");
    check_field_offset(lv, s16968c1f4, ABISELECT(64,36), "S16968C1.s16968c1f4");
    check_field_offset(lv, s16968c1f5, ABISELECT(68,40), "S16968C1.s16968c1f5");
    check_field_offset(lv, s16968c1f6, ABISELECT(84,56), "S16968C1.s16968c1f6");
    check_field_offset(lv, s16968c1f7, ABISELECT(148,120), "S16968C1.s16968c1f7");
    check_field_offset(lv, s16968c1f8, ABISELECT(212,184), "S16968C1.s16968c1f8");
    check_field_offset(lv, s16968c1f9, ABISELECT(276,248), "S16968C1.s16968c1f9");
    check_field_offset(lv, s16968c1f10, ABISELECT(340,312), "S16968C1.s16968c1f10");
    check_field_offset(lv, s16968c1f11, ABISELECT(341,313), "S16968C1.s16968c1f11");
    check_field_offset(lv, s16968c1f12, ABISELECT(424,396), "S16968C1.s16968c1f12");
    check_field_offset(lv, s16968c1f13, ABISELECT(476,448), "S16968C1.s16968c1f13");
    check_field_offset(lv, s16968c1f14, ABISELECT(480,452), "S16968C1.s16968c1f14");
    check_field_offset(lv, s16968c1f15, ABISELECT(496,464), "S16968C1.s16968c1f15");
    check_field_offset(lv, s16968c1f16, ABISELECT(504,468), "S16968C1.s16968c1f16");
    check_field_offset(lv, s16968c1f17, ABISELECT(512,472), "S16968C1.s16968c1f17");
  }
}
static Arrange_To_Call_Me vS16968C1(Test_S16968C1, "S16968C1", ABISELECT(520,476));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20936C3  {
  ::S601C21_nt s20936c3f0;
  void *s20936c3f1;
  virtual void  v9(); // _ZN8S20936C32v9Ev
  virtual void  v10(); // _ZN8S20936C33v10Ev
  virtual void  v11(); // _ZN8S20936C33v11Ev
  virtual void  v12(); // _ZN8S20936C33v12Ev
  virtual void  v13(); // _ZN8S20936C33v13Ev
  ~S20936C3(); // tgen
  S20936C3(); // tgen
};
//SIG(-1 S20936C3) C1{ v1 v2 v3 v4 v5 FC2{} Fp}


void  S20936C3 ::v9(){vfunc_called(this, "_ZN8S20936C32v9Ev");}
void  S20936C3 ::v10(){vfunc_called(this, "_ZN8S20936C33v10Ev");}
void  S20936C3 ::v11(){vfunc_called(this, "_ZN8S20936C33v11Ev");}
void  S20936C3 ::v12(){vfunc_called(this, "_ZN8S20936C33v12Ev");}
void  S20936C3 ::v13(){vfunc_called(this, "_ZN8S20936C33v13Ev");}
S20936C3 ::~S20936C3(){ note_dtor("S20936C3", this);} // tgen
S20936C3 ::S20936C3(){ note_ctor("S20936C3", this);} // tgen

static void Test_S20936C3()
{
  extern Class_Descriptor cd_S20936C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S20936C3, buf);
    S20936C3 *dp, &lv = *(dp=new (buf) S20936C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S20936C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20936C3)");
    check_field_offset(lv, s20936c3f0, ABISELECT(8,4), "S20936C3.s20936c3f0");
    check_field_offset(lv, s20936c3f1, ABISELECT(16,8), "S20936C3.s20936c3f1");
    test_class_info(&lv, &cd_S20936C3);
    dp->~S20936C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20936C3(Test_S20936C3, "S20936C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S20936C3C1Ev();
extern void _ZN8S20936C3D1Ev();
Name_Map name_map_S20936C3[] = {
  NSPAIR(_ZN8S20936C3C1Ev),
  NSPAIR(_ZN8S20936C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20936C3[];
extern void _ZN8S20936C32v9Ev();
extern void _ZN8S20936C33v10Ev();
extern void _ZN8S20936C33v11Ev();
extern void _ZN8S20936C33v12Ev();
extern void _ZN8S20936C33v13Ev();
static  VTBL_ENTRY vtc_S20936C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20936C3[0]),
  (VTBL_ENTRY)&_ZN8S20936C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20936C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20936C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20936C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20936C33v13Ev,
};
extern VTBL_ENTRY _ZTI8S20936C3[];
extern  VTBL_ENTRY _ZTV8S20936C3[];
Class_Descriptor cd_S20936C3 = {  "S20936C3", // class name
  0,0,//no base classes
  &(vtc_S20936C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S20936C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20936C3),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  S20936C6  {
  ::S601C21_nt s20936c6f0;
  virtual void  v14(); // _ZN8S20936C63v14Ev
  virtual void  v15(); // _ZN8S20936C63v15Ev
  virtual void  v16(); // _ZN8S20936C63v16Ev
  virtual void  v17(); // _ZN8S20936C63v17Ev
  ~S20936C6(); // tgen
  S20936C6(); // tgen
};
//SIG(-1 S20936C6) C1{ v1 v2 v3 v4 FC2{}}


void  S20936C6 ::v14(){vfunc_called(this, "_ZN8S20936C63v14Ev");}
void  S20936C6 ::v15(){vfunc_called(this, "_ZN8S20936C63v15Ev");}
void  S20936C6 ::v16(){vfunc_called(this, "_ZN8S20936C63v16Ev");}
void  S20936C6 ::v17(){vfunc_called(this, "_ZN8S20936C63v17Ev");}
S20936C6 ::~S20936C6(){ note_dtor("S20936C6", this);} // tgen
S20936C6 ::S20936C6(){ note_ctor("S20936C6", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S20936C6C1Ev();
extern void _ZN8S20936C6D1Ev();
Name_Map name_map_S20936C6[] = {
  NSPAIR(_ZN8S20936C6C1Ev),
  NSPAIR(_ZN8S20936C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20936C6[];
extern void _ZN8S20936C63v14Ev();
extern void _ZN8S20936C63v15Ev();
extern void _ZN8S20936C63v16Ev();
extern void _ZN8S20936C63v17Ev();
static  VTBL_ENTRY vtc_S20936C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20936C6[0]),
  (VTBL_ENTRY)&_ZN8S20936C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20936C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20936C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20936C63v17Ev,
};
extern VTBL_ENTRY _ZTI8S20936C6[];
extern  VTBL_ENTRY _ZTV8S20936C6[];
Class_Descriptor cd_S20936C6 = {  "S20936C6", // class name
  0,0,//no base classes
  &(vtc_S20936C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S20936C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20936C6),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20936C7  : S20936C3 {
  ::S20936C3 s20936c7f0;
  virtual void  v18(); // _ZN8S20936C73v18Ev
  virtual void  v19(); // _ZN8S20936C73v19Ev
  virtual void  v20(); // _ZN8S20936C73v20Ev
  virtual void  v21(); // _ZN8S20936C73v21Ev
  virtual void  v22(); // _ZN8S20936C73v22Ev
  virtual void  v23(); // _ZN8S20936C73v23Ev
  virtual void  v24(); // _ZN8S20936C73v24Ev
  ~S20936C7(); // tgen
  S20936C7(); // tgen
};
//SIG(-1 S20936C7) C1{ BC2{ v8 v9 v10 v11 v12 FC3{} Fp} v1 v2 v3 v4 v5 v6 v7 FC2}


void  S20936C7 ::v18(){vfunc_called(this, "_ZN8S20936C73v18Ev");}
void  S20936C7 ::v19(){vfunc_called(this, "_ZN8S20936C73v19Ev");}
void  S20936C7 ::v20(){vfunc_called(this, "_ZN8S20936C73v20Ev");}
void  S20936C7 ::v21(){vfunc_called(this, "_ZN8S20936C73v21Ev");}
void  S20936C7 ::v22(){vfunc_called(this, "_ZN8S20936C73v22Ev");}
void  S20936C7 ::v23(){vfunc_called(this, "_ZN8S20936C73v23Ev");}
void  S20936C7 ::v24(){vfunc_called(this, "_ZN8S20936C73v24Ev");}
S20936C7 ::~S20936C7(){ note_dtor("S20936C7", this);} // tgen
S20936C7 ::S20936C7(){ note_ctor("S20936C7", this);} // tgen

static void Test_S20936C7()
{
  extern Class_Descriptor cd_S20936C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[7];
    init_test(&cd_S20936C7, buf);
    S20936C7 *dp, &lv = *(dp=new (buf) S20936C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S20936C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20936C7)");
    check_base_class_offset(lv, (S20936C3*), 0, "S20936C7");
    check_field_offset(lv, s20936c7f0, ABISELECT(24,12), "S20936C7.s20936c7f0");
    test_class_info(&lv, &cd_S20936C7);
    dp->~S20936C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20936C7(Test_S20936C7, "S20936C7", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN8S20936C7C1Ev();
extern void _ZN8S20936C7D1Ev();
Name_Map name_map_S20936C7[] = {
  NSPAIR(_ZN8S20936C7C1Ev),
  NSPAIR(_ZN8S20936C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20936C3;
extern VTBL_ENTRY _ZTI8S20936C3[];
extern  VTBL_ENTRY _ZTV8S20936C3[];
static Base_Class bases_S20936C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20936C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20936C7[];
extern void _ZN8S20936C32v9Ev();
extern void _ZN8S20936C33v10Ev();
extern void _ZN8S20936C33v11Ev();
extern void _ZN8S20936C33v12Ev();
extern void _ZN8S20936C33v13Ev();
extern void _ZN8S20936C73v18Ev();
extern void _ZN8S20936C73v19Ev();
extern void _ZN8S20936C73v20Ev();
extern void _ZN8S20936C73v21Ev();
extern void _ZN8S20936C73v22Ev();
extern void _ZN8S20936C73v23Ev();
extern void _ZN8S20936C73v24Ev();
static  VTBL_ENTRY vtc_S20936C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20936C7[0]),
  (VTBL_ENTRY)&_ZN8S20936C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20936C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20936C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20936C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20936C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20936C73v18Ev,
  (VTBL_ENTRY)&_ZN8S20936C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20936C73v20Ev,
  (VTBL_ENTRY)&_ZN8S20936C73v21Ev,
  (VTBL_ENTRY)&_ZN8S20936C73v22Ev,
  (VTBL_ENTRY)&_ZN8S20936C73v23Ev,
  (VTBL_ENTRY)&_ZN8S20936C73v24Ev,
};
extern VTBL_ENTRY _ZTI8S20936C7[];
extern  VTBL_ENTRY _ZTV8S20936C7[];
Class_Descriptor cd_S20936C7 = {  "S20936C7", // class name
  bases_S20936C7, 1,
  &(vtc_S20936C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI8S20936C7),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S20936C7),14, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20936C5  : S20936C6 , virtual S20936C7 {
  virtual  ~S20936C5(); // _ZN8S20936C5D2Ev
  virtual void  v25(); // _ZN8S20936C53v25Ev
  S20936C5(); // tgen
};
//SIG(-1 S20936C5) C1{ BC2{ v2 v3 v4 v5 FC3{}} VBC4{ BC5{ v6 v7 v8 v9 v10 FC3 Fp} v11 v12 v13 v14 v15 v16 v17 FC5} vd v1}


 S20936C5 ::~S20936C5(){ note_dtor("S20936C5", this);}
void  S20936C5 ::v25(){vfunc_called(this, "_ZN8S20936C53v25Ev");}
S20936C5 ::S20936C5(){ note_ctor("S20936C5", this);} // tgen

static void Test_S20936C5()
{
  extern Class_Descriptor cd_S20936C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[9];
    init_test(&cd_S20936C5, buf);
    S20936C5 *dp, &lv = *(dp=new (buf) S20936C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S20936C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20936C5)");
    check_base_class_offset(lv, (S20936C6*), 0, "S20936C5");
    check_base_class_offset(lv, (S20936C3*)(S20936C7*), ABISELECT(16,8), "S20936C5");
    check_base_class_offset(lv, (S20936C7*), ABISELECT(16,8), "S20936C5");
    test_class_info(&lv, &cd_S20936C5);
    dp->~S20936C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20936C5(Test_S20936C5, "S20936C5", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN8S20936C5C1Ev();
extern void _ZN8S20936C5D2Ev();
Name_Map name_map_S20936C5[] = {
  NSPAIR(_ZN8S20936C5C1Ev),
  NSPAIR(_ZN8S20936C5D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20936C6;
extern VTBL_ENTRY _ZTI8S20936C6[];
extern  VTBL_ENTRY _ZTV8S20936C6[];
extern Class_Descriptor cd_S20936C3;
extern VTBL_ENTRY _ZTI8S20936C3[];
extern  VTBL_ENTRY _ZTV8S20936C3[];
extern Class_Descriptor cd_S20936C7;
extern VTBL_ENTRY _ZTI8S20936C7[];
extern  VTBL_ENTRY _ZTV8S20936C7[];
static Base_Class bases_S20936C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20936C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20936C3,    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, 0},
  {&cd_S20936C7,    ABISELECT(16,8), //bcp->offset
    10, //bcp->virtual_function_table_offset
    14, //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 _ZTI8S20936C5[];
extern void _ZN8S20936C63v14Ev();
extern void _ZN8S20936C63v15Ev();
extern void _ZN8S20936C63v16Ev();
extern void _ZN8S20936C63v17Ev();
extern void _ZN8S20936C5D1Ev();
extern void _ZN8S20936C5D0Ev();
extern void _ZN8S20936C53v25Ev();
extern void _ZN8S20936C32v9Ev();
extern void _ZN8S20936C33v10Ev();
extern void _ZN8S20936C33v11Ev();
extern void _ZN8S20936C33v12Ev();
extern void _ZN8S20936C33v13Ev();
extern void _ZN8S20936C73v18Ev();
extern void _ZN8S20936C73v19Ev();
extern void _ZN8S20936C73v20Ev();
extern void _ZN8S20936C73v21Ev();
extern void _ZN8S20936C73v22Ev();
extern void _ZN8S20936C73v23Ev();
extern void _ZN8S20936C73v24Ev();
static  VTBL_ENTRY vtc_S20936C5[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20936C5[0]),
  (VTBL_ENTRY)&_ZN8S20936C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20936C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20936C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20936C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20936C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20936C5D0Ev,
  (VTBL_ENTRY)&_ZN8S20936C53v25Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20936C5[0]),
  (VTBL_ENTRY)&_ZN8S20936C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20936C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20936C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20936C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20936C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20936C73v18Ev,
  (VTBL_ENTRY)&_ZN8S20936C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20936C73v20Ev,
  (VTBL_ENTRY)&_ZN8S20936C73v21Ev,
  (VTBL_ENTRY)&_ZN8S20936C73v22Ev,
  (VTBL_ENTRY)&_ZN8S20936C73v23Ev,
  (VTBL_ENTRY)&_ZN8S20936C73v24Ev,
};
extern VTBL_ENTRY _ZTV8S20936C5[];
static  VTT_ENTRY vtt_S20936C5[] = {
  {&(_ZTV8S20936C5[3]),  3,36},
  {&(_ZTV8S20936C5[24]),  24,36},
};
extern VTBL_ENTRY _ZTI8S20936C5[];
extern  VTBL_ENTRY _ZTV8S20936C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20936C5[];
Class_Descriptor cd_S20936C5 = {  "S20936C5", // class name
  bases_S20936C5, 3,
  &(vtc_S20936C5[0]), // expected_vtbl_contents
  &(vtt_S20936C5[0]), // expected_vtt_contents
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI8S20936C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20936C5),36, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20936C5),2, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20936C2  : virtual S20936C3 , S20936C5 {
  int s20936c2f0[4];
  virtual  ~S20936C2(); // _ZN8S20936C2D2Ev
  virtual void  v26(); // _ZN8S20936C23v26Ev
  virtual void  v27(); // _ZN8S20936C23v27Ev
  virtual void  v28(); // _ZN8S20936C23v28Ev
  virtual void  v29(); // _ZN8S20936C23v29Ev
  virtual void  v30(); // _ZN8S20936C23v30Ev
  virtual void  v31(); // _ZN8S20936C23v31Ev
  virtual void  v32(); // _ZN8S20936C23v32Ev
  virtual void  v33(); // _ZN8S20936C23v33Ev
  S20936C2(); // tgen
};
//SIG(-1 S20936C2) C1{ VBC2{ v9 v10 v11 v12 v13 FC3{} Fp} BC4{ BC5{ v14 v15 v16 v17 FC3} VBC6{ BC2 v18 v19 v20 v21 v22 v23 v24 FC2} vd v25} vd v1 v2 v3 v4 v5 v6 v7 v8 Fi[4]}


 S20936C2 ::~S20936C2(){ note_dtor("S20936C2", this);}
void  S20936C2 ::v26(){vfunc_called(this, "_ZN8S20936C23v26Ev");}
void  S20936C2 ::v27(){vfunc_called(this, "_ZN8S20936C23v27Ev");}
void  S20936C2 ::v28(){vfunc_called(this, "_ZN8S20936C23v28Ev");}
void  S20936C2 ::v29(){vfunc_called(this, "_ZN8S20936C23v29Ev");}
void  S20936C2 ::v30(){vfunc_called(this, "_ZN8S20936C23v30Ev");}
void  S20936C2 ::v31(){vfunc_called(this, "_ZN8S20936C23v31Ev");}
void  S20936C2 ::v32(){vfunc_called(this, "_ZN8S20936C23v32Ev");}
void  S20936C2 ::v33(){vfunc_called(this, "_ZN8S20936C23v33Ev");}
S20936C2 ::S20936C2(){ note_ctor("S20936C2", this);} // tgen

static void Test_S20936C2()
{
  extern Class_Descriptor cd_S20936C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,16)];
    init_test(&cd_S20936C2, buf);
    S20936C2 *dp, &lv = *(dp=new (buf) S20936C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,60), "sizeof(S20936C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20936C2)");
    /*is_ambiguous_... S20936C2::S20936C3 */ AMB_check_base_class_offset(lv, (S20936C3*), ABISELECT(32,24), "S20936C2");
    check_base_class_offset(lv, (S20936C6*)(S20936C5*), 0, "S20936C2");
    check_base_class_offset(lv, (S20936C3*)(S20936C7*), ABISELECT(56,36), "S20936C2");
    check_base_class_offset(lv, (S20936C7*)(S20936C5*), ABISELECT(56,36), "S20936C2");
    check_base_class_offset(lv, (S20936C5*), 0, "S20936C2");
    check_field_offset(lv, s20936c2f0, ABISELECT(12,8), "S20936C2.s20936c2f0");
    test_class_info(&lv, &cd_S20936C2);
    dp->~S20936C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20936C2(Test_S20936C2, "S20936C2", ABISELECT(104,60));

#else // __cplusplus

extern void _ZN8S20936C2C1Ev();
extern void _ZN8S20936C2D2Ev();
Name_Map name_map_S20936C2[] = {
  NSPAIR(_ZN8S20936C2C1Ev),
  NSPAIR(_ZN8S20936C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20936C3;
extern VTBL_ENTRY _ZTI8S20936C3[];
extern  VTBL_ENTRY _ZTV8S20936C3[];
extern Class_Descriptor cd_S20936C6;
extern VTBL_ENTRY _ZTI8S20936C6[];
extern  VTBL_ENTRY _ZTV8S20936C6[];
extern Class_Descriptor cd_S20936C3;
extern VTBL_ENTRY _ZTI8S20936C3[];
extern  VTBL_ENTRY _ZTV8S20936C3[];
extern Class_Descriptor cd_S20936C7;
extern VTBL_ENTRY _ZTI8S20936C7[];
extern  VTBL_ENTRY _ZTV8S20936C7[];
extern Class_Descriptor cd_S20936C5;
extern VTBL_ENTRY _ZTI8S20936C5[];
extern  VTBL_ENTRY _ZTV8S20936C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20936C5[];
static Base_Class bases_S20936C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20936C3,    ABISELECT(32,24), //bcp->offset
    19, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20936C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S20936C3,    ABISELECT(56,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20936C7,    ABISELECT(56,36), //bcp->offset
    31, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20936C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20936C2[];
extern void _ZN8S20936C63v14Ev();
extern void _ZN8S20936C63v15Ev();
extern void _ZN8S20936C63v16Ev();
extern void _ZN8S20936C63v17Ev();
extern void _ZN8S20936C2D1Ev();
extern void _ZN8S20936C2D0Ev();
extern void _ZN8S20936C53v25Ev();
extern void _ZN8S20936C23v26Ev();
extern void _ZN8S20936C23v27Ev();
extern void _ZN8S20936C23v28Ev();
extern void _ZN8S20936C23v29Ev();
extern void _ZN8S20936C23v30Ev();
extern void _ZN8S20936C23v31Ev();
extern void _ZN8S20936C23v32Ev();
extern void _ZN8S20936C23v33Ev();
extern void _ZN8S20936C32v9Ev();
extern void _ZN8S20936C33v10Ev();
extern void _ZN8S20936C33v11Ev();
extern void _ZN8S20936C33v12Ev();
extern void _ZN8S20936C33v13Ev();
extern void _ZN8S20936C32v9Ev();
extern void _ZN8S20936C33v10Ev();
extern void _ZN8S20936C33v11Ev();
extern void _ZN8S20936C33v12Ev();
extern void _ZN8S20936C33v13Ev();
extern void _ZN8S20936C73v18Ev();
extern void _ZN8S20936C73v19Ev();
extern void _ZN8S20936C73v20Ev();
extern void _ZN8S20936C73v21Ev();
extern void _ZN8S20936C73v22Ev();
extern void _ZN8S20936C73v23Ev();
extern void _ZN8S20936C73v24Ev();
static  VTBL_ENTRY vtc_S20936C2[] = {
  ABISELECT(32,24),
  ABISELECT(56,36),
  0,
  (VTBL_ENTRY)&(_ZTI8S20936C2[0]),
  (VTBL_ENTRY)&_ZN8S20936C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20936C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20936C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20936C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20936C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20936C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20936C53v25Ev,
  (VTBL_ENTRY)&_ZN8S20936C23v26Ev,
  (VTBL_ENTRY)&_ZN8S20936C23v27Ev,
  (VTBL_ENTRY)&_ZN8S20936C23v28Ev,
  (VTBL_ENTRY)&_ZN8S20936C23v29Ev,
  (VTBL_ENTRY)&_ZN8S20936C23v30Ev,
  (VTBL_ENTRY)&_ZN8S20936C23v31Ev,
  (VTBL_ENTRY)&_ZN8S20936C23v32Ev,
  (VTBL_ENTRY)&_ZN8S20936C23v33Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI8S20936C2[0]),
  (VTBL_ENTRY)&_ZN8S20936C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20936C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20936C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20936C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20936C33v13Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI8S20936C2[0]),
  (VTBL_ENTRY)&_ZN8S20936C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20936C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20936C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20936C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20936C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20936C73v18Ev,
  (VTBL_ENTRY)&_ZN8S20936C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20936C73v20Ev,
  (VTBL_ENTRY)&_ZN8S20936C73v21Ev,
  (VTBL_ENTRY)&_ZN8S20936C73v22Ev,
  (VTBL_ENTRY)&_ZN8S20936C73v23Ev,
  (VTBL_ENTRY)&_ZN8S20936C73v24Ev,
};
extern VTBL_ENTRY _ZTV8S20936C2[];
extern void _ZN8S20936C63v14Ev();
extern void _ZN8S20936C63v15Ev();
extern void _ZN8S20936C63v16Ev();
extern void _ZN8S20936C63v17Ev();
extern void _ZN8S20936C5D1Ev();
extern void _ZN8S20936C5D0Ev();
extern void _ZN8S20936C53v25Ev();
static  VTBL_ENTRY _tg__ZTV8S20936C5__8S20936C2[] = {
  ABISELECT(56,36),
  0,
  (VTBL_ENTRY)&(_ZTI8S20936C5[0]),
  (VTBL_ENTRY)&_ZN8S20936C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20936C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20936C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20936C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20936C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20936C5D0Ev,
  (VTBL_ENTRY)&_ZN8S20936C53v25Ev,
};
extern void _ZN8S20936C32v9Ev();
extern void _ZN8S20936C33v10Ev();
extern void _ZN8S20936C33v11Ev();
extern void _ZN8S20936C33v12Ev();
extern void _ZN8S20936C33v13Ev();
extern void _ZN8S20936C73v18Ev();
extern void _ZN8S20936C73v19Ev();
extern void _ZN8S20936C73v20Ev();
extern void _ZN8S20936C73v21Ev();
extern void _ZN8S20936C73v22Ev();
extern void _ZN8S20936C73v23Ev();
extern void _ZN8S20936C73v24Ev();
static  VTBL_ENTRY _tg__ZTV8S20936C7__8S20936C5__8S20936C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI8S20936C5[0]),
  (VTBL_ENTRY)&_ZN8S20936C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20936C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20936C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20936C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20936C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20936C73v18Ev,
  (VTBL_ENTRY)&_ZN8S20936C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20936C73v20Ev,
  (VTBL_ENTRY)&_ZN8S20936C73v21Ev,
  (VTBL_ENTRY)&_ZN8S20936C73v22Ev,
  (VTBL_ENTRY)&_ZN8S20936C73v23Ev,
  (VTBL_ENTRY)&_ZN8S20936C73v24Ev,
};
static  VTT_ENTRY vtt_S20936C2[] = {
  {&(_ZTV8S20936C2[4]),  4,57},
  {&(_tg__ZTV8S20936C5__8S20936C2[3]),  3,10},
  {&(_tg__ZTV8S20936C7__8S20936C5__8S20936C2[14]),  14,26},
  {&(_ZTV8S20936C2[26]),  26,57},
  {&(_ZTV8S20936C2[45]),  45,57},
};
extern VTBL_ENTRY _ZTI8S20936C2[];
extern  VTBL_ENTRY _ZTV8S20936C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20936C2[];
Class_Descriptor cd_S20936C2 = {  "S20936C2", // class name
  bases_S20936C2, 5,
  &(vtc_S20936C2[0]), // expected_vtbl_contents
  &(vtt_S20936C2[0]), // expected_vtt_contents
  ABISELECT(104,60), // object size
  NSPAIRA(_ZTI8S20936C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20936C2),57, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20936C2),5, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20936C1  : virtual S20936C2 {
  virtual void  v1(); // _ZN8S20936C12v1Ev
  virtual void  v2(); // _ZN8S20936C12v2Ev
  virtual void  v3(); // _ZN8S20936C12v3Ev
  virtual void  v4(); // _ZN8S20936C12v4Ev
  virtual void  v5(); // _ZN8S20936C12v5Ev
  virtual void  v6(); // _ZN8S20936C12v6Ev
  virtual void  v7(); // _ZN8S20936C12v7Ev
  virtual void  v8(); // _ZN8S20936C12v8Ev
  ~S20936C1(); // tgen
  S20936C1(); // tgen
};
//SIG(1 S20936C1) C1{ VBC2{ VBC3{ v9 v10 v11 v12 v13 FC4{} Fp} BC5{ BC6{ v14 v15 v16 v17 FC4} VBC7{ BC3 v18 v19 v20 v21 v22 v23 v24 FC3} vd v25} vd v26 v27 v28 v29 v30 v31 v32 v33 Fi[4]} v1 v2 v3 v4 v5 v6 v7 v8}


void  S20936C1 ::v1(){vfunc_called(this, "_ZN8S20936C12v1Ev");}
void  S20936C1 ::v2(){vfunc_called(this, "_ZN8S20936C12v2Ev");}
void  S20936C1 ::v3(){vfunc_called(this, "_ZN8S20936C12v3Ev");}
void  S20936C1 ::v4(){vfunc_called(this, "_ZN8S20936C12v4Ev");}
void  S20936C1 ::v5(){vfunc_called(this, "_ZN8S20936C12v5Ev");}
void  S20936C1 ::v6(){vfunc_called(this, "_ZN8S20936C12v6Ev");}
void  S20936C1 ::v7(){vfunc_called(this, "_ZN8S20936C12v7Ev");}
void  S20936C1 ::v8(){vfunc_called(this, "_ZN8S20936C12v8Ev");}
S20936C1 ::~S20936C1(){ note_dtor("S20936C1", this);} // tgen
S20936C1 ::S20936C1(){ note_ctor("S20936C1", this);} // tgen

static void Test_S20936C1()
{
  extern Class_Descriptor cd_S20936C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,17)];
    init_test(&cd_S20936C1, buf);
    S20936C1 *dp, &lv = *(dp=new (buf) S20936C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,64), "sizeof(S20936C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20936C1)");
    /*is_ambiguous_... S20936C2::S20936C3 */ AMB_check_base_class_offset(lv, (S20936C3*)(S20936C2*), ABISELECT(40,28), "S20936C1");
    check_base_class_offset(lv, (S20936C6*)(S20936C5*)(S20936C2*), ABISELECT(8,4), "S20936C1");
    check_base_class_offset(lv, (S20936C3*)(S20936C7*), ABISELECT(64,40), "S20936C1");
    check_base_class_offset(lv, (S20936C7*)(S20936C5*)(S20936C2*), ABISELECT(64,40), "S20936C1");
    check_base_class_offset(lv, (S20936C5*)(S20936C2*), ABISELECT(8,4), "S20936C1");
    check_base_class_offset(lv, (S20936C2*), ABISELECT(8,4), "S20936C1");
    test_class_info(&lv, &cd_S20936C1);
    dp->~S20936C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20936C1(Test_S20936C1, "S20936C1", ABISELECT(112,64));

#else // __cplusplus

extern void _ZN8S20936C1C1Ev();
extern void _ZN8S20936C1D1Ev();
Name_Map name_map_S20936C1[] = {
  NSPAIR(_ZN8S20936C1C1Ev),
  NSPAIR(_ZN8S20936C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20936C3;
extern VTBL_ENTRY _ZTI8S20936C3[];
extern  VTBL_ENTRY _ZTV8S20936C3[];
extern Class_Descriptor cd_S20936C6;
extern VTBL_ENTRY _ZTI8S20936C6[];
extern  VTBL_ENTRY _ZTV8S20936C6[];
extern Class_Descriptor cd_S20936C3;
extern VTBL_ENTRY _ZTI8S20936C3[];
extern  VTBL_ENTRY _ZTV8S20936C3[];
extern Class_Descriptor cd_S20936C7;
extern VTBL_ENTRY _ZTI8S20936C7[];
extern  VTBL_ENTRY _ZTV8S20936C7[];
extern Class_Descriptor cd_S20936C5;
extern VTBL_ENTRY _ZTI8S20936C5[];
extern  VTBL_ENTRY _ZTV8S20936C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20936C5[];
extern Class_Descriptor cd_S20936C2;
extern VTBL_ENTRY _ZTI8S20936C2[];
extern  VTBL_ENTRY _ZTV8S20936C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20936C2[];
static Base_Class bases_S20936C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20936C3,    ABISELECT(40,28), //bcp->offset
    48, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20936C6,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S20936C3,    ABISELECT(64,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20936C7,    ABISELECT(64,40), //bcp->offset
    60, //bcp->virtual_function_table_offset
    14, //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_S20936C5,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20936C2,    ABISELECT(8,4), //bcp->offset
    15, //bcp->virtual_function_table_offset
    18, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20936C1[];
extern void _ZN8S20936C12v1Ev();
extern void _ZN8S20936C12v2Ev();
extern void _ZN8S20936C12v3Ev();
extern void _ZN8S20936C12v4Ev();
extern void _ZN8S20936C12v5Ev();
extern void _ZN8S20936C12v6Ev();
extern void _ZN8S20936C12v7Ev();
extern void _ZN8S20936C12v8Ev();
extern void _ZN8S20936C1D1Ev();
extern void _ZN8S20936C1D0Ev();
extern void _ZN8S20936C63v14Ev();
extern void _ZN8S20936C63v15Ev();
extern void _ZN8S20936C63v16Ev();
extern void _ZN8S20936C63v17Ev();
extern void ABISELECT(_ZTv0_n72_N8S20936C1D1Ev,_ZTv0_n36_N8S20936C1D1Ev)();
extern void ABISELECT(_ZThn8_N8S20936C1D1Ev,_ZThn4_N8S20936C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S20936C1D0Ev,_ZTv0_n36_N8S20936C1D0Ev)();
extern void ABISELECT(_ZThn8_N8S20936C1D0Ev,_ZThn4_N8S20936C1D0Ev)() __attribute__((weak));
extern void _ZN8S20936C53v25Ev();
extern void _ZN8S20936C23v26Ev();
extern void _ZN8S20936C23v27Ev();
extern void _ZN8S20936C23v28Ev();
extern void _ZN8S20936C23v29Ev();
extern void _ZN8S20936C23v30Ev();
extern void _ZN8S20936C23v31Ev();
extern void _ZN8S20936C23v32Ev();
extern void _ZN8S20936C23v33Ev();
extern void _ZN8S20936C32v9Ev();
extern void _ZN8S20936C33v10Ev();
extern void _ZN8S20936C33v11Ev();
extern void _ZN8S20936C33v12Ev();
extern void _ZN8S20936C33v13Ev();
extern void _ZN8S20936C32v9Ev();
extern void _ZN8S20936C33v10Ev();
extern void _ZN8S20936C33v11Ev();
extern void _ZN8S20936C33v12Ev();
extern void _ZN8S20936C33v13Ev();
extern void _ZN8S20936C73v18Ev();
extern void _ZN8S20936C73v19Ev();
extern void _ZN8S20936C73v20Ev();
extern void _ZN8S20936C73v21Ev();
extern void _ZN8S20936C73v22Ev();
extern void _ZN8S20936C73v23Ev();
extern void _ZN8S20936C73v24Ev();
static  VTBL_ENTRY vtc_S20936C1[] = {
  ABISELECT(64,40),
  ABISELECT(40,28),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20936C1[0]),
  (VTBL_ENTRY)&_ZN8S20936C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20936C12v2Ev,
  (VTBL_ENTRY)&_ZN8S20936C12v3Ev,
  (VTBL_ENTRY)&_ZN8S20936C12v4Ev,
  (VTBL_ENTRY)&_ZN8S20936C12v5Ev,
  (VTBL_ENTRY)&_ZN8S20936C12v6Ev,
  (VTBL_ENTRY)&_ZN8S20936C12v7Ev,
  (VTBL_ENTRY)&_ZN8S20936C12v8Ev,
  (VTBL_ENTRY)&_ZN8S20936C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20936C1D0Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  0,
  0,
  0,
  0,
  ABISELECT(32,24),
  ABISELECT(56,36),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20936C1[0]),
  (VTBL_ENTRY)&_ZN8S20936C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20936C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20936C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20936C63v17Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20936C1D1Ev,_ZTv0_n36_N8S20936C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20936C1D0Ev,_ZTv0_n36_N8S20936C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20936C53v25Ev,
  (VTBL_ENTRY)&_ZN8S20936C23v26Ev,
  (VTBL_ENTRY)&_ZN8S20936C23v27Ev,
  (VTBL_ENTRY)&_ZN8S20936C23v28Ev,
  (VTBL_ENTRY)&_ZN8S20936C23v29Ev,
  (VTBL_ENTRY)&_ZN8S20936C23v30Ev,
  (VTBL_ENTRY)&_ZN8S20936C23v31Ev,
  (VTBL_ENTRY)&_ZN8S20936C23v32Ev,
  (VTBL_ENTRY)&_ZN8S20936C23v33Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI8S20936C1[0]),
  (VTBL_ENTRY)&_ZN8S20936C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20936C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20936C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20936C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20936C33v13Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI8S20936C1[0]),
  (VTBL_ENTRY)&_ZN8S20936C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20936C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20936C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20936C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20936C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20936C73v18Ev,
  (VTBL_ENTRY)&_ZN8S20936C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20936C73v20Ev,
  (VTBL_ENTRY)&_ZN8S20936C73v21Ev,
  (VTBL_ENTRY)&_ZN8S20936C73v22Ev,
  (VTBL_ENTRY)&_ZN8S20936C73v23Ev,
  (VTBL_ENTRY)&_ZN8S20936C73v24Ev,
};
extern VTBL_ENTRY _ZTV8S20936C1[];
extern void _ZN8S20936C63v14Ev();
extern void _ZN8S20936C63v15Ev();
extern void _ZN8S20936C63v16Ev();
extern void _ZN8S20936C63v17Ev();
extern void _ZN8S20936C2D1Ev();
extern void _ZN8S20936C2D0Ev();
extern void _ZN8S20936C53v25Ev();
extern void _ZN8S20936C23v26Ev();
extern void _ZN8S20936C23v27Ev();
extern void _ZN8S20936C23v28Ev();
extern void _ZN8S20936C23v29Ev();
extern void _ZN8S20936C23v30Ev();
extern void _ZN8S20936C23v31Ev();
extern void _ZN8S20936C23v32Ev();
extern void _ZN8S20936C23v33Ev();
static  VTBL_ENTRY _tg__ZTV8S20936C2__8S20936C1[] = {
  ABISELECT(32,24),
  ABISELECT(56,36),
  0,
  (VTBL_ENTRY)&(_ZTI8S20936C2[0]),
  (VTBL_ENTRY)&_ZN8S20936C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20936C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20936C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20936C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20936C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20936C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20936C53v25Ev,
  (VTBL_ENTRY)&_ZN8S20936C23v26Ev,
  (VTBL_ENTRY)&_ZN8S20936C23v27Ev,
  (VTBL_ENTRY)&_ZN8S20936C23v28Ev,
  (VTBL_ENTRY)&_ZN8S20936C23v29Ev,
  (VTBL_ENTRY)&_ZN8S20936C23v30Ev,
  (VTBL_ENTRY)&_ZN8S20936C23v31Ev,
  (VTBL_ENTRY)&_ZN8S20936C23v32Ev,
  (VTBL_ENTRY)&_ZN8S20936C23v33Ev,
};
extern void _ZN8S20936C63v14Ev();
extern void _ZN8S20936C63v15Ev();
extern void _ZN8S20936C63v16Ev();
extern void _ZN8S20936C63v17Ev();
extern void _ZN8S20936C5D1Ev();
extern void _ZN8S20936C5D0Ev();
extern void _ZN8S20936C53v25Ev();
static  VTBL_ENTRY _tg__ZTV8S20936C58S20936C2__8S20936C1[] = {
  ABISELECT(56,36),
  0,
  (VTBL_ENTRY)&(_ZTI8S20936C5[0]),
  (VTBL_ENTRY)&_ZN8S20936C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20936C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20936C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20936C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20936C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20936C5D0Ev,
  (VTBL_ENTRY)&_ZN8S20936C53v25Ev,
};
extern void _ZN8S20936C32v9Ev();
extern void _ZN8S20936C33v10Ev();
extern void _ZN8S20936C33v11Ev();
extern void _ZN8S20936C33v12Ev();
extern void _ZN8S20936C33v13Ev();
extern void _ZN8S20936C73v18Ev();
extern void _ZN8S20936C73v19Ev();
extern void _ZN8S20936C73v20Ev();
extern void _ZN8S20936C73v21Ev();
extern void _ZN8S20936C73v22Ev();
extern void _ZN8S20936C73v23Ev();
extern void _ZN8S20936C73v24Ev();
static  VTBL_ENTRY _tg__ZTV8S20936C7__8S20936C58S20936C2__8S20936C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI8S20936C5[0]),
  (VTBL_ENTRY)&_ZN8S20936C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20936C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20936C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20936C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20936C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20936C73v18Ev,
  (VTBL_ENTRY)&_ZN8S20936C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20936C73v20Ev,
  (VTBL_ENTRY)&_ZN8S20936C73v21Ev,
  (VTBL_ENTRY)&_ZN8S20936C73v22Ev,
  (VTBL_ENTRY)&_ZN8S20936C73v23Ev,
  (VTBL_ENTRY)&_ZN8S20936C73v24Ev,
};
extern void _ZN8S20936C32v9Ev();
extern void _ZN8S20936C33v10Ev();
extern void _ZN8S20936C33v11Ev();
extern void _ZN8S20936C33v12Ev();
extern void _ZN8S20936C33v13Ev();
static  VTBL_ENTRY _tg__ZTV8S20936C3__8S20936C2__8S20936C1[] = {
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI8S20936C2[0]),
  (VTBL_ENTRY)&_ZN8S20936C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20936C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20936C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20936C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20936C33v13Ev,
};
extern void _ZN8S20936C32v9Ev();
extern void _ZN8S20936C33v10Ev();
extern void _ZN8S20936C33v11Ev();
extern void _ZN8S20936C33v12Ev();
extern void _ZN8S20936C33v13Ev();
extern void _ZN8S20936C73v18Ev();
extern void _ZN8S20936C73v19Ev();
extern void _ZN8S20936C73v20Ev();
extern void _ZN8S20936C73v21Ev();
extern void _ZN8S20936C73v22Ev();
extern void _ZN8S20936C73v23Ev();
extern void _ZN8S20936C73v24Ev();
static  VTBL_ENTRY _tg__ZTV8S20936C7__8S20936C2__8S20936C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI8S20936C2[0]),
  (VTBL_ENTRY)&_ZN8S20936C32v9Ev,
  (VTBL_ENTRY)&_ZN8S20936C33v10Ev,
  (VTBL_ENTRY)&_ZN8S20936C33v11Ev,
  (VTBL_ENTRY)&_ZN8S20936C33v12Ev,
  (VTBL_ENTRY)&_ZN8S20936C33v13Ev,
  (VTBL_ENTRY)&_ZN8S20936C73v18Ev,
  (VTBL_ENTRY)&_ZN8S20936C73v19Ev,
  (VTBL_ENTRY)&_ZN8S20936C73v20Ev,
  (VTBL_ENTRY)&_ZN8S20936C73v21Ev,
  (VTBL_ENTRY)&_ZN8S20936C73v22Ev,
  (VTBL_ENTRY)&_ZN8S20936C73v23Ev,
  (VTBL_ENTRY)&_ZN8S20936C73v24Ev,
};
static  VTT_ENTRY vtt_S20936C1[] = {
  {&(_ZTV8S20936C1[5]),  5,86},
  {&(_ZTV8S20936C1[33]),  33,86},
  {&(_ZTV8S20936C1[55]),  55,86},
  {&(_ZTV8S20936C1[74]),  74,86},
  {&(_tg__ZTV8S20936C2__8S20936C1[4]),  4,19},
  {&(_tg__ZTV8S20936C58S20936C2__8S20936C1[3]),  3,10},
  {&(_tg__ZTV8S20936C7__8S20936C58S20936C2__8S20936C1[14]),  14,26},
  {&(_tg__ZTV8S20936C3__8S20936C2__8S20936C1[7]),  7,12},
  {&(_tg__ZTV8S20936C7__8S20936C2__8S20936C1[14]),  14,26},
};
extern VTBL_ENTRY _ZTI8S20936C1[];
extern  VTBL_ENTRY _ZTV8S20936C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20936C1[];
static VTBL_ENTRY alt_thunk_names37[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20936C1D0Ev,_ZTv0_n36_N8S20936C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20936C1D0Ev,_ZThn4_N8S20936C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20936C1D1Ev,_ZTv0_n36_N8S20936C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20936C1D1Ev,_ZThn4_N8S20936C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20936C1 = {  "S20936C1", // class name
  bases_S20936C1, 6,
  &(vtc_S20936C1[0]), // expected_vtbl_contents
  &(vtt_S20936C1[0]), // expected_vtt_contents
  ABISELECT(112,64), // object size
  NSPAIRA(_ZTI8S20936C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20936C1),86, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20936C1),9, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names37,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5078C3  {
  ::S2120C20_nt s5078c3f0;
  int s5078c3f1[2];
  char s5078c3f2;
  virtual  ~S5078C3(); // _ZN7S5078C3D1Ev
  virtual void  v4(); // _ZN7S5078C32v4Ev
  virtual void  v5(); // _ZN7S5078C32v5Ev
  virtual void  v6(); // _ZN7S5078C32v6Ev
  S5078C3(); // tgen
};
//SIG(-1 S5078C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S5078C3 ::~S5078C3(){ note_dtor("S5078C3", this);}
void  S5078C3 ::v4(){vfunc_called(this, "_ZN7S5078C32v4Ev");}
void  S5078C3 ::v5(){vfunc_called(this, "_ZN7S5078C32v5Ev");}
void  S5078C3 ::v6(){vfunc_called(this, "_ZN7S5078C32v6Ev");}
S5078C3 ::S5078C3(){ note_ctor("S5078C3", this);} // tgen

static void Test_S5078C3()
{
  extern Class_Descriptor cd_S5078C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S5078C3, buf);
    S5078C3 *dp, &lv = *(dp=new (buf) S5078C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S5078C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5078C3)");
    check_field_offset(lv, s5078c3f0, ABISELECT(8,4), "S5078C3.s5078c3f0");
    check_field_offset(lv, s5078c3f1, ABISELECT(24,16), "S5078C3.s5078c3f1");
    check_field_offset(lv, s5078c3f2, ABISELECT(32,24), "S5078C3.s5078c3f2");
    test_class_info(&lv, &cd_S5078C3);
    dp->~S5078C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5078C3(Test_S5078C3, "S5078C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S5078C3C1Ev();
extern void _ZN7S5078C3D1Ev();
Name_Map name_map_S5078C3[] = {
  NSPAIR(_ZN7S5078C3C1Ev),
  NSPAIR(_ZN7S5078C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5078C3[];
extern void _ZN7S5078C3D1Ev();
extern void _ZN7S5078C3D0Ev();
extern void _ZN7S5078C32v4Ev();
extern void _ZN7S5078C32v5Ev();
extern void _ZN7S5078C32v6Ev();
static  VTBL_ENTRY vtc_S5078C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5078C3[0]),
  (VTBL_ENTRY)&_ZN7S5078C3D1Ev,
  (VTBL_ENTRY)&_ZN7S5078C3D0Ev,
  (VTBL_ENTRY)&_ZN7S5078C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5078C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5078C32v6Ev,
};
extern VTBL_ENTRY _ZTI7S5078C3[];
extern  VTBL_ENTRY _ZTV7S5078C3[];
Class_Descriptor cd_S5078C3 = {  "S5078C3", // class name
  0,0,//no base classes
  &(vtc_S5078C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S5078C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5078C3),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  S5078C2_nt  : S5078C3 {
  void *s5078c2f0;
  virtual void  v7(); // _ZN10S5078C2_nt2v7Ev
  virtual void  v8(); // _ZN10S5078C2_nt2v8Ev
  ~S5078C2_nt(); // tgen
  S5078C2_nt(); // tgen
};
//SIG(-1 S5078C2_nt) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S5078C2_nt ::v7(){vfunc_called(this, "_ZN10S5078C2_nt2v7Ev");}
void  S5078C2_nt ::v8(){vfunc_called(this, "_ZN10S5078C2_nt2v8Ev");}
S5078C2_nt ::~S5078C2_nt(){ note_dtor("S5078C2_nt", this);} // tgen
S5078C2_nt ::S5078C2_nt(){ note_ctor("S5078C2_nt", this);} // tgen

//skip512 S5078C2_nt

#else // __cplusplus

extern void _ZN10S5078C2_ntC1Ev();
extern void _ZN10S5078C2_ntD1Ev();
Name_Map name_map_S5078C2_nt[] = {
  NSPAIR(_ZN10S5078C2_ntC1Ev),
  NSPAIR(_ZN10S5078C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5078C3;
extern VTBL_ENTRY _ZTI7S5078C3[];
extern  VTBL_ENTRY _ZTV7S5078C3[];
static Base_Class bases_S5078C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5078C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S5078C2_nt[];
extern void _ZN10S5078C2_ntD1Ev();
extern void _ZN10S5078C2_ntD0Ev();
extern void _ZN7S5078C32v4Ev();
extern void _ZN7S5078C32v5Ev();
extern void _ZN7S5078C32v6Ev();
extern void _ZN10S5078C2_nt2v7Ev();
extern void _ZN10S5078C2_nt2v8Ev();
static  VTBL_ENTRY vtc_S5078C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S5078C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S5078C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S5078C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN7S5078C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5078C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5078C32v6Ev,
  (VTBL_ENTRY)&_ZN10S5078C2_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S5078C2_nt2v8Ev,
};
extern VTBL_ENTRY _ZTI10S5078C2_nt[];
VTBL_ENTRY *P__ZTI10S5078C2_nt = _ZTI10S5078C2_nt; 
extern  VTBL_ENTRY _ZTV10S5078C2_nt[];
Class_Descriptor cd_S5078C2_nt = {  "S5078C2_nt", // class name
  bases_S5078C2_nt, 1,
  &(vtc_S5078C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI10S5078C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S5078C2_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  S5078C9_nt  {
  virtual  ~S5078C9_nt(); // _ZN10S5078C9_ntD1Ev
  virtual void  v11(); // _ZN10S5078C9_nt3v11Ev
  virtual void  v12(); // _ZN10S5078C9_nt3v12Ev
  S5078C9_nt(); // tgen
};
//SIG(-1 S5078C9_nt) C1{ vd v1 v2}


 S5078C9_nt ::~S5078C9_nt(){ note_dtor("S5078C9_nt", this);}
void  S5078C9_nt ::v11(){vfunc_called(this, "_ZN10S5078C9_nt3v11Ev");}
void  S5078C9_nt ::v12(){vfunc_called(this, "_ZN10S5078C9_nt3v12Ev");}
S5078C9_nt ::S5078C9_nt(){ note_ctor("S5078C9_nt", this);} // tgen

//skip512 S5078C9_nt

#else // __cplusplus

extern void _ZN10S5078C9_ntC1Ev();
extern void _ZN10S5078C9_ntD1Ev();
Name_Map name_map_S5078C9_nt[] = {
  NSPAIR(_ZN10S5078C9_ntC1Ev),
  NSPAIR(_ZN10S5078C9_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S5078C9_nt[];
extern void _ZN10S5078C9_ntD1Ev();
extern void _ZN10S5078C9_ntD0Ev();
extern void _ZN10S5078C9_nt3v11Ev();
extern void _ZN10S5078C9_nt3v12Ev();
static  VTBL_ENTRY vtc_S5078C9_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S5078C9_nt[0]),
  (VTBL_ENTRY)&_ZN10S5078C9_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S5078C9_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S5078C9_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S5078C9_nt3v12Ev,
};
extern VTBL_ENTRY _ZTI10S5078C9_nt[];
VTBL_ENTRY *P__ZTI10S5078C9_nt = _ZTI10S5078C9_nt; 
extern  VTBL_ENTRY _ZTV10S5078C9_nt[];
Class_Descriptor cd_S5078C9_nt = {  "S5078C9_nt", // class name
  0,0,//no base classes
  &(vtc_S5078C9_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S5078C9_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S5078C9_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  S5078C6_nt  : S2120C37 , S5078C9_nt {
  virtual  ~S5078C6_nt(); // _ZN10S5078C6_ntD1Ev
  virtual void  v9(); // _ZN10S5078C6_nt2v9Ev
  virtual void  v10(); // _ZN10S5078C6_nt3v10Ev
  S5078C6_nt(); // tgen
};
//SIG(-1 S5078C6_nt) C1{ BC2{ m Fp Fi[2] FC3{ m}} BC4{ vd v3 v4} vd v1 v2}


 S5078C6_nt ::~S5078C6_nt(){ note_dtor("S5078C6_nt", this);}
void  S5078C6_nt ::v9(){vfunc_called(this, "_ZN10S5078C6_nt2v9Ev");}
void  S5078C6_nt ::v10(){vfunc_called(this, "_ZN10S5078C6_nt3v10Ev");}
S5078C6_nt ::S5078C6_nt(){ note_ctor("S5078C6_nt", this);} // tgen

//skip512 S5078C6_nt

#else // __cplusplus

extern void _ZN10S5078C6_ntC1Ev();
extern void _ZN10S5078C6_ntD1Ev();
Name_Map name_map_S5078C6_nt[] = {
  NSPAIR(_ZN10S5078C6_ntC1Ev),
  NSPAIR(_ZN10S5078C6_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2120C37;
extern VTBL_ENTRY _ZTI8S2120C37[];
extern Class_Descriptor cd_S5078C9_nt;
extern VTBL_ENTRY _ZTI10S5078C9_nt[];
extern  VTBL_ENTRY _ZTV10S5078C9_nt[];
static Base_Class bases_S5078C6_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2120C37,    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_S5078C9_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S5078C6_nt[];
extern void _ZN10S5078C6_ntD1Ev();
extern void _ZN10S5078C6_ntD0Ev();
extern void _ZN10S5078C9_nt3v11Ev();
extern void _ZN10S5078C9_nt3v12Ev();
extern void _ZN10S5078C6_nt2v9Ev();
extern void _ZN10S5078C6_nt3v10Ev();
static  VTBL_ENTRY vtc_S5078C6_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S5078C6_nt[0]),
  (VTBL_ENTRY)&_ZN10S5078C6_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S5078C6_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S5078C9_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S5078C9_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S5078C6_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S5078C6_nt3v10Ev,
};
extern VTBL_ENTRY _ZTI10S5078C6_nt[];
VTBL_ENTRY *P__ZTI10S5078C6_nt = _ZTI10S5078C6_nt; 
extern  VTBL_ENTRY _ZTV10S5078C6_nt[];
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5078C11_nt  {
  char s5078c11f0[20];
};
//SIG(-1 S5078C11_nt) C1{ Fc[20]}



//skip512 S5078C11_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5078C10_nt  {
  ::S5078C11_nt s5078c10f0;
  char s5078c10f1[16];
};
//SIG(-1 S5078C10_nt) C1{ FC2{ Fc[20]} Fc[16]}



//skip512 S5078C10_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5078C12_nt  {
  void *s5078c12f0[2];
  void  mf5078c12(); // _ZN11S5078C12_nt9mf5078c12Ev
};
//SIG(-1 S5078C12_nt) C1{ m Fp[2]}


void  S5078C12_nt ::mf5078c12(){}

//skip512 S5078C12_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5078C1  : S5078C2_nt {
  ::S5078C6_nt s5078c1f0;
  ::S5078C10_nt s5078c1f1[16];
  void *s5078c1f2[2];
  ::S5078C12_nt s5078c1f3;
  int s5078c1f4[2];
  virtual  ~S5078C1(); // _ZN7S5078C1D1Ev
  virtual void  v1(); // _ZN7S5078C12v1Ev
  virtual void  v2(); // _ZN7S5078C12v2Ev
  virtual void  v3(); // _ZN7S5078C12v3Ev
  S5078C1(); // tgen
};
//SIG(1 S5078C1) C1{ BC2{ BC3{ vd v4 v5 v6 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v7 v8 Fp} vd v1 v2 v3 FC6{ BC7{ m Fp Fi[2] FC8{ m}} BC9{ vd v11 v12} vd v9 v10} FC10{ FC11{ Fc[20]} Fc[16]}[16] Fp[2] FC12{ m Fp[2]} Fi[2]}


 S5078C1 ::~S5078C1(){ note_dtor("S5078C1", this);}
void  S5078C1 ::v1(){vfunc_called(this, "_ZN7S5078C12v1Ev");}
void  S5078C1 ::v2(){vfunc_called(this, "_ZN7S5078C12v2Ev");}
void  S5078C1 ::v3(){vfunc_called(this, "_ZN7S5078C12v3Ev");}
S5078C1 ::S5078C1(){ note_ctor("S5078C1", this);} // tgen

static void Test_S5078C1()
{
  extern Class_Descriptor cd_S5078C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(88,164)];
    init_test(&cd_S5078C1, buf);
    S5078C1 *dp, &lv = *(dp=new (buf) S5078C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(696,652), "sizeof(S5078C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5078C1)");
    check_base_class_offset(lv, (S5078C3*)(S5078C2_nt*), 0, "S5078C1");
    check_base_class_offset(lv, (S5078C2_nt*), 0, "S5078C1");
    check_field_offset(lv, s5078c1f0, ABISELECT(48,32), "S5078C1.s5078c1f0");
    check_field_offset(lv, s5078c1f1, ABISELECT(80,52), "S5078C1.s5078c1f1");
    check_field_offset(lv, s5078c1f2, ABISELECT(656,628), "S5078C1.s5078c1f2");
    check_field_offset(lv, s5078c1f3, ABISELECT(672,636), "S5078C1.s5078c1f3");
    check_field_offset(lv, s5078c1f4, ABISELECT(688,644), "S5078C1.s5078c1f4");
    test_class_info(&lv, &cd_S5078C1);
    dp->~S5078C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5078C1(Test_S5078C1, "S5078C1", ABISELECT(696,652));

#else // __cplusplus

extern void _ZN7S5078C1C1Ev();
extern void _ZN7S5078C1D1Ev();
Name_Map name_map_S5078C1[] = {
  NSPAIR(_ZN7S5078C1C1Ev),
  NSPAIR(_ZN7S5078C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5078C3;
extern VTBL_ENTRY _ZTI7S5078C3[];
extern  VTBL_ENTRY _ZTV7S5078C3[];
extern Class_Descriptor cd_S5078C2_nt;
extern VTBL_ENTRY _ZTI10S5078C2_nt[];
extern  VTBL_ENTRY _ZTV10S5078C2_nt[];
static Base_Class bases_S5078C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5078C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S5078C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S5078C1[];
extern void _ZN7S5078C1D1Ev();
extern void _ZN7S5078C1D0Ev();
extern void _ZN7S5078C32v4Ev();
extern void _ZN7S5078C32v5Ev();
extern void _ZN7S5078C32v6Ev();
extern void _ZN10S5078C2_nt2v7Ev();
extern void _ZN10S5078C2_nt2v8Ev();
extern void _ZN7S5078C12v1Ev();
extern void _ZN7S5078C12v2Ev();
extern void _ZN7S5078C12v3Ev();
static  VTBL_ENTRY vtc_S5078C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5078C1[0]),
  (VTBL_ENTRY)&_ZN7S5078C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5078C1D0Ev,
  (VTBL_ENTRY)&_ZN7S5078C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5078C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5078C32v6Ev,
  (VTBL_ENTRY)&_ZN10S5078C2_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S5078C2_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S5078C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5078C12v2Ev,
  (VTBL_ENTRY)&_ZN7S5078C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S5078C1[];
extern  VTBL_ENTRY _ZTV7S5078C1[];
Class_Descriptor cd_S5078C1 = {  "S5078C1", // class name
  bases_S5078C1, 2,
  &(vtc_S5078C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(696,652), // object size
  NSPAIRA(_ZTI7S5078C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5078C1),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9851C2  {
  virtual  ~S9851C2(); // _ZN7S9851C2D1Ev
  virtual void  v4(); // _ZN7S9851C22v4Ev
  S9851C2(); // tgen
};
//SIG(-1 S9851C2) C1{ vd v1}


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

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

#else // __cplusplus

extern void _ZN7S9851C2C1Ev();
extern void _ZN7S9851C2D1Ev();
Name_Map name_map_S9851C2[] = {
  NSPAIR(_ZN7S9851C2C1Ev),
  NSPAIR(_ZN7S9851C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9851C2[];
extern void _ZN7S9851C2D1Ev();
extern void _ZN7S9851C2D0Ev();
extern void _ZN7S9851C22v4Ev();
static  VTBL_ENTRY vtc_S9851C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9851C2[0]),
  (VTBL_ENTRY)&_ZN7S9851C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9851C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9851C22v4Ev,
};
extern VTBL_ENTRY _ZTI7S9851C2[];
extern  VTBL_ENTRY _ZTV7S9851C2[];
Class_Descriptor cd_S9851C2 = {  "S9851C2", // class name
  0,0,//no base classes
  &(vtc_S9851C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S9851C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9851C2),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  S9851C3  {
  virtual  ~S9851C3(); // _ZN7S9851C3D1Ev
  virtual void  v5(); // _ZN7S9851C32v5Ev
  virtual void  v6(); // _ZN7S9851C32v6Ev
  S9851C3(); // tgen
};
//SIG(-1 S9851C3) C1{ vd v1 v2}


 S9851C3 ::~S9851C3(){ note_dtor("S9851C3", this);}
void  S9851C3 ::v5(){vfunc_called(this, "_ZN7S9851C32v5Ev");}
void  S9851C3 ::v6(){vfunc_called(this, "_ZN7S9851C32v6Ev");}
S9851C3 ::S9851C3(){ note_ctor("S9851C3", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S9851C3C1Ev();
extern void _ZN7S9851C3D1Ev();
Name_Map name_map_S9851C3[] = {
  NSPAIR(_ZN7S9851C3C1Ev),
  NSPAIR(_ZN7S9851C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9851C3[];
extern void _ZN7S9851C3D1Ev();
extern void _ZN7S9851C3D0Ev();
extern void _ZN7S9851C32v5Ev();
extern void _ZN7S9851C32v6Ev();
static  VTBL_ENTRY vtc_S9851C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9851C3[0]),
  (VTBL_ENTRY)&_ZN7S9851C3D1Ev,
  (VTBL_ENTRY)&_ZN7S9851C3D0Ev,
  (VTBL_ENTRY)&_ZN7S9851C32v5Ev,
  (VTBL_ENTRY)&_ZN7S9851C32v6Ev,
};
extern VTBL_ENTRY _ZTI7S9851C3[];
extern  VTBL_ENTRY _ZTV7S9851C3[];
Class_Descriptor cd_S9851C3 = {  "S9851C3", // class name
  0,0,//no base classes
  &(vtc_S9851C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S9851C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9851C3),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  S9851C1  : S9851C2 , S9851C3 {
  ::S1564C14 s9851c1f0;
  ::S1564C14 s9851c1f1;
  ::S1564C14 s9851c1f2;
  ::S601C29_nt s9851c1f3;
  ::S601C29_nt s9851c1f4;
  void *s9851c1f5[6];
  ::S885C14_nt s9851c1f6;
  ::S885C14_nt s9851c1f7;
  ::S2120C13_nt s9851c1f8;
  ::S1564C14 s9851c1f9;
  ::S1564C14 s9851c1f10;
  char s9851c1f11[2];
  ::S601C29_nt s9851c1f12;
  char s9851c1f13[2];
  int s9851c1f14;
  ::S601C29_nt s9851c1f15;
  virtual  ~S9851C1(); // _ZN7S9851C1D1Ev
  virtual void  v1(); // _ZN7S9851C12v1Ev
  virtual void  v2(); // _ZN7S9851C12v2Ev
  virtual void  v3(); // _ZN7S9851C12v3Ev
  S9851C1(); // tgen
};
//SIG(1 S9851C1) C1{ BC2{ vd v4} BC3{ vd v5 v6} vd v1 v2 v3 FC4{ m FC5{ m FC6{ m FL[2]}} FC5 FC5} FC4 FC4 FC7{ m FC8{ m FL}} FC7 Fp[6] FC9{ m Fi[4]} FC9 FC5 FC4 FC4 Fc[2] FC7 Fc[2] Fi FC7}


 S9851C1 ::~S9851C1(){ note_dtor("S9851C1", this);}
void  S9851C1 ::v1(){vfunc_called(this, "_ZN7S9851C12v1Ev");}
void  S9851C1 ::v2(){vfunc_called(this, "_ZN7S9851C12v2Ev");}
void  S9851C1 ::v3(){vfunc_called(this, "_ZN7S9851C12v3Ev");}
S9851C1 ::S9851C1(){ note_ctor("S9851C1", this);} // tgen

static void Test_S9851C1()
{
  extern Class_Descriptor cd_S9851C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(51,92)];
    init_test(&cd_S9851C1, buf);
    S9851C1 *dp, &lv = *(dp=new (buf) S9851C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(400,364), "sizeof(S9851C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9851C1)");
    check_base_class_offset(lv, (S9851C2*), 0, "S9851C1");
    check_base_class_offset(lv, (S9851C3*), ABISELECT(8,4), "S9851C1");
    check_field_offset(lv, s9851c1f0, ABISELECT(16,8), "S9851C1.s9851c1f0");
    check_field_offset(lv, s9851c1f1, ABISELECT(64,56), "S9851C1.s9851c1f1");
    check_field_offset(lv, s9851c1f2, ABISELECT(112,104), "S9851C1.s9851c1f2");
    check_field_offset(lv, s9851c1f3, ABISELECT(160,152), "S9851C1.s9851c1f3");
    check_field_offset(lv, s9851c1f4, ABISELECT(168,160), "S9851C1.s9851c1f4");
    check_field_offset(lv, s9851c1f5, ABISELECT(176,168), "S9851C1.s9851c1f5");
    check_field_offset(lv, s9851c1f6, ABISELECT(224,192), "S9851C1.s9851c1f6");
    check_field_offset(lv, s9851c1f7, ABISELECT(240,208), "S9851C1.s9851c1f7");
    check_field_offset(lv, s9851c1f8, ABISELECT(256,224), "S9851C1.s9851c1f8");
    check_field_offset(lv, s9851c1f9, ABISELECT(272,240), "S9851C1.s9851c1f9");
    check_field_offset(lv, s9851c1f10, ABISELECT(320,288), "S9851C1.s9851c1f10");
    check_field_offset(lv, s9851c1f11, ABISELECT(368,336), "S9851C1.s9851c1f11");
    check_field_offset(lv, s9851c1f12, ABISELECT(376,340), "S9851C1.s9851c1f12");
    check_field_offset(lv, s9851c1f13, ABISELECT(384,348), "S9851C1.s9851c1f13");
    check_field_offset(lv, s9851c1f14, ABISELECT(388,352), "S9851C1.s9851c1f14");
    check_field_offset(lv, s9851c1f15, ABISELECT(392,356), "S9851C1.s9851c1f15");
    test_class_info(&lv, &cd_S9851C1);
    dp->~S9851C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9851C1(Test_S9851C1, "S9851C1", ABISELECT(400,364));

#else // __cplusplus

extern void _ZN7S9851C1C1Ev();
extern void _ZN7S9851C1D1Ev();
Name_Map name_map_S9851C1[] = {
  NSPAIR(_ZN7S9851C1C1Ev),
  NSPAIR(_ZN7S9851C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9851C2;
extern VTBL_ENTRY _ZTI7S9851C2[];
extern  VTBL_ENTRY _ZTV7S9851C2[];
extern Class_Descriptor cd_S9851C3;
extern VTBL_ENTRY _ZTI7S9851C3[];
extern  VTBL_ENTRY _ZTV7S9851C3[];
static Base_Class bases_S9851C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9851C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S9851C3,    ABISELECT(8,4), //bcp->offset
    8, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9851C1[];
extern void _ZN7S9851C1D1Ev();
extern void _ZN7S9851C1D0Ev();
extern void _ZN7S9851C22v4Ev();
extern void _ZN7S9851C12v1Ev();
extern void _ZN7S9851C12v2Ev();
extern void _ZN7S9851C12v3Ev();
extern void ABISELECT(_ZThn8_N7S9851C1D1Ev,_ZThn4_N7S9851C1D1Ev)();
extern void ABISELECT(_ZThn8_N7S9851C1D0Ev,_ZThn4_N7S9851C1D0Ev)();
extern void _ZN7S9851C32v5Ev();
extern void _ZN7S9851C32v6Ev();
static  VTBL_ENTRY vtc_S9851C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9851C1[0]),
  (VTBL_ENTRY)&_ZN7S9851C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9851C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9851C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9851C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9851C12v2Ev,
  (VTBL_ENTRY)&_ZN7S9851C12v3Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S9851C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S9851C1D1Ev,_ZThn4_N7S9851C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S9851C1D0Ev,_ZThn4_N7S9851C1D0Ev),
  (VTBL_ENTRY)&_ZN7S9851C32v5Ev,
  (VTBL_ENTRY)&_ZN7S9851C32v6Ev,
};
extern VTBL_ENTRY _ZTI7S9851C1[];
extern  VTBL_ENTRY _ZTV7S9851C1[];
Class_Descriptor cd_S9851C1 = {  "S9851C1", // class name
  bases_S9851C1, 2,
  &(vtc_S9851C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(400,364), // object size
  NSPAIRA(_ZTI7S9851C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S9851C1),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  S21755C3_nt  {
  void *s21755c3f0[2];
  void  mf21755c3(); // _ZN11S21755C3_nt9mf21755c3Ev
};
//SIG(-1 S21755C3_nt) C1{ m Fp[2]}


void  S21755C3_nt ::mf21755c3(){}

//skip512 S21755C3_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21755C5  {
  void *s21755c5f0[2];
  void  mf21755c5(); // _ZN8S21755C59mf21755c5Ev
};
//SIG(-1 S21755C5) C1{ m Fp[2]}


void  S21755C5 ::mf21755c5(){}

static void Test_S21755C5()
{
  {
    init_simple_test("S21755C5");
    S21755C5 lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S21755C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21755C5)");
    check_field_offset(lv, s21755c5f0, 0, "S21755C5.s21755c5f0");
  }
}
static Arrange_To_Call_Me vS21755C5(Test_S21755C5, "S21755C5", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21755C1  {
  void *s21755c1f0;
  int s21755c1f1[2];
  char s21755c1f2;
  int s21755c1f3[2];
  char s21755c1f4;
  int s21755c1f5[4];
  char s21755c1f6;
  int s21755c1f7;
  void *s21755c1f8[2];
  int s21755c1f9[2];
  __tsi64 s21755c1f10;
  ::S5078C12_nt s21755c1f11;
  ::S21755C3_nt s21755c1f12;
  ::S21755C3_nt s21755c1f13;
  ::S21755C5 s21755c1f14;
  void *s21755c1f15;
  ::S2120C37 s21755c1f16;
  ::S2120C25 s21755c1f17;
  void *s21755c1f18;
  int s21755c1f19[3];
  char s21755c1f20;
  void  mf21755c1(); // _ZN8S21755C19mf21755c1Ev
  virtual  ~S21755C1(); // _ZN8S21755C1D1Ev
  S21755C1(); // tgen
};
//SIG(1 S21755C1) C1{ vd m Fp Fi[2] Fc Fi[2] Fc Fi[4] Fc Fi Fp[2] Fi[2] FL FC2{ m Fp[2]} FC3{ m Fp[2]} FC3 FC4{ m Fp[2]} Fp FC5{ m Fp Fi[2] FC6{ m}} FC7{ BC8{ m Fp Fi FC9{ m} FC9}} Fp Fi[3] Fc}


void  S21755C1 ::mf21755c1(){}
 S21755C1 ::~S21755C1(){ note_dtor("S21755C1", this);}
S21755C1 ::S21755C1(){ note_ctor("S21755C1", this);} // tgen

static void Test_S21755C1()
{
  extern Class_Descriptor cd_S21755C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(30,42)];
    init_test(&cd_S21755C1, buf);
    S21755C1 *dp, &lv = *(dp=new (buf) S21755C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(232,164), "sizeof(S21755C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21755C1)");
    check_field_offset(lv, s21755c1f0, ABISELECT(8,4), "S21755C1.s21755c1f0");
    check_field_offset(lv, s21755c1f1, ABISELECT(16,8), "S21755C1.s21755c1f1");
    check_field_offset(lv, s21755c1f2, ABISELECT(24,16), "S21755C1.s21755c1f2");
    check_field_offset(lv, s21755c1f3, ABISELECT(28,20), "S21755C1.s21755c1f3");
    check_field_offset(lv, s21755c1f4, ABISELECT(36,28), "S21755C1.s21755c1f4");
    check_field_offset(lv, s21755c1f5, ABISELECT(40,32), "S21755C1.s21755c1f5");
    check_field_offset(lv, s21755c1f6, ABISELECT(56,48), "S21755C1.s21755c1f6");
    check_field_offset(lv, s21755c1f7, ABISELECT(60,52), "S21755C1.s21755c1f7");
    check_field_offset(lv, s21755c1f8, ABISELECT(64,56), "S21755C1.s21755c1f8");
    check_field_offset(lv, s21755c1f9, ABISELECT(80,64), "S21755C1.s21755c1f9");
    check_field_offset(lv, s21755c1f10, ABISELECT(88,72), "S21755C1.s21755c1f10");
    check_field_offset(lv, s21755c1f11, ABISELECT(96,80), "S21755C1.s21755c1f11");
    check_field_offset(lv, s21755c1f12, ABISELECT(112,88), "S21755C1.s21755c1f12");
    check_field_offset(lv, s21755c1f13, ABISELECT(128,96), "S21755C1.s21755c1f13");
    check_field_offset(lv, s21755c1f14, ABISELECT(144,104), "S21755C1.s21755c1f14");
    check_field_offset(lv, s21755c1f15, ABISELECT(160,112), "S21755C1.s21755c1f15");
    check_field_offset(lv, s21755c1f16, ABISELECT(168,116), "S21755C1.s21755c1f16");
    check_field_offset(lv, s21755c1f17, ABISELECT(192,132), "S21755C1.s21755c1f17");
    check_field_offset(lv, s21755c1f18, ABISELECT(208,144), "S21755C1.s21755c1f18");
    check_field_offset(lv, s21755c1f19, ABISELECT(216,148), "S21755C1.s21755c1f19");
    check_field_offset(lv, s21755c1f20, ABISELECT(228,160), "S21755C1.s21755c1f20");
    test_class_info(&lv, &cd_S21755C1);
    dp->~S21755C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21755C1(Test_S21755C1, "S21755C1", ABISELECT(232,164));

#else // __cplusplus

extern void _ZN8S21755C1C1Ev();
extern void _ZN8S21755C1D1Ev();
Name_Map name_map_S21755C1[] = {
  NSPAIR(_ZN8S21755C1C1Ev),
  NSPAIR(_ZN8S21755C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21755C1[];
extern void _ZN8S21755C1D1Ev();
extern void _ZN8S21755C1D0Ev();
static  VTBL_ENTRY vtc_S21755C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21755C1[0]),
  (VTBL_ENTRY)&_ZN8S21755C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21755C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21755C1[];
extern  VTBL_ENTRY _ZTV8S21755C1[];
Class_Descriptor cd_S21755C1 = {  "S21755C1", // class name
  0,0,//no base classes
  &(vtc_S21755C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(232,164), // object size
  NSPAIRA(_ZTI8S21755C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21755C1),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  S8087C2_nt  {
  int s8087c2f0;
  void  mf8087c2(); // _ZN10S8087C2_nt8mf8087c2Ev
  virtual  ~S8087C2_nt(); // _ZN10S8087C2_ntD1Ev
  S8087C2_nt(); // tgen
};
//SIG(-1 S8087C2_nt) C1{ vd m Fi}


void  S8087C2_nt ::mf8087c2(){}
 S8087C2_nt ::~S8087C2_nt(){ note_dtor("S8087C2_nt", this);}
S8087C2_nt ::S8087C2_nt(){ note_ctor("S8087C2_nt", this);} // tgen

//skip512 S8087C2_nt

#else // __cplusplus

extern void _ZN10S8087C2_ntC1Ev();
extern void _ZN10S8087C2_ntD1Ev();
Name_Map name_map_S8087C2_nt[] = {
  NSPAIR(_ZN10S8087C2_ntC1Ev),
  NSPAIR(_ZN10S8087C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S8087C2_nt[];
extern void _ZN10S8087C2_ntD1Ev();
extern void _ZN10S8087C2_ntD0Ev();
static  VTBL_ENTRY vtc_S8087C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S8087C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S8087C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S8087C2_ntD0Ev,
};
extern VTBL_ENTRY _ZTI10S8087C2_nt[];
VTBL_ENTRY *P__ZTI10S8087C2_nt = _ZTI10S8087C2_nt; 
extern  VTBL_ENTRY _ZTV10S8087C2_nt[];
Class_Descriptor cd_S8087C2_nt = {  "S8087C2_nt", // class name
  0,0,//no base classes
  &(vtc_S8087C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI10S8087C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S8087C2_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  S8087C5_nt  {
  ::S2120C37 s8087c5f0;
  ::S2120C25 s8087c5f1;
  ::S2120C29_nt s8087c5f2;
  ::S2120C5_nt s8087c5f3;
  void  mf8087c5(); // _ZN10S8087C5_nt8mf8087c5Ev
};
//SIG(-1 S8087C5_nt) C1{ m FC2{ m Fp Fi[2] FC3{ m}} FC4{ BC5{ m Fp Fi FC6{ m} FC6}} FC7{ m Fp Fi[2] FC3} FC8{ BC9{ m Fp Fi FC10{ m} FC11{ m}}}}


void  S8087C5_nt ::mf8087c5(){}

//skip512 S8087C5_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8087C1  : S8087C2_nt {
  ::S885C13_nt s8087c1f0;
  ::S21755C5 s8087c1f1;
  ::S8087C5_nt s8087c1f2;
  __tsi64 s8087c1f3;
  char s8087c1f4;
  virtual void  v1(); // _ZN7S8087C12v1Ev
  virtual void  v2(); // _ZN7S8087C12v2Ev
  ~S8087C1(); // tgen
  S8087C1(); // tgen
};
//SIG(1 S8087C1) C1{ BC2{ vd m Fi} v1 v2 FC3{ m Fp} FC4{ m Fp[2]} FC5{ m FC6{ m Fp Fi[2] FC7{ m}} FC8{ BC9{ m Fp Fi FC10{ m} FC10}} FC11{ m Fp Fi[2] FC7} FC12{ BC13{ m Fp Fi FC14{ m} FC15{ m}}}} FL Fc}


void  S8087C1 ::v1(){vfunc_called(this, "_ZN7S8087C12v1Ev");}
void  S8087C1 ::v2(){vfunc_called(this, "_ZN7S8087C12v2Ev");}
S8087C1 ::~S8087C1(){ note_dtor("S8087C1", this);} // tgen
S8087C1 ::S8087C1(){ note_ctor("S8087C1", this);} // tgen

static void Test_S8087C1()
{
  extern Class_Descriptor cd_S8087C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,23)];
    init_test(&cd_S8087C1, buf);
    S8087C1 *dp, &lv = *(dp=new (buf) S8087C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,88), "sizeof(S8087C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8087C1)");
    check_base_class_offset(lv, (S8087C2_nt*), 0, "S8087C1");
    check_field_offset(lv, s8087c1f0, ABISELECT(16,8), "S8087C1.s8087c1f0");
    check_field_offset(lv, s8087c1f1, ABISELECT(24,12), "S8087C1.s8087c1f1");
    check_field_offset(lv, s8087c1f2, ABISELECT(40,20), "S8087C1.s8087c1f2");
    check_field_offset(lv, s8087c1f3, ABISELECT(120,76), "S8087C1.s8087c1f3");
    check_field_offset(lv, s8087c1f4, ABISELECT(128,84), "S8087C1.s8087c1f4");
    test_class_info(&lv, &cd_S8087C1);
    dp->~S8087C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8087C1(Test_S8087C1, "S8087C1", ABISELECT(136,88));

#else // __cplusplus

extern void _ZN7S8087C1C1Ev();
extern void _ZN7S8087C1D1Ev();
Name_Map name_map_S8087C1[] = {
  NSPAIR(_ZN7S8087C1C1Ev),
  NSPAIR(_ZN7S8087C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8087C2_nt;
extern VTBL_ENTRY _ZTI10S8087C2_nt[];
extern  VTBL_ENTRY _ZTV10S8087C2_nt[];
static Base_Class bases_S8087C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8087C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8087C1[];
extern void _ZN7S8087C1D1Ev();
extern void _ZN7S8087C1D0Ev();
extern void _ZN7S8087C12v1Ev();
extern void _ZN7S8087C12v2Ev();
static  VTBL_ENTRY vtc_S8087C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8087C1[0]),
  (VTBL_ENTRY)&_ZN7S8087C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8087C1D0Ev,
  (VTBL_ENTRY)&_ZN7S8087C12v1Ev,
  (VTBL_ENTRY)&_ZN7S8087C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S8087C1[];
extern  VTBL_ENTRY _ZTV7S8087C1[];
Class_Descriptor cd_S8087C1 = {  "S8087C1", // class name
  bases_S8087C1, 1,
  &(vtc_S8087C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(136,88), // object size
  NSPAIRA(_ZTI7S8087C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8087C1),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  S10284C2_nt  {
  char s10284c2f0;
  int s10284c2f1;
  void *s10284c2f2[3];
  char s10284c2f3[3];
  ::S2120C20_nt s10284c2f4;
  char s10284c2f5;
  void *s10284c2f6;
  int s10284c2f7[2];
  virtual  ~S10284C2_nt(); // _ZN11S10284C2_ntD1Ev
  virtual void  v9(); // _ZN11S10284C2_nt2v9Ev
  virtual void  v10(); // _ZN11S10284C2_nt3v10Ev
  virtual void  v11(); // _ZN11S10284C2_nt3v11Ev
  virtual void  v12(); // _ZN11S10284C2_nt3v12Ev
  virtual void  v13(); // _ZN11S10284C2_nt3v13Ev
  virtual void  v14(); // _ZN11S10284C2_nt3v14Ev
  virtual void  v15(); // _ZN11S10284C2_nt3v15Ev
  virtual void  v16(); // _ZN11S10284C2_nt3v16Ev
  virtual void  v17(); // _ZN11S10284C2_nt3v17Ev
  virtual void  v18(); // _ZN11S10284C2_nt3v18Ev
  virtual void  v19(); // _ZN11S10284C2_nt3v19Ev
  virtual void  v20(); // _ZN11S10284C2_nt3v20Ev
  virtual void  v21(); // _ZN11S10284C2_nt3v21Ev
  virtual void  v22(); // _ZN11S10284C2_nt3v22Ev
  S10284C2_nt(); // tgen
};
//SIG(-1 S10284C2_nt) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 Fc Fi Fp[3] Fc[3] FC2{ m Fp Fi FC3{ m}} Fc Fp Fi[2]}


 S10284C2_nt ::~S10284C2_nt(){ note_dtor("S10284C2_nt", this);}
void  S10284C2_nt ::v9(){vfunc_called(this, "_ZN11S10284C2_nt2v9Ev");}
void  S10284C2_nt ::v10(){vfunc_called(this, "_ZN11S10284C2_nt3v10Ev");}
void  S10284C2_nt ::v11(){vfunc_called(this, "_ZN11S10284C2_nt3v11Ev");}
void  S10284C2_nt ::v12(){vfunc_called(this, "_ZN11S10284C2_nt3v12Ev");}
void  S10284C2_nt ::v13(){vfunc_called(this, "_ZN11S10284C2_nt3v13Ev");}
void  S10284C2_nt ::v14(){vfunc_called(this, "_ZN11S10284C2_nt3v14Ev");}
void  S10284C2_nt ::v15(){vfunc_called(this, "_ZN11S10284C2_nt3v15Ev");}
void  S10284C2_nt ::v16(){vfunc_called(this, "_ZN11S10284C2_nt3v16Ev");}
void  S10284C2_nt ::v17(){vfunc_called(this, "_ZN11S10284C2_nt3v17Ev");}
void  S10284C2_nt ::v18(){vfunc_called(this, "_ZN11S10284C2_nt3v18Ev");}
void  S10284C2_nt ::v19(){vfunc_called(this, "_ZN11S10284C2_nt3v19Ev");}
void  S10284C2_nt ::v20(){vfunc_called(this, "_ZN11S10284C2_nt3v20Ev");}
void  S10284C2_nt ::v21(){vfunc_called(this, "_ZN11S10284C2_nt3v21Ev");}
void  S10284C2_nt ::v22(){vfunc_called(this, "_ZN11S10284C2_nt3v22Ev");}
S10284C2_nt ::S10284C2_nt(){ note_ctor("S10284C2_nt", this);} // tgen

//skip512 S10284C2_nt

#else // __cplusplus

extern void _ZN11S10284C2_ntC1Ev();
extern void _ZN11S10284C2_ntD1Ev();
Name_Map name_map_S10284C2_nt[] = {
  NSPAIR(_ZN11S10284C2_ntC1Ev),
  NSPAIR(_ZN11S10284C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S10284C2_nt[];
extern void _ZN11S10284C2_ntD1Ev();
extern void _ZN11S10284C2_ntD0Ev();
extern void _ZN11S10284C2_nt2v9Ev();
extern void _ZN11S10284C2_nt3v10Ev();
extern void _ZN11S10284C2_nt3v11Ev();
extern void _ZN11S10284C2_nt3v12Ev();
extern void _ZN11S10284C2_nt3v13Ev();
extern void _ZN11S10284C2_nt3v14Ev();
extern void _ZN11S10284C2_nt3v15Ev();
extern void _ZN11S10284C2_nt3v16Ev();
extern void _ZN11S10284C2_nt3v17Ev();
extern void _ZN11S10284C2_nt3v18Ev();
extern void _ZN11S10284C2_nt3v19Ev();
extern void _ZN11S10284C2_nt3v20Ev();
extern void _ZN11S10284C2_nt3v21Ev();
extern void _ZN11S10284C2_nt3v22Ev();
static  VTBL_ENTRY vtc_S10284C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S10284C2_nt[0]),
  (VTBL_ENTRY)&_ZN11S10284C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S10284C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN11S10284C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S10284C2_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S10284C2_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S10284C2_nt3v12Ev,
  (VTBL_ENTRY)&_ZN11S10284C2_nt3v13Ev,
  (VTBL_ENTRY)&_ZN11S10284C2_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S10284C2_nt3v15Ev,
  (VTBL_ENTRY)&_ZN11S10284C2_nt3v16Ev,
  (VTBL_ENTRY)&_ZN11S10284C2_nt3v17Ev,
  (VTBL_ENTRY)&_ZN11S10284C2_nt3v18Ev,
  (VTBL_ENTRY)&_ZN11S10284C2_nt3v19Ev,
  (VTBL_ENTRY)&_ZN11S10284C2_nt3v20Ev,
  (VTBL_ENTRY)&_ZN11S10284C2_nt3v21Ev,
  (VTBL_ENTRY)&_ZN11S10284C2_nt3v22Ev,
};
extern VTBL_ENTRY _ZTI11S10284C2_nt[];
VTBL_ENTRY *P__ZTI11S10284C2_nt = _ZTI11S10284C2_nt; 
extern  VTBL_ENTRY _ZTV11S10284C2_nt[];
Class_Descriptor cd_S10284C2_nt = {  "S10284C2_nt", // class name
  0,0,//no base classes
  &(vtc_S10284C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,56), // object size
  NSPAIRA(_ZTI11S10284C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S10284C2_nt),18, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10284C1  : S10284C2_nt {
  char s10284c1f0[2];
  int s10284c1f1[2];
  ::S2120C20_nt s10284c1f2;
  int s10284c1f3;
  void *s10284c1f4;
  virtual  ~S10284C1(); // _ZN8S10284C1D1Ev
  virtual void  v1(); // _ZN8S10284C12v1Ev
  virtual void  v2(); // _ZN8S10284C12v2Ev
  virtual void  v3(); // _ZN8S10284C12v3Ev
  virtual void  v4(); // _ZN8S10284C12v4Ev
  virtual void  v5(); // _ZN8S10284C12v5Ev
  virtual void  v6(); // _ZN8S10284C12v6Ev
  virtual void  v7(); // _ZN8S10284C12v7Ev
  virtual void  v8(); // _ZN8S10284C12v8Ev
  S10284C1(); // tgen
};
//SIG(1 S10284C1) C1{ BC2{ vd v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fc Fi Fp[3] Fc[3] FC3{ m Fp Fi FC4{ m}} Fc Fp Fi[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 Fc[2] Fi[2] FC3 Fi Fp}


 S10284C1 ::~S10284C1(){ note_dtor("S10284C1", this);}
void  S10284C1 ::v1(){vfunc_called(this, "_ZN8S10284C12v1Ev");}
void  S10284C1 ::v2(){vfunc_called(this, "_ZN8S10284C12v2Ev");}
void  S10284C1 ::v3(){vfunc_called(this, "_ZN8S10284C12v3Ev");}
void  S10284C1 ::v4(){vfunc_called(this, "_ZN8S10284C12v4Ev");}
void  S10284C1 ::v5(){vfunc_called(this, "_ZN8S10284C12v5Ev");}
void  S10284C1 ::v6(){vfunc_called(this, "_ZN8S10284C12v6Ev");}
void  S10284C1 ::v7(){vfunc_called(this, "_ZN8S10284C12v7Ev");}
void  S10284C1 ::v8(){vfunc_called(this, "_ZN8S10284C12v8Ev");}
S10284C1 ::S10284C1(){ note_ctor("S10284C1", this);} // tgen

static void Test_S10284C1()
{
  extern Class_Descriptor cd_S10284C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,23)];
    init_test(&cd_S10284C1, buf);
    S10284C1 *dp, &lv = *(dp=new (buf) S10284C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,88), "sizeof(S10284C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10284C1)");
    check_base_class_offset(lv, (S10284C2_nt*), 0, "S10284C1");
    check_field_offset(lv, s10284c1f0, ABISELECT(88,56), "S10284C1.s10284c1f0");
    check_field_offset(lv, s10284c1f1, ABISELECT(92,60), "S10284C1.s10284c1f1");
    check_field_offset(lv, s10284c1f2, ABISELECT(104,68), "S10284C1.s10284c1f2");
    check_field_offset(lv, s10284c1f3, ABISELECT(120,80), "S10284C1.s10284c1f3");
    check_field_offset(lv, s10284c1f4, ABISELECT(128,84), "S10284C1.s10284c1f4");
    test_class_info(&lv, &cd_S10284C1);
    dp->~S10284C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS10284C1(Test_S10284C1, "S10284C1", ABISELECT(136,88));

#else // __cplusplus

extern void _ZN8S10284C1C1Ev();
extern void _ZN8S10284C1D1Ev();
Name_Map name_map_S10284C1[] = {
  NSPAIR(_ZN8S10284C1C1Ev),
  NSPAIR(_ZN8S10284C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S10284C2_nt;
extern VTBL_ENTRY _ZTI11S10284C2_nt[];
extern  VTBL_ENTRY _ZTV11S10284C2_nt[];
static Base_Class bases_S10284C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S10284C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S10284C1[];
extern void _ZN8S10284C1D1Ev();
extern void _ZN8S10284C1D0Ev();
extern void _ZN11S10284C2_nt2v9Ev();
extern void _ZN11S10284C2_nt3v10Ev();
extern void _ZN11S10284C2_nt3v11Ev();
extern void _ZN11S10284C2_nt3v12Ev();
extern void _ZN11S10284C2_nt3v13Ev();
extern void _ZN11S10284C2_nt3v14Ev();
extern void _ZN11S10284C2_nt3v15Ev();
extern void _ZN11S10284C2_nt3v16Ev();
extern void _ZN11S10284C2_nt3v17Ev();
extern void _ZN11S10284C2_nt3v18Ev();
extern void _ZN11S10284C2_nt3v19Ev();
extern void _ZN11S10284C2_nt3v20Ev();
extern void _ZN11S10284C2_nt3v21Ev();
extern void _ZN11S10284C2_nt3v22Ev();
extern void _ZN8S10284C12v1Ev();
extern void _ZN8S10284C12v2Ev();
extern void _ZN8S10284C12v3Ev();
extern void _ZN8S10284C12v4Ev();
extern void _ZN8S10284C12v5Ev();
extern void _ZN8S10284C12v6Ev();
extern void _ZN8S10284C12v7Ev();
extern void _ZN8S10284C12v8Ev();
static  VTBL_ENTRY vtc_S10284C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S10284C1[0]),
  (VTBL_ENTRY)&_ZN8S10284C1D1Ev,
  (VTBL_ENTRY)&_ZN8S10284C1D0Ev,
  (VTBL_ENTRY)&_ZN11S10284C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN11S10284C2_nt3v10Ev,
  (VTBL_ENTRY)&_ZN11S10284C2_nt3v11Ev,
  (VTBL_ENTRY)&_ZN11S10284C2_nt3v12Ev,
  (VTBL_ENTRY)&_ZN11S10284C2_nt3v13Ev,
  (VTBL_ENTRY)&_ZN11S10284C2_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S10284C2_nt3v15Ev,
  (VTBL_ENTRY)&_ZN11S10284C2_nt3v16Ev,
  (VTBL_ENTRY)&_ZN11S10284C2_nt3v17Ev,
  (VTBL_ENTRY)&_ZN11S10284C2_nt3v18Ev,
  (VTBL_ENTRY)&_ZN11S10284C2_nt3v19Ev,
  (VTBL_ENTRY)&_ZN11S10284C2_nt3v20Ev,
  (VTBL_ENTRY)&_ZN11S10284C2_nt3v21Ev,
  (VTBL_ENTRY)&_ZN11S10284C2_nt3v22Ev,
  (VTBL_ENTRY)&_ZN8S10284C12v1Ev,
  (VTBL_ENTRY)&_ZN8S10284C12v2Ev,
  (VTBL_ENTRY)&_ZN8S10284C12v3Ev,
  (VTBL_ENTRY)&_ZN8S10284C12v4Ev,
  (VTBL_ENTRY)&_ZN8S10284C12v5Ev,
  (VTBL_ENTRY)&_ZN8S10284C12v6Ev,
  (VTBL_ENTRY)&_ZN8S10284C12v7Ev,
  (VTBL_ENTRY)&_ZN8S10284C12v8Ev,
};
extern VTBL_ENTRY _ZTI8S10284C1[];
extern  VTBL_ENTRY _ZTV8S10284C1[];
Class_Descriptor cd_S10284C1 = {  "S10284C1", // class name
  bases_S10284C1, 1,
  &(vtc_S10284C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(136,88), // object size
  NSPAIRA(_ZTI8S10284C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S10284C1),26, //virtual function table var
  2, // 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  S11727C2_nt  {
  __tsi64 s11727c2f0[2];
};
//SIG(-1 S11727C2_nt) C1{ FL[2]}



//skip512 S11727C2_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11727C3  {
  ::S11727C2_nt s11727c3f0;
  long s11727c3f1;
  __tsi64 s11727c3f2[2];
  long s11727c3f3;
  __tsi64 s11727c3f4;
  short s11727c3f5[3];
  long s11727c3f6[11];
};
//SIG(-1 S11727C3) C1{ FC2{ FL[2]} Fl FL[2] Fl FL Fs[3] Fl[11]}



static void Test_S11727C3()
{
  {
    init_simple_test("S11727C3");
    S11727C3 lv;
    check2(sizeof(lv), ABISELECT(152,100), "sizeof(S11727C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11727C3)");
    check_field_offset(lv, s11727c3f0, 0, "S11727C3.s11727c3f0");
    check_field_offset(lv, s11727c3f1, 16, "S11727C3.s11727c3f1");
    check_field_offset(lv, s11727c3f2, ABISELECT(24,20), "S11727C3.s11727c3f2");
    check_field_offset(lv, s11727c3f3, ABISELECT(40,36), "S11727C3.s11727c3f3");
    check_field_offset(lv, s11727c3f4, ABISELECT(48,40), "S11727C3.s11727c3f4");
    check_field_offset(lv, s11727c3f5, ABISELECT(56,48), "S11727C3.s11727c3f5");
    check_field_offset(lv, s11727c3f6, ABISELECT(64,56), "S11727C3.s11727c3f6");
  }
}
static Arrange_To_Call_Me vS11727C3(Test_S11727C3, "S11727C3", ABISELECT(152,100));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11727C4  {
  ::S11727C2_nt s11727c4f0;
  __tsi64 s11727c4f1[2];
  long s11727c4f2;
  __tsi64 s11727c4f3;
  short s11727c4f4;
};
//SIG(-1 S11727C4) C1{ FC2{ FL[2]} FL[2] Fl FL Fs}



static void Test_S11727C4()
{
  {
    init_simple_test("S11727C4");
    S11727C4 lv;
    check2(sizeof(lv), ABISELECT(56,48), "sizeof(S11727C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11727C4)");
    check_field_offset(lv, s11727c4f0, 0, "S11727C4.s11727c4f0");
    check_field_offset(lv, s11727c4f1, 16, "S11727C4.s11727c4f1");
    check_field_offset(lv, s11727c4f2, 32, "S11727C4.s11727c4f2");
    check_field_offset(lv, s11727c4f3, ABISELECT(40,36), "S11727C4.s11727c4f3");
    check_field_offset(lv, s11727c4f4, ABISELECT(48,44), "S11727C4.s11727c4f4");
  }
}
static Arrange_To_Call_Me vS11727C4(Test_S11727C4, "S11727C4", ABISELECT(56,48));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11727C5_nt  {
  ::S11727C2_nt s11727c5f0;
  long s11727c5f1;
  ::S11727C2_nt s11727c5f2;
};
//SIG(-1 S11727C5_nt) C1{ FC2{ FL[2]} Fl FC2}



//skip512 S11727C5_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11727C6  {
  ::S11727C2_nt s11727c6f0;
  long s11727c6f1;
  ::S13685C13 s11727c6f2;
};
//SIG(-1 S11727C6) C1{ FC2{ FL[2]} Fl FU3{ FC4{ Fs Fs[3]} FC5{ Fs}}}



static void Test_S11727C6()
{
  {
    init_simple_test("S11727C6");
    S11727C6 lv;
    check2(sizeof(lv), ABISELECT(32,28), "sizeof(S11727C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11727C6)");
    check_field_offset(lv, s11727c6f0, 0, "S11727C6.s11727c6f0");
    check_field_offset(lv, s11727c6f1, 16, "S11727C6.s11727c6f1");
    check_field_offset(lv, s11727c6f2, ABISELECT(24,20), "S11727C6.s11727c6f2");
  }
}
static Arrange_To_Call_Me vS11727C6(Test_S11727C6, "S11727C6", ABISELECT(32,28));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11727C1  {
  ::S11727C2_nt s11727c1f0;
  ::S11727C2_nt s11727c1f1;
  ::S11727C3 s11727c1f2;
  ::S11727C4 s11727c1f3;
  ::S11727C5_nt s11727c1f4;
  ::S11727C6 s11727c1f5;
  void *s11727c1f6;
  void *s11727c1f7;
  void *s11727c1f8;
  void *s11727c1f9;
  void *s11727c1f10;
  void *s11727c1f11;
  void *s11727c1f12;
  void *s11727c1f13;
  void *s11727c1f14;
  void *s11727c1f15;
  void *s11727c1f16;
};
//SIG(1 S11727C1) C1{ FC2{ FL[2]} FC2 FC3{ FC2 Fl FL[2] Fl FL Fs[3] Fl[11]} FC4{ FC2 FL[2] Fl FL Fs} FC5{ FC2 Fl FC2} FC6{ FC2 Fl FU7{ FC8{ Fs Fs[3]} FC9{ Fs}}} Fp Fp Fp Fp Fp Fp Fp Fp Fp Fp Fp}



static void Test_S11727C1()
{
  {
    init_simple_test("S11727C1");
    S11727C1 lv;
    check2(sizeof(lv), ABISELECT(400,288), "sizeof(S11727C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11727C1)");
    check_field_offset(lv, s11727c1f0, 0, "S11727C1.s11727c1f0");
    check_field_offset(lv, s11727c1f1, 16, "S11727C1.s11727c1f1");
    check_field_offset(lv, s11727c1f2, 32, "S11727C1.s11727c1f2");
    check_field_offset(lv, s11727c1f3, ABISELECT(184,132), "S11727C1.s11727c1f3");
    check_field_offset(lv, s11727c1f4, ABISELECT(240,180), "S11727C1.s11727c1f4");
    check_field_offset(lv, s11727c1f5, ABISELECT(280,216), "S11727C1.s11727c1f5");
    check_field_offset(lv, s11727c1f6, ABISELECT(312,244), "S11727C1.s11727c1f6");
    check_field_offset(lv, s11727c1f7, ABISELECT(320,248), "S11727C1.s11727c1f7");
    check_field_offset(lv, s11727c1f8, ABISELECT(328,252), "S11727C1.s11727c1f8");
    check_field_offset(lv, s11727c1f9, ABISELECT(336,256), "S11727C1.s11727c1f9");
    check_field_offset(lv, s11727c1f10, ABISELECT(344,260), "S11727C1.s11727c1f10");
    check_field_offset(lv, s11727c1f11, ABISELECT(352,264), "S11727C1.s11727c1f11");
    check_field_offset(lv, s11727c1f12, ABISELECT(360,268), "S11727C1.s11727c1f12");
    check_field_offset(lv, s11727c1f13, ABISELECT(368,272), "S11727C1.s11727c1f13");
    check_field_offset(lv, s11727c1f14, ABISELECT(376,276), "S11727C1.s11727c1f14");
    check_field_offset(lv, s11727c1f15, ABISELECT(384,280), "S11727C1.s11727c1f15");
    check_field_offset(lv, s11727c1f16, ABISELECT(392,284), "S11727C1.s11727c1f16");
  }
}
static Arrange_To_Call_Me vS11727C1(Test_S11727C1, "S11727C1", ABISELECT(400,288));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4447C3  {
  ::S2120C20_nt s4447c3f0;
  int s4447c3f1[2];
  char s4447c3f2;
  virtual  ~S4447C3(); // _ZN7S4447C3D1Ev
  virtual void  v2(); // _ZN7S4447C32v2Ev
  virtual void  v3(); // _ZN7S4447C32v3Ev
  virtual void  v4(); // _ZN7S4447C32v4Ev
  S4447C3(); // tgen
};
//SIG(-1 S4447C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4447C3 ::~S4447C3(){ note_dtor("S4447C3", this);}
void  S4447C3 ::v2(){vfunc_called(this, "_ZN7S4447C32v2Ev");}
void  S4447C3 ::v3(){vfunc_called(this, "_ZN7S4447C32v3Ev");}
void  S4447C3 ::v4(){vfunc_called(this, "_ZN7S4447C32v4Ev");}
S4447C3 ::S4447C3(){ note_ctor("S4447C3", this);} // tgen

static void Test_S4447C3()
{
  extern Class_Descriptor cd_S4447C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4447C3, buf);
    S4447C3 *dp, &lv = *(dp=new (buf) S4447C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4447C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4447C3)");
    check_field_offset(lv, s4447c3f0, ABISELECT(8,4), "S4447C3.s4447c3f0");
    check_field_offset(lv, s4447c3f1, ABISELECT(24,16), "S4447C3.s4447c3f1");
    check_field_offset(lv, s4447c3f2, ABISELECT(32,24), "S4447C3.s4447c3f2");
    test_class_info(&lv, &cd_S4447C3);
    dp->~S4447C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4447C3(Test_S4447C3, "S4447C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4447C3C1Ev();
extern void _ZN7S4447C3D1Ev();
Name_Map name_map_S4447C3[] = {
  NSPAIR(_ZN7S4447C3C1Ev),
  NSPAIR(_ZN7S4447C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4447C3[];
extern void _ZN7S4447C3D1Ev();
extern void _ZN7S4447C3D0Ev();
extern void _ZN7S4447C32v2Ev();
extern void _ZN7S4447C32v3Ev();
extern void _ZN7S4447C32v4Ev();
static  VTBL_ENTRY vtc_S4447C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4447C3[0]),
  (VTBL_ENTRY)&_ZN7S4447C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4447C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4447C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4447C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4447C32v4Ev,
};
extern VTBL_ENTRY _ZTI7S4447C3[];
extern  VTBL_ENTRY _ZTV7S4447C3[];
Class_Descriptor cd_S4447C3 = {  "S4447C3", // class name
  0,0,//no base classes
  &(vtc_S4447C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4447C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4447C3),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  S4447C2  : S4447C3 {
  void *s4447c2f0;
  int s4447c2f1;
  virtual  ~S4447C2(); // _ZN7S4447C2D1Ev
  virtual void  v5(); // _ZN7S4447C22v5Ev
  virtual void  v6(); // _ZN7S4447C22v6Ev
  S4447C2(); // tgen
};
//SIG(-1 S4447C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} vd v1 v2 Fp Fi}


 S4447C2 ::~S4447C2(){ note_dtor("S4447C2", this);}
void  S4447C2 ::v5(){vfunc_called(this, "_ZN7S4447C22v5Ev");}
void  S4447C2 ::v6(){vfunc_called(this, "_ZN7S4447C22v6Ev");}
S4447C2 ::S4447C2(){ note_ctor("S4447C2", this);} // tgen

static void Test_S4447C2()
{
  extern Class_Descriptor cd_S4447C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,10)];
    init_test(&cd_S4447C2, buf);
    S4447C2 *dp, &lv = *(dp=new (buf) S4447C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,36), "sizeof(S4447C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4447C2)");
    check_base_class_offset(lv, (S4447C3*), 0, "S4447C2");
    check_field_offset(lv, s4447c2f0, ABISELECT(40,28), "S4447C2.s4447c2f0");
    check_field_offset(lv, s4447c2f1, ABISELECT(48,32), "S4447C2.s4447c2f1");
    test_class_info(&lv, &cd_S4447C2);
    dp->~S4447C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4447C2(Test_S4447C2, "S4447C2", ABISELECT(56,36));

#else // __cplusplus

extern void _ZN7S4447C2C1Ev();
extern void _ZN7S4447C2D1Ev();
Name_Map name_map_S4447C2[] = {
  NSPAIR(_ZN7S4447C2C1Ev),
  NSPAIR(_ZN7S4447C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4447C3;
extern VTBL_ENTRY _ZTI7S4447C3[];
extern  VTBL_ENTRY _ZTV7S4447C3[];
static Base_Class bases_S4447C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4447C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4447C2[];
extern void _ZN7S4447C2D1Ev();
extern void _ZN7S4447C2D0Ev();
extern void _ZN7S4447C32v2Ev();
extern void _ZN7S4447C32v3Ev();
extern void _ZN7S4447C32v4Ev();
extern void _ZN7S4447C22v5Ev();
extern void _ZN7S4447C22v6Ev();
static  VTBL_ENTRY vtc_S4447C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4447C2[0]),
  (VTBL_ENTRY)&_ZN7S4447C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4447C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4447C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4447C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4447C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4447C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4447C22v6Ev,
};
extern VTBL_ENTRY _ZTI7S4447C2[];
extern  VTBL_ENTRY _ZTV7S4447C2[];
Class_Descriptor cd_S4447C2 = {  "S4447C2", // class name
  bases_S4447C2, 1,
  &(vtc_S4447C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,36), // object size
  NSPAIRA(_ZTI7S4447C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4447C2),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  S4447C1  : S4447C2 {
  ::S2428C5 s4447c1f0;
  char s4447c1f1;
  virtual  ~S4447C1(); // _ZN7S4447C1D1Ev
  virtual void  v1(); // _ZN7S4447C12v1Ev
  S4447C1(); // tgen
};
//SIG(1 S4447C1) C1{ BC2{ BC3{ vd v2 v3 v4 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} vd v5 v6 Fp Fi} vd v1 FC6{ m FC7{ m FC4 FC4 FL} FL Fi Fc[2] FC4 Fp Fi FC4[9] FC4 FC4 Fi FC4 FC4 FC4 Fi[4]} Fc}


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

static void Test_S4447C1()
{
  extern Class_Descriptor cd_S4447C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(51,75)];
    init_test(&cd_S4447C1, buf);
    S4447C1 *dp, &lv = *(dp=new (buf) S4447C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(400,296), "sizeof(S4447C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4447C1)");
    check_base_class_offset(lv, (S4447C3*)(S4447C2*), 0, "S4447C1");
    check_base_class_offset(lv, (S4447C2*), 0, "S4447C1");
    check_field_offset(lv, s4447c1f0, ABISELECT(56,36), "S4447C1.s4447c1f0");
    check_field_offset(lv, s4447c1f1, ABISELECT(392,292), "S4447C1.s4447c1f1");
    test_class_info(&lv, &cd_S4447C1);
    dp->~S4447C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4447C1(Test_S4447C1, "S4447C1", ABISELECT(400,296));

#else // __cplusplus

extern void _ZN7S4447C1C1Ev();
extern void _ZN7S4447C1D1Ev();
Name_Map name_map_S4447C1[] = {
  NSPAIR(_ZN7S4447C1C1Ev),
  NSPAIR(_ZN7S4447C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4447C3;
extern VTBL_ENTRY _ZTI7S4447C3[];
extern  VTBL_ENTRY _ZTV7S4447C3[];
extern Class_Descriptor cd_S4447C2;
extern VTBL_ENTRY _ZTI7S4447C2[];
extern  VTBL_ENTRY _ZTV7S4447C2[];
static Base_Class bases_S4447C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4447C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4447C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S4447C1[];
extern void _ZN7S4447C1D1Ev();
extern void _ZN7S4447C1D0Ev();
extern void _ZN7S4447C32v2Ev();
extern void _ZN7S4447C32v3Ev();
extern void _ZN7S4447C32v4Ev();
extern void _ZN7S4447C22v5Ev();
extern void _ZN7S4447C22v6Ev();
extern void _ZN7S4447C12v1Ev();
static  VTBL_ENTRY vtc_S4447C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4447C1[0]),
  (VTBL_ENTRY)&_ZN7S4447C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4447C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4447C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4447C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4447C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4447C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4447C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4447C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4447C1[];
extern  VTBL_ENTRY _ZTV7S4447C1[];
Class_Descriptor cd_S4447C1 = {  "S4447C1", // class name
  bases_S4447C1, 2,
  &(vtc_S4447C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(400,296), // object size
  NSPAIRA(_ZTI7S4447C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4447C1),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  S7633C3_nt  {
  void *s7633c3f0;
  long double s7633c3f1;
  int s7633c3f2;
  virtual void  v6(); // _ZN10S7633C3_nt2v6Ev
  virtual void  v7(); // _ZN10S7633C3_nt2v7Ev
  ~S7633C3_nt(); // tgen
  S7633C3_nt(); // tgen
};
//SIG(-1 S7633C3_nt) C1{ v1 v2 Fp FD Fi}


void  S7633C3_nt ::v6(){vfunc_called(this, "_ZN10S7633C3_nt2v6Ev");}
void  S7633C3_nt ::v7(){vfunc_called(this, "_ZN10S7633C3_nt2v7Ev");}
S7633C3_nt ::~S7633C3_nt(){ note_dtor("S7633C3_nt", this);} // tgen
S7633C3_nt ::S7633C3_nt(){ note_ctor("S7633C3_nt", this);} // tgen

//skip512 S7633C3_nt

#else // __cplusplus

extern void _ZN10S7633C3_ntC1Ev();
extern void _ZN10S7633C3_ntD1Ev();
Name_Map name_map_S7633C3_nt[] = {
  NSPAIR(_ZN10S7633C3_ntC1Ev),
  NSPAIR(_ZN10S7633C3_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S7633C3_nt[];
extern void _ZN10S7633C3_nt2v6Ev();
extern void _ZN10S7633C3_nt2v7Ev();
static  VTBL_ENTRY vtc_S7633C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S7633C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S7633C3_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S7633C3_nt2v7Ev,
};
extern VTBL_ENTRY _ZTI10S7633C3_nt[];
VTBL_ENTRY *P__ZTI10S7633C3_nt = _ZTI10S7633C3_nt; 
extern  VTBL_ENTRY _ZTV10S7633C3_nt[];
Class_Descriptor cd_S7633C3_nt = {  "S7633C3_nt", // class name
  0,0,//no base classes
  &(vtc_S7633C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI10S7633C3_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S7633C3_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  S7633C2_nt  : virtual S7633C3_nt {
  void *s7633c2f0;
  virtual  ~S7633C2_nt(); // _ZN10S7633C2_ntD2Ev
  virtual void  v8(); // _ZN10S7633C2_nt2v8Ev
  virtual void  v9(); // _ZN10S7633C2_nt2v9Ev
  virtual void  v10(); // _ZN10S7633C2_nt3v10Ev
  virtual void  v11(); // _ZN10S7633C2_nt3v11Ev
  virtual void  v12(); // _ZN10S7633C2_nt3v12Ev
  virtual void  v13(); // _ZN10S7633C2_nt3v13Ev
  S7633C2_nt(); // tgen
};
//SIG(-1 S7633C2_nt) C1{ VBC2{ v7 v8 Fp FD Fi} vd v1 v2 v3 v4 v5 v6 Fp}


 S7633C2_nt ::~S7633C2_nt(){ note_dtor("S7633C2_nt", this);}
void  S7633C2_nt ::v8(){vfunc_called(this, "_ZN10S7633C2_nt2v8Ev");}
void  S7633C2_nt ::v9(){vfunc_called(this, "_ZN10S7633C2_nt2v9Ev");}
void  S7633C2_nt ::v10(){vfunc_called(this, "_ZN10S7633C2_nt3v10Ev");}
void  S7633C2_nt ::v11(){vfunc_called(this, "_ZN10S7633C2_nt3v11Ev");}
void  S7633C2_nt ::v12(){vfunc_called(this, "_ZN10S7633C2_nt3v12Ev");}
void  S7633C2_nt ::v13(){vfunc_called(this, "_ZN10S7633C2_nt3v13Ev");}
S7633C2_nt ::S7633C2_nt(){ note_ctor("S7633C2_nt", this);} // tgen

//skip512 S7633C2_nt

#else // __cplusplus

extern void _ZN10S7633C2_ntC1Ev();
extern void _ZN10S7633C2_ntD2Ev();
Name_Map name_map_S7633C2_nt[] = {
  NSPAIR(_ZN10S7633C2_ntC1Ev),
  NSPAIR(_ZN10S7633C2_ntD2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7633C3_nt;
extern VTBL_ENTRY _ZTI10S7633C3_nt[];
extern  VTBL_ENTRY _ZTV10S7633C3_nt[];
static Base_Class bases_S7633C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7633C3_nt,    ABISELECT(16,8), //bcp->offset
    11, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI10S7633C2_nt[];
extern void _ZN10S7633C2_ntD1Ev();
extern void _ZN10S7633C2_ntD0Ev();
extern void _ZN10S7633C2_nt2v8Ev();
extern void _ZN10S7633C2_nt2v9Ev();
extern void _ZN10S7633C2_nt3v10Ev();
extern void _ZN10S7633C2_nt3v11Ev();
extern void _ZN10S7633C2_nt3v12Ev();
extern void _ZN10S7633C2_nt3v13Ev();
extern void _ZN10S7633C3_nt2v6Ev();
extern void _ZN10S7633C3_nt2v7Ev();
static  VTBL_ENTRY vtc_S7633C2_nt[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI10S7633C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S7633C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S7633C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S7633C2_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S7633C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S7633C2_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S7633C2_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S7633C2_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S7633C2_nt3v13Ev,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI10S7633C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S7633C3_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S7633C3_nt2v7Ev,
};
extern VTBL_ENTRY _ZTV10S7633C2_nt[];
static  VTT_ENTRY vtt_S7633C2_nt[] = {
  {&(_ZTV10S7633C2_nt[3]),  3,17},
  {&(_ZTV10S7633C2_nt[15]),  15,17},
};
extern VTBL_ENTRY _ZTI10S7633C2_nt[];
VTBL_ENTRY *P__ZTI10S7633C2_nt = _ZTI10S7633C2_nt; 
extern  VTBL_ENTRY _ZTV10S7633C2_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT10S7633C2_nt[];
Class_Descriptor cd_S7633C2_nt = {  "S7633C2_nt", // class name
  bases_S7633C2_nt, 1,
  &(vtc_S7633C2_nt[0]), // expected_vtbl_contents
  &(vtt_S7633C2_nt[0]), // expected_vtt_contents
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI10S7633C2_nt),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV10S7633C2_nt),17, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT10S7633C2_nt),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  S7633C5_nt  {
  __tsi64 s7633c5f0[9];
  virtual  ~S7633C5_nt(); // _ZN10S7633C5_ntD1Ev
  virtual void  v14(); // _ZN10S7633C5_nt3v14Ev
  virtual void  v15(); // _ZN10S7633C5_nt3v15Ev
  virtual void  v16(); // _ZN10S7633C5_nt3v16Ev
  virtual void  v17(); // _ZN10S7633C5_nt3v17Ev
  virtual void  v18(); // _ZN10S7633C5_nt3v18Ev
  virtual void  v19(); // _ZN10S7633C5_nt3v19Ev
  virtual void  v20(); // _ZN10S7633C5_nt3v20Ev
  S7633C5_nt(); // tgen
};
//SIG(-1 S7633C5_nt) C1{ vd v1 v2 v3 v4 v5 v6 v7 FL[9]}


 S7633C5_nt ::~S7633C5_nt(){ note_dtor("S7633C5_nt", this);}
void  S7633C5_nt ::v14(){vfunc_called(this, "_ZN10S7633C5_nt3v14Ev");}
void  S7633C5_nt ::v15(){vfunc_called(this, "_ZN10S7633C5_nt3v15Ev");}
void  S7633C5_nt ::v16(){vfunc_called(this, "_ZN10S7633C5_nt3v16Ev");}
void  S7633C5_nt ::v17(){vfunc_called(this, "_ZN10S7633C5_nt3v17Ev");}
void  S7633C5_nt ::v18(){vfunc_called(this, "_ZN10S7633C5_nt3v18Ev");}
void  S7633C5_nt ::v19(){vfunc_called(this, "_ZN10S7633C5_nt3v19Ev");}
void  S7633C5_nt ::v20(){vfunc_called(this, "_ZN10S7633C5_nt3v20Ev");}
S7633C5_nt ::S7633C5_nt(){ note_ctor("S7633C5_nt", this);} // tgen

//skip512 S7633C5_nt

#else // __cplusplus

extern void _ZN10S7633C5_ntC1Ev();
extern void _ZN10S7633C5_ntD1Ev();
Name_Map name_map_S7633C5_nt[] = {
  NSPAIR(_ZN10S7633C5_ntC1Ev),
  NSPAIR(_ZN10S7633C5_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S7633C5_nt[];
extern void _ZN10S7633C5_ntD1Ev();
extern void _ZN10S7633C5_ntD0Ev();
extern void _ZN10S7633C5_nt3v14Ev();
extern void _ZN10S7633C5_nt3v15Ev();
extern void _ZN10S7633C5_nt3v16Ev();
extern void _ZN10S7633C5_nt3v17Ev();
extern void _ZN10S7633C5_nt3v18Ev();
extern void _ZN10S7633C5_nt3v19Ev();
extern void _ZN10S7633C5_nt3v20Ev();
static  VTBL_ENTRY vtc_S7633C5_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S7633C5_nt[0]),
  (VTBL_ENTRY)&_ZN10S7633C5_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S7633C5_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S7633C5_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S7633C5_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S7633C5_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S7633C5_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S7633C5_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S7633C5_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S7633C5_nt3v20Ev,
};
extern VTBL_ENTRY _ZTI10S7633C5_nt[];
VTBL_ENTRY *P__ZTI10S7633C5_nt = _ZTI10S7633C5_nt; 
extern  VTBL_ENTRY _ZTV10S7633C5_nt[];
Class_Descriptor cd_S7633C5_nt = {  "S7633C5_nt", // class name
  0,0,//no base classes
  &(vtc_S7633C5_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,76), // object size
  NSPAIRA(_ZTI10S7633C5_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S7633C5_nt),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7633C4  : virtual S7633C5_nt {
  long s7633c4f0;
  virtual void  v21(); // _ZN7S7633C43v21Ev
  virtual void  v22(); // _ZN7S7633C43v22Ev
  virtual void  v23(); // _ZN7S7633C43v23Ev
  virtual void  v24(); // _ZN7S7633C43v24Ev
  virtual void  v25(); // _ZN7S7633C43v25Ev
  virtual void  v26(); // _ZN7S7633C43v26Ev
  virtual void  v27(); // _ZN7S7633C43v27Ev
  ~S7633C4(); // tgen
  S7633C4(); // tgen
};
//SIG(-1 S7633C4) C1{ VBC2{ vd v8 v9 v10 v11 v12 v13 v14 FL[9]} v1 v2 v3 v4 v5 v6 v7 Fl}


void  S7633C4 ::v21(){vfunc_called(this, "_ZN7S7633C43v21Ev");}
void  S7633C4 ::v22(){vfunc_called(this, "_ZN7S7633C43v22Ev");}
void  S7633C4 ::v23(){vfunc_called(this, "_ZN7S7633C43v23Ev");}
void  S7633C4 ::v24(){vfunc_called(this, "_ZN7S7633C43v24Ev");}
void  S7633C4 ::v25(){vfunc_called(this, "_ZN7S7633C43v25Ev");}
void  S7633C4 ::v26(){vfunc_called(this, "_ZN7S7633C43v26Ev");}
void  S7633C4 ::v27(){vfunc_called(this, "_ZN7S7633C43v27Ev");}
S7633C4 ::~S7633C4(){ note_dtor("S7633C4", this);} // tgen
S7633C4 ::S7633C4(){ note_ctor("S7633C4", this);} // tgen

static void Test_S7633C4()
{
  extern Class_Descriptor cd_S7633C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,22)];
    init_test(&cd_S7633C4, buf);
    S7633C4 *dp, &lv = *(dp=new (buf) S7633C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,84), "sizeof(S7633C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7633C4)");
    check_base_class_offset(lv, (S7633C5_nt*), ABISELECT(16,8), "S7633C4");
    check_field_offset(lv, s7633c4f0, ABISELECT(8,4), "S7633C4.s7633c4f0");
    test_class_info(&lv, &cd_S7633C4);
    dp->~S7633C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7633C4(Test_S7633C4, "S7633C4", ABISELECT(96,84));

#else // __cplusplus

extern void _ZN7S7633C4C1Ev();
extern void _ZN7S7633C4D1Ev();
Name_Map name_map_S7633C4[] = {
  NSPAIR(_ZN7S7633C4C1Ev),
  NSPAIR(_ZN7S7633C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7633C5_nt;
extern VTBL_ENTRY _ZTI10S7633C5_nt[];
extern  VTBL_ENTRY _ZTV10S7633C5_nt[];
static Base_Class bases_S7633C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7633C5_nt,    ABISELECT(16,8), //bcp->offset
    12, //bcp->virtual_function_table_offset
    10, //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 _ZTI7S7633C4[];
extern void _ZN7S7633C43v21Ev();
extern void _ZN7S7633C43v22Ev();
extern void _ZN7S7633C43v23Ev();
extern void _ZN7S7633C43v24Ev();
extern void _ZN7S7633C43v25Ev();
extern void _ZN7S7633C43v26Ev();
extern void _ZN7S7633C43v27Ev();
extern void _ZN7S7633C4D1Ev();
extern void _ZN7S7633C4D0Ev();
extern void ABISELECT(_ZTv0_n24_N7S7633C4D1Ev,_ZTv0_n12_N7S7633C4D1Ev)();
extern void ABISELECT(_ZThn16_N7S7633C4D1Ev,_ZThn8_N7S7633C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7633C4D0Ev,_ZTv0_n12_N7S7633C4D0Ev)();
extern void ABISELECT(_ZThn16_N7S7633C4D0Ev,_ZThn8_N7S7633C4D0Ev)() __attribute__((weak));
extern void _ZN10S7633C5_nt3v14Ev();
extern void _ZN10S7633C5_nt3v15Ev();
extern void _ZN10S7633C5_nt3v16Ev();
extern void _ZN10S7633C5_nt3v17Ev();
extern void _ZN10S7633C5_nt3v18Ev();
extern void _ZN10S7633C5_nt3v19Ev();
extern void _ZN10S7633C5_nt3v20Ev();
static  VTBL_ENTRY vtc_S7633C4[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7633C4[0]),
  (VTBL_ENTRY)&_ZN7S7633C43v21Ev,
  (VTBL_ENTRY)&_ZN7S7633C43v22Ev,
  (VTBL_ENTRY)&_ZN7S7633C43v23Ev,
  (VTBL_ENTRY)&_ZN7S7633C43v24Ev,
  (VTBL_ENTRY)&_ZN7S7633C43v25Ev,
  (VTBL_ENTRY)&_ZN7S7633C43v26Ev,
  (VTBL_ENTRY)&_ZN7S7633C43v27Ev,
  (VTBL_ENTRY)&_ZN7S7633C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7633C4D0Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7633C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7633C4D1Ev,_ZTv0_n12_N7S7633C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7633C4D0Ev,_ZTv0_n12_N7S7633C4D0Ev),
  (VTBL_ENTRY)&_ZN10S7633C5_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S7633C5_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S7633C5_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S7633C5_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S7633C5_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S7633C5_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S7633C5_nt3v20Ev,
};
extern VTBL_ENTRY _ZTV7S7633C4[];
static  VTT_ENTRY vtt_S7633C4[] = {
  {&(_ZTV7S7633C4[3]),  3,31},
  {&(_ZTV7S7633C4[22]),  22,31},
};
extern VTBL_ENTRY _ZTI7S7633C4[];
extern  VTBL_ENTRY _ZTV7S7633C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7633C4[];
static VTBL_ENTRY alt_thunk_names38[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7633C4D0Ev,_ZTv0_n12_N7S7633C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7633C4D0Ev,_ZThn8_N7S7633C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7633C4D1Ev,_ZTv0_n12_N7S7633C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7633C4D1Ev,_ZThn8_N7S7633C4D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7633C4 = {  "S7633C4", // class name
  bases_S7633C4, 1,
  &(vtc_S7633C4[0]), // expected_vtbl_contents
  &(vtt_S7633C4[0]), // expected_vtt_contents
  ABISELECT(96,84), // object size
  NSPAIRA(_ZTI7S7633C4),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7633C4),31, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7633C4),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names38,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7633C1  : S7633C2_nt , virtual S7633C4 {
  long s7633c1f0[2];
  virtual void  v1(); // _ZN7S7633C12v1Ev
  virtual void  v2(); // _ZN7S7633C12v2Ev
  virtual void  v3(); // _ZN7S7633C12v3Ev
  virtual void  v4(); // _ZN7S7633C12v4Ev
  virtual void  v5(); // _ZN7S7633C12v5Ev
  ~S7633C1(); // tgen
  S7633C1(); // tgen
};
//SIG(1 S7633C1) C1{ BC2{ VBC3{ v6 v7 Fp FD Fi} vd v8 v9 v10 v11 v12 v13 Fp} VBC4{ VBC5{ vd v14 v15 v16 v17 v18 v19 v20 FL[9]} v21 v22 v23 v24 v25 v26 v27 Fl} v1 v2 v3 v4 v5 Fl[2]}


void  S7633C1 ::v1(){vfunc_called(this, "_ZN7S7633C12v1Ev");}
void  S7633C1 ::v2(){vfunc_called(this, "_ZN7S7633C12v2Ev");}
void  S7633C1 ::v3(){vfunc_called(this, "_ZN7S7633C12v3Ev");}
void  S7633C1 ::v4(){vfunc_called(this, "_ZN7S7633C12v4Ev");}
void  S7633C1 ::v5(){vfunc_called(this, "_ZN7S7633C12v5Ev");}
S7633C1 ::~S7633C1(){ note_dtor("S7633C1", this);} // tgen
S7633C1 ::S7633C1(){ note_ctor("S7633C1", this);} // tgen

static void Test_S7633C1()
{
  extern Class_Descriptor cd_S7633C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(12,32)];
    init_test(&cd_S7633C1, buf);
    S7633C1 *dp, &lv = *(dp=new (buf) S7633C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,124), "sizeof(S7633C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7633C1)");
    check_base_class_offset(lv, (S7633C3_nt*)(S7633C2_nt*), ABISELECT(32,16), "S7633C1");
    check_base_class_offset(lv, (S7633C2_nt*), 0, "S7633C1");
    check_base_class_offset(lv, (S7633C5_nt*)(S7633C4*), ABISELECT(88,48), "S7633C1");
    check_base_class_offset(lv, (S7633C4*), ABISELECT(72,40), "S7633C1");
    check_field_offset(lv, s7633c1f0, ABISELECT(16,8), "S7633C1.s7633c1f0");
    test_class_info(&lv, &cd_S7633C1);
    dp->~S7633C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7633C1(Test_S7633C1, "S7633C1", ABISELECT(176,124));

#else // __cplusplus

extern void _ZN7S7633C1C1Ev();
extern void _ZN7S7633C1D1Ev();
Name_Map name_map_S7633C1[] = {
  NSPAIR(_ZN7S7633C1C1Ev),
  NSPAIR(_ZN7S7633C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7633C3_nt;
extern VTBL_ENTRY _ZTI10S7633C3_nt[];
extern  VTBL_ENTRY _ZTV10S7633C3_nt[];
extern Class_Descriptor cd_S7633C2_nt;
extern VTBL_ENTRY _ZTI10S7633C2_nt[];
extern  VTBL_ENTRY _ZTV10S7633C2_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT10S7633C2_nt[];
extern Class_Descriptor cd_S7633C5_nt;
extern VTBL_ENTRY _ZTI10S7633C5_nt[];
extern  VTBL_ENTRY _ZTV10S7633C5_nt[];
extern Class_Descriptor cd_S7633C4;
extern VTBL_ENTRY _ZTI7S7633C4[];
extern  VTBL_ENTRY _ZTV7S7633C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7633C4[];
static Base_Class bases_S7633C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7633C3_nt,    ABISELECT(32,16), //bcp->offset
    18, //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
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7633C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7633C5_nt,    ABISELECT(88,48), //bcp->offset
    44, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7633C4,    ABISELECT(72,40), //bcp->offset
    24, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7633C1[];
extern void _ZN7S7633C1D1Ev();
extern void _ZN7S7633C1D0Ev();
extern void _ZN10S7633C2_nt2v8Ev();
extern void _ZN10S7633C2_nt2v9Ev();
extern void _ZN10S7633C2_nt3v10Ev();
extern void _ZN10S7633C2_nt3v11Ev();
extern void _ZN10S7633C2_nt3v12Ev();
extern void _ZN10S7633C2_nt3v13Ev();
extern void _ZN7S7633C12v1Ev();
extern void _ZN7S7633C12v2Ev();
extern void _ZN7S7633C12v3Ev();
extern void _ZN7S7633C12v4Ev();
extern void _ZN7S7633C12v5Ev();
extern void _ZN10S7633C3_nt2v6Ev();
extern void _ZN10S7633C3_nt2v7Ev();
extern void _ZN7S7633C43v21Ev();
extern void _ZN7S7633C43v22Ev();
extern void _ZN7S7633C43v23Ev();
extern void _ZN7S7633C43v24Ev();
extern void _ZN7S7633C43v25Ev();
extern void _ZN7S7633C43v26Ev();
extern void _ZN7S7633C43v27Ev();
extern void ABISELECT(_ZTv0_n88_N7S7633C1D1Ev,_ZTv0_n44_N7S7633C1D1Ev)();
extern void ABISELECT(_ZThn72_N7S7633C1D1Ev,_ZThn40_N7S7633C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N7S7633C1D0Ev,_ZTv0_n44_N7S7633C1D0Ev)();
extern void ABISELECT(_ZThn72_N7S7633C1D0Ev,_ZThn40_N7S7633C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7633C1D1Ev,_ZTv0_n12_N7S7633C1D1Ev)();
extern void ABISELECT(_ZThn88_N7S7633C1D1Ev,_ZThn48_N7S7633C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7633C1D0Ev,_ZTv0_n12_N7S7633C1D0Ev)();
extern void ABISELECT(_ZThn88_N7S7633C1D0Ev,_ZThn48_N7S7633C1D0Ev)() __attribute__((weak));
extern void _ZN10S7633C5_nt3v14Ev();
extern void _ZN10S7633C5_nt3v15Ev();
extern void _ZN10S7633C5_nt3v16Ev();
extern void _ZN10S7633C5_nt3v17Ev();
extern void _ZN10S7633C5_nt3v18Ev();
extern void _ZN10S7633C5_nt3v19Ev();
extern void _ZN10S7633C5_nt3v20Ev();
static  VTBL_ENTRY vtc_S7633C1[] = {
  ABISELECT(88,48),
  ABISELECT(72,40),
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7633C1[0]),
  (VTBL_ENTRY)&_ZN7S7633C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7633C1D0Ev,
  (VTBL_ENTRY)&_ZN10S7633C2_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S7633C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S7633C2_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S7633C2_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S7633C2_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S7633C2_nt3v13Ev,
  (VTBL_ENTRY)&_ZN7S7633C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7633C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7633C12v3Ev,
  (VTBL_ENTRY)&_ZN7S7633C12v4Ev,
  (VTBL_ENTRY)&_ZN7S7633C12v5Ev,
  0,
  0,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S7633C1[0]),
  (VTBL_ENTRY)&_ZN10S7633C3_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S7633C3_nt2v7Ev,
  ABISELECT(-72,-40),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,8),
  ABISELECT(-72,-40),
  (VTBL_ENTRY)&(_ZTI7S7633C1[0]),
  (VTBL_ENTRY)&_ZN7S7633C43v21Ev,
  (VTBL_ENTRY)&_ZN7S7633C43v22Ev,
  (VTBL_ENTRY)&_ZN7S7633C43v23Ev,
  (VTBL_ENTRY)&_ZN7S7633C43v24Ev,
  (VTBL_ENTRY)&_ZN7S7633C43v25Ev,
  (VTBL_ENTRY)&_ZN7S7633C43v26Ev,
  (VTBL_ENTRY)&_ZN7S7633C43v27Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N7S7633C1D1Ev,_ZTv0_n44_N7S7633C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N7S7633C1D0Ev,_ZTv0_n44_N7S7633C1D0Ev),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-88,-48),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI7S7633C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7633C1D1Ev,_ZTv0_n12_N7S7633C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7633C1D0Ev,_ZTv0_n12_N7S7633C1D0Ev),
  (VTBL_ENTRY)&_ZN10S7633C5_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S7633C5_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S7633C5_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S7633C5_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S7633C5_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S7633C5_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S7633C5_nt3v20Ev,
};
extern VTBL_ENTRY _ZTV7S7633C1[];
extern void _ZN10S7633C2_ntD1Ev();
extern void _ZN10S7633C2_ntD0Ev();
extern void _ZN10S7633C2_nt2v8Ev();
extern void _ZN10S7633C2_nt2v9Ev();
extern void _ZN10S7633C2_nt3v10Ev();
extern void _ZN10S7633C2_nt3v11Ev();
extern void _ZN10S7633C2_nt3v12Ev();
extern void _ZN10S7633C2_nt3v13Ev();
static  VTBL_ENTRY _tg__ZTV10S7633C2_nt__7S7633C1[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI10S7633C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S7633C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S7633C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S7633C2_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S7633C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S7633C2_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S7633C2_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S7633C2_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S7633C2_nt3v13Ev,
};
extern void _ZN10S7633C3_nt2v6Ev();
extern void _ZN10S7633C3_nt2v7Ev();
static  VTBL_ENTRY _tg__ZTV10S7633C3_nt__10S7633C2_nt__7S7633C1[] = {
  0,
  0,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI10S7633C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S7633C3_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S7633C3_nt2v7Ev,
};
extern void _ZN7S7633C43v21Ev();
extern void _ZN7S7633C43v22Ev();
extern void _ZN7S7633C43v23Ev();
extern void _ZN7S7633C43v24Ev();
extern void _ZN7S7633C43v25Ev();
extern void _ZN7S7633C43v26Ev();
extern void _ZN7S7633C43v27Ev();
extern void _ZN7S7633C4D1Ev();
extern void _ZN7S7633C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7633C4__7S7633C1[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7633C4[0]),
  (VTBL_ENTRY)&_ZN7S7633C43v21Ev,
  (VTBL_ENTRY)&_ZN7S7633C43v22Ev,
  (VTBL_ENTRY)&_ZN7S7633C43v23Ev,
  (VTBL_ENTRY)&_ZN7S7633C43v24Ev,
  (VTBL_ENTRY)&_ZN7S7633C43v25Ev,
  (VTBL_ENTRY)&_ZN7S7633C43v26Ev,
  (VTBL_ENTRY)&_ZN7S7633C43v27Ev,
  (VTBL_ENTRY)&_ZN7S7633C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7633C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7633C4D1Ev,_ZTv0_n12_N7S7633C4D1Ev)();
extern void ABISELECT(_ZThn16_N7S7633C4D1Ev,_ZThn8_N7S7633C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7633C4D0Ev,_ZTv0_n12_N7S7633C4D0Ev)();
extern void ABISELECT(_ZThn16_N7S7633C4D0Ev,_ZThn8_N7S7633C4D0Ev)() __attribute__((weak));
extern void _ZN10S7633C5_nt3v14Ev();
extern void _ZN10S7633C5_nt3v15Ev();
extern void _ZN10S7633C5_nt3v16Ev();
extern void _ZN10S7633C5_nt3v17Ev();
extern void _ZN10S7633C5_nt3v18Ev();
extern void _ZN10S7633C5_nt3v19Ev();
extern void _ZN10S7633C5_nt3v20Ev();
static  VTBL_ENTRY _tg__ZTV10S7633C5_nt__7S7633C4__7S7633C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7633C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7633C4D1Ev,_ZTv0_n12_N7S7633C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7633C4D0Ev,_ZTv0_n12_N7S7633C4D0Ev),
  (VTBL_ENTRY)&_ZN10S7633C5_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S7633C5_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S7633C5_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S7633C5_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S7633C5_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S7633C5_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S7633C5_nt3v20Ev,
};
static  VTT_ENTRY vtt_S7633C1[] = {
  {&(_ZTV7S7633C1[5]),  5,63},
  {&(_tg__ZTV10S7633C2_nt__7S7633C1[3]),  3,11},
  {&(_tg__ZTV10S7633C3_nt__10S7633C2_nt__7S7633C1[4]),  4,6},
  {&(_ZTV7S7633C1[22]),  22,63},
  {&(_ZTV7S7633C1[35]),  35,63},
  {&(_ZTV7S7633C1[54]),  54,63},
  {&(_tg__ZTV7S7633C4__7S7633C1[3]),  3,12},
  {&(_tg__ZTV10S7633C5_nt__7S7633C4__7S7633C1[10]),  10,19},
};
extern VTBL_ENTRY _ZTI7S7633C1[];
extern  VTBL_ENTRY _ZTV7S7633C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7633C1[];
static VTBL_ENTRY alt_thunk_names39[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7633C4D0Ev,_ZTv0_n12_N7S7633C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7633C4D0Ev,_ZThn8_N7S7633C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7633C4D1Ev,_ZTv0_n12_N7S7633C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7633C4D1Ev,_ZThn8_N7S7633C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7633C1D0Ev,_ZTv0_n12_N7S7633C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N7S7633C1D0Ev,_ZThn48_N7S7633C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7633C1D1Ev,_ZTv0_n12_N7S7633C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N7S7633C1D1Ev,_ZThn48_N7S7633C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N7S7633C1D0Ev,_ZTv0_n44_N7S7633C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N7S7633C1D0Ev,_ZThn40_N7S7633C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N7S7633C1D1Ev,_ZTv0_n44_N7S7633C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N7S7633C1D1Ev,_ZThn40_N7S7633C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7633C1 = {  "S7633C1", // class name
  bases_S7633C1, 4,
  &(vtc_S7633C1[0]), // expected_vtbl_contents
  &(vtt_S7633C1[0]), // expected_vtt_contents
  ABISELECT(176,124), // object size
  NSPAIRA(_ZTI7S7633C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7633C1),63, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7633C1),8, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names39,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5062C3  {
  ::S2120C20_nt s5062c3f0;
  int s5062c3f1[2];
  char s5062c3f2;
  virtual  ~S5062C3(); // _ZN7S5062C3D1Ev
  virtual void  v4(); // _ZN7S5062C32v4Ev
  virtual void  v5(); // _ZN7S5062C32v5Ev
  virtual void  v6(); // _ZN7S5062C32v6Ev
  S5062C3(); // tgen
};
//SIG(-1 S5062C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S5062C3 ::~S5062C3(){ note_dtor("S5062C3", this);}
void  S5062C3 ::v4(){vfunc_called(this, "_ZN7S5062C32v4Ev");}
void  S5062C3 ::v5(){vfunc_called(this, "_ZN7S5062C32v5Ev");}
void  S5062C3 ::v6(){vfunc_called(this, "_ZN7S5062C32v6Ev");}
S5062C3 ::S5062C3(){ note_ctor("S5062C3", this);} // tgen

static void Test_S5062C3()
{
  extern Class_Descriptor cd_S5062C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S5062C3, buf);
    S5062C3 *dp, &lv = *(dp=new (buf) S5062C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S5062C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5062C3)");
    check_field_offset(lv, s5062c3f0, ABISELECT(8,4), "S5062C3.s5062c3f0");
    check_field_offset(lv, s5062c3f1, ABISELECT(24,16), "S5062C3.s5062c3f1");
    check_field_offset(lv, s5062c3f2, ABISELECT(32,24), "S5062C3.s5062c3f2");
    test_class_info(&lv, &cd_S5062C3);
    dp->~S5062C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5062C3(Test_S5062C3, "S5062C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S5062C3C1Ev();
extern void _ZN7S5062C3D1Ev();
Name_Map name_map_S5062C3[] = {
  NSPAIR(_ZN7S5062C3C1Ev),
  NSPAIR(_ZN7S5062C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5062C3[];
extern void _ZN7S5062C3D1Ev();
extern void _ZN7S5062C3D0Ev();
extern void _ZN7S5062C32v4Ev();
extern void _ZN7S5062C32v5Ev();
extern void _ZN7S5062C32v6Ev();
static  VTBL_ENTRY vtc_S5062C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5062C3[0]),
  (VTBL_ENTRY)&_ZN7S5062C3D1Ev,
  (VTBL_ENTRY)&_ZN7S5062C3D0Ev,
  (VTBL_ENTRY)&_ZN7S5062C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5062C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5062C32v6Ev,
};
extern VTBL_ENTRY _ZTI7S5062C3[];
extern  VTBL_ENTRY _ZTV7S5062C3[];
Class_Descriptor cd_S5062C3 = {  "S5062C3", // class name
  0,0,//no base classes
  &(vtc_S5062C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S5062C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5062C3),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  S5062C2  : S5062C3 {
  void *s5062c2f0;
  virtual void  v7(); // _ZN7S5062C22v7Ev
  virtual void  v8(); // _ZN7S5062C22v8Ev
  ~S5062C2(); // tgen
  S5062C2(); // tgen
};
//SIG(-1 S5062C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S5062C2 ::v7(){vfunc_called(this, "_ZN7S5062C22v7Ev");}
void  S5062C2 ::v8(){vfunc_called(this, "_ZN7S5062C22v8Ev");}
S5062C2 ::~S5062C2(){ note_dtor("S5062C2", this);} // tgen
S5062C2 ::S5062C2(){ note_ctor("S5062C2", this);} // tgen

static void Test_S5062C2()
{
  extern Class_Descriptor cd_S5062C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S5062C2, buf);
    S5062C2 *dp, &lv = *(dp=new (buf) S5062C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S5062C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5062C2)");
    check_base_class_offset(lv, (S5062C3*), 0, "S5062C2");
    check_field_offset(lv, s5062c2f0, ABISELECT(40,28), "S5062C2.s5062c2f0");
    test_class_info(&lv, &cd_S5062C2);
    dp->~S5062C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5062C2(Test_S5062C2, "S5062C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S5062C2C1Ev();
extern void _ZN7S5062C2D1Ev();
Name_Map name_map_S5062C2[] = {
  NSPAIR(_ZN7S5062C2C1Ev),
  NSPAIR(_ZN7S5062C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5062C3;
extern VTBL_ENTRY _ZTI7S5062C3[];
extern  VTBL_ENTRY _ZTV7S5062C3[];
static Base_Class bases_S5062C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5062C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5062C2[];
extern void _ZN7S5062C2D1Ev();
extern void _ZN7S5062C2D0Ev();
extern void _ZN7S5062C32v4Ev();
extern void _ZN7S5062C32v5Ev();
extern void _ZN7S5062C32v6Ev();
extern void _ZN7S5062C22v7Ev();
extern void _ZN7S5062C22v8Ev();
static  VTBL_ENTRY vtc_S5062C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5062C2[0]),
  (VTBL_ENTRY)&_ZN7S5062C2D1Ev,
  (VTBL_ENTRY)&_ZN7S5062C2D0Ev,
  (VTBL_ENTRY)&_ZN7S5062C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5062C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5062C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5062C22v7Ev,
  (VTBL_ENTRY)&_ZN7S5062C22v8Ev,
};
extern VTBL_ENTRY _ZTI7S5062C2[];
extern  VTBL_ENTRY _ZTV7S5062C2[];
Class_Descriptor cd_S5062C2 = {  "S5062C2", // class name
  bases_S5062C2, 1,
  &(vtc_S5062C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S5062C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5062C2),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  S5062C7_nt  {
  int s5062c7f0[2];
  __tsi64 s5062c7f1;
  char s5062c7f2;
};
//SIG(1 S5062C7_nt) C1{ Fi[2] FL Fc}



//skip512 S5062C7_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5062C6_nt  {
  int s5062c6f0;
  ::S5062C7_nt s5062c6f1[9];
  int s5062c6f2;
};
//SIG(-1 S5062C6_nt) C1{ Fi FC2{ Fi[2] FL Fc}[9] Fi}



//skip512 S5062C6_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5062C9_nt  {
  __tsi64 s5062c9f0[4];
};
//SIG(-1 S5062C9_nt) C1{ FL[4]}



//skip512 S5062C9_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5062C8_nt  {
  ::S5062C9_nt s5062c8f0;
  void  mf5062c8(); // _ZN10S5062C8_nt8mf5062c8Ev
};
//SIG(-1 S5062C8_nt) C1{ m FC2{ FL[4]}}


void  S5062C8_nt ::mf5062c8(){}

//skip512 S5062C8_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5062C11_nt  {
  int s5062c11f0[4];
};
//SIG(-1 S5062C11_nt) C1{ Fi[4]}



//skip512 S5062C11_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5062C10_nt  {
  void *s5062c10f0;
  ::S5062C11_nt s5062c10f1;
  void  mf5062c10(); // _ZN11S5062C10_nt9mf5062c10Ev
};
//SIG(-1 S5062C10_nt) C1{ m Fp FC2{ Fi[4]}}


void  S5062C10_nt ::mf5062c10(){}

//skip512 S5062C10_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5062C1  : S5062C2 {
  ::S2120C20_nt s5062c1f0;
  ::S5062C6_nt s5062c1f1;
  int s5062c1f2;
  ::S5062C8_nt s5062c1f3;
  ::S5062C10_nt s5062c1f4;
  void *s5062c1f5[2];
  virtual void  v1(); // _ZN7S5062C12v1Ev
  virtual void  v2(); // _ZN7S5062C12v2Ev
  virtual void  v3(); // _ZN7S5062C12v3Ev
  ~S5062C1(); // tgen
  S5062C1(); // tgen
};
//SIG(1 S5062C1) C1{ BC2{ BC3{ vd v4 v5 v6 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v7 v8 Fp} v1 v2 v3 FC4 FC6{ Fi FC7{ Fi[2] FL Fc}[9] Fi} Fi FC8{ m FC9{ FL[4]}} FC10{ m Fp FC11{ Fi[4]}} Fp[2]}


void  S5062C1 ::v1(){vfunc_called(this, "_ZN7S5062C12v1Ev");}
void  S5062C1 ::v2(){vfunc_called(this, "_ZN7S5062C12v2Ev");}
void  S5062C1 ::v3(){vfunc_called(this, "_ZN7S5062C12v3Ev");}
S5062C1 ::~S5062C1(){ note_dtor("S5062C1", this);} // tgen
S5062C1 ::S5062C1(){ note_ctor("S5062C1", this);} // tgen

static void Test_S5062C1()
{
  extern Class_Descriptor cd_S5062C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(48,75)];
    init_test(&cd_S5062C1, buf);
    S5062C1 *dp, &lv = *(dp=new (buf) S5062C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(376,296), "sizeof(S5062C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5062C1)");
    check_base_class_offset(lv, (S5062C3*)(S5062C2*), 0, "S5062C1");
    check_base_class_offset(lv, (S5062C2*), 0, "S5062C1");
    check_field_offset(lv, s5062c1f0, ABISELECT(48,32), "S5062C1.s5062c1f0");
    check_field_offset(lv, s5062c1f1, ABISELECT(64,44), "S5062C1.s5062c1f1");
    check_field_offset(lv, s5062c1f2, ABISELECT(296,232), "S5062C1.s5062c1f2");
    check_field_offset(lv, s5062c1f3, ABISELECT(304,236), "S5062C1.s5062c1f3");
    check_field_offset(lv, s5062c1f4, ABISELECT(336,268), "S5062C1.s5062c1f4");
    check_field_offset(lv, s5062c1f5, ABISELECT(360,288), "S5062C1.s5062c1f5");
    test_class_info(&lv, &cd_S5062C1);
    dp->~S5062C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5062C1(Test_S5062C1, "S5062C1", ABISELECT(376,296));

#else // __cplusplus

extern void _ZN7S5062C1C1Ev();
extern void _ZN7S5062C1D1Ev();
Name_Map name_map_S5062C1[] = {
  NSPAIR(_ZN7S5062C1C1Ev),
  NSPAIR(_ZN7S5062C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5062C3;
extern VTBL_ENTRY _ZTI7S5062C3[];
extern  VTBL_ENTRY _ZTV7S5062C3[];
extern Class_Descriptor cd_S5062C2;
extern VTBL_ENTRY _ZTI7S5062C2[];
extern  VTBL_ENTRY _ZTV7S5062C2[];
static Base_Class bases_S5062C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5062C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S5062C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S5062C1[];
extern void _ZN7S5062C1D1Ev();
extern void _ZN7S5062C1D0Ev();
extern void _ZN7S5062C32v4Ev();
extern void _ZN7S5062C32v5Ev();
extern void _ZN7S5062C32v6Ev();
extern void _ZN7S5062C22v7Ev();
extern void _ZN7S5062C22v8Ev();
extern void _ZN7S5062C12v1Ev();
extern void _ZN7S5062C12v2Ev();
extern void _ZN7S5062C12v3Ev();
static  VTBL_ENTRY vtc_S5062C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5062C1[0]),
  (VTBL_ENTRY)&_ZN7S5062C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5062C1D0Ev,
  (VTBL_ENTRY)&_ZN7S5062C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5062C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5062C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5062C22v7Ev,
  (VTBL_ENTRY)&_ZN7S5062C22v8Ev,
  (VTBL_ENTRY)&_ZN7S5062C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5062C12v2Ev,
  (VTBL_ENTRY)&_ZN7S5062C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S5062C1[];
extern  VTBL_ENTRY _ZTV7S5062C1[];
Class_Descriptor cd_S5062C1 = {  "S5062C1", // class name
  bases_S5062C1, 2,
  &(vtc_S5062C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(376,296), // object size
  NSPAIRA(_ZTI7S5062C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5062C1),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5061C3  {
  ::S2120C20_nt s5061c3f0;
  int s5061c3f1[2];
  char s5061c3f2;
  virtual  ~S5061C3(); // _ZN7S5061C3D1Ev
  virtual void  v4(); // _ZN7S5061C32v4Ev
  virtual void  v5(); // _ZN7S5061C32v5Ev
  virtual void  v6(); // _ZN7S5061C32v6Ev
  S5061C3(); // tgen
};
//SIG(-1 S5061C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S5061C3 ::~S5061C3(){ note_dtor("S5061C3", this);}
void  S5061C3 ::v4(){vfunc_called(this, "_ZN7S5061C32v4Ev");}
void  S5061C3 ::v5(){vfunc_called(this, "_ZN7S5061C32v5Ev");}
void  S5061C3 ::v6(){vfunc_called(this, "_ZN7S5061C32v6Ev");}
S5061C3 ::S5061C3(){ note_ctor("S5061C3", this);} // tgen

static void Test_S5061C3()
{
  extern Class_Descriptor cd_S5061C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S5061C3, buf);
    S5061C3 *dp, &lv = *(dp=new (buf) S5061C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S5061C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5061C3)");
    check_field_offset(lv, s5061c3f0, ABISELECT(8,4), "S5061C3.s5061c3f0");
    check_field_offset(lv, s5061c3f1, ABISELECT(24,16), "S5061C3.s5061c3f1");
    check_field_offset(lv, s5061c3f2, ABISELECT(32,24), "S5061C3.s5061c3f2");
    test_class_info(&lv, &cd_S5061C3);
    dp->~S5061C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5061C3(Test_S5061C3, "S5061C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S5061C3C1Ev();
extern void _ZN7S5061C3D1Ev();
Name_Map name_map_S5061C3[] = {
  NSPAIR(_ZN7S5061C3C1Ev),
  NSPAIR(_ZN7S5061C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5061C3[];
extern void _ZN7S5061C3D1Ev();
extern void _ZN7S5061C3D0Ev();
extern void _ZN7S5061C32v4Ev();
extern void _ZN7S5061C32v5Ev();
extern void _ZN7S5061C32v6Ev();
static  VTBL_ENTRY vtc_S5061C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5061C3[0]),
  (VTBL_ENTRY)&_ZN7S5061C3D1Ev,
  (VTBL_ENTRY)&_ZN7S5061C3D0Ev,
  (VTBL_ENTRY)&_ZN7S5061C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5061C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5061C32v6Ev,
};
extern VTBL_ENTRY _ZTI7S5061C3[];
extern  VTBL_ENTRY _ZTV7S5061C3[];
Class_Descriptor cd_S5061C3 = {  "S5061C3", // class name
  0,0,//no base classes
  &(vtc_S5061C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S5061C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5061C3),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  S5061C2  : S5061C3 {
  void *s5061c2f0;
  virtual void  v7(); // _ZN7S5061C22v7Ev
  virtual void  v8(); // _ZN7S5061C22v8Ev
  ~S5061C2(); // tgen
  S5061C2(); // tgen
};
//SIG(-1 S5061C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S5061C2 ::v7(){vfunc_called(this, "_ZN7S5061C22v7Ev");}
void  S5061C2 ::v8(){vfunc_called(this, "_ZN7S5061C22v8Ev");}
S5061C2 ::~S5061C2(){ note_dtor("S5061C2", this);} // tgen
S5061C2 ::S5061C2(){ note_ctor("S5061C2", this);} // tgen

static void Test_S5061C2()
{
  extern Class_Descriptor cd_S5061C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S5061C2, buf);
    S5061C2 *dp, &lv = *(dp=new (buf) S5061C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S5061C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5061C2)");
    check_base_class_offset(lv, (S5061C3*), 0, "S5061C2");
    check_field_offset(lv, s5061c2f0, ABISELECT(40,28), "S5061C2.s5061c2f0");
    test_class_info(&lv, &cd_S5061C2);
    dp->~S5061C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5061C2(Test_S5061C2, "S5061C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S5061C2C1Ev();
extern void _ZN7S5061C2D1Ev();
Name_Map name_map_S5061C2[] = {
  NSPAIR(_ZN7S5061C2C1Ev),
  NSPAIR(_ZN7S5061C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5061C3;
extern VTBL_ENTRY _ZTI7S5061C3[];
extern  VTBL_ENTRY _ZTV7S5061C3[];
static Base_Class bases_S5061C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5061C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5061C2[];
extern void _ZN7S5061C2D1Ev();
extern void _ZN7S5061C2D0Ev();
extern void _ZN7S5061C32v4Ev();
extern void _ZN7S5061C32v5Ev();
extern void _ZN7S5061C32v6Ev();
extern void _ZN7S5061C22v7Ev();
extern void _ZN7S5061C22v8Ev();
static  VTBL_ENTRY vtc_S5061C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5061C2[0]),
  (VTBL_ENTRY)&_ZN7S5061C2D1Ev,
  (VTBL_ENTRY)&_ZN7S5061C2D0Ev,
  (VTBL_ENTRY)&_ZN7S5061C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5061C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5061C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5061C22v7Ev,
  (VTBL_ENTRY)&_ZN7S5061C22v8Ev,
};
extern VTBL_ENTRY _ZTI7S5061C2[];
extern  VTBL_ENTRY _ZTV7S5061C2[];
Class_Descriptor cd_S5061C2 = {  "S5061C2", // class name
  bases_S5061C2, 1,
  &(vtc_S5061C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S5061C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5061C2),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  S5061C9_nt  {
  long s5061c9f0[4];
};
//SIG(-1 S5061C9_nt) C1{ Fl[4]}



//skip512 S5061C9_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5061C8_nt  {
  ::S5061C9_nt s5061c8f0;
  void  mf5061c8(); // _ZN10S5061C8_nt8mf5061c8Ev
};
//SIG(-1 S5061C8_nt) C1{ m FC2{ Fl[4]}}


void  S5061C8_nt ::mf5061c8(){}

//skip512 S5061C8_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5061C1  : S5061C2 {
  ::S2120C20_nt s5061c1f0;
  ::S5062C6_nt s5061c1f1;
  int s5061c1f2;
  ::S5061C8_nt s5061c1f3;
  ::S5062C10_nt s5061c1f4;
  void *s5061c1f5[2];
  virtual void  v1(); // _ZN7S5061C12v1Ev
  virtual void  v2(); // _ZN7S5061C12v2Ev
  virtual void  v3(); // _ZN7S5061C12v3Ev
  ~S5061C1(); // tgen
  S5061C1(); // tgen
};
//SIG(1 S5061C1) C1{ BC2{ BC3{ vd v4 v5 v6 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v7 v8 Fp} v1 v2 v3 FC4 FC6{ Fi FC7{ Fi[2] FL Fc}[9] Fi} Fi FC8{ m FC9{ Fl[4]}} FC10{ m Fp FC11{ Fi[4]}} Fp[2]}


void  S5061C1 ::v1(){vfunc_called(this, "_ZN7S5061C12v1Ev");}
void  S5061C1 ::v2(){vfunc_called(this, "_ZN7S5061C12v2Ev");}
void  S5061C1 ::v3(){vfunc_called(this, "_ZN7S5061C12v3Ev");}
S5061C1 ::~S5061C1(){ note_dtor("S5061C1", this);} // tgen
S5061C1 ::S5061C1(){ note_ctor("S5061C1", this);} // tgen

static void Test_S5061C1()
{
  extern Class_Descriptor cd_S5061C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(48,71)];
    init_test(&cd_S5061C1, buf);
    S5061C1 *dp, &lv = *(dp=new (buf) S5061C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(376,280), "sizeof(S5061C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5061C1)");
    check_base_class_offset(lv, (S5061C3*)(S5061C2*), 0, "S5061C1");
    check_base_class_offset(lv, (S5061C2*), 0, "S5061C1");
    check_field_offset(lv, s5061c1f0, ABISELECT(48,32), "S5061C1.s5061c1f0");
    check_field_offset(lv, s5061c1f1, ABISELECT(64,44), "S5061C1.s5061c1f1");
    check_field_offset(lv, s5061c1f2, ABISELECT(296,232), "S5061C1.s5061c1f2");
    check_field_offset(lv, s5061c1f3, ABISELECT(304,236), "S5061C1.s5061c1f3");
    check_field_offset(lv, s5061c1f4, ABISELECT(336,252), "S5061C1.s5061c1f4");
    check_field_offset(lv, s5061c1f5, ABISELECT(360,272), "S5061C1.s5061c1f5");
    test_class_info(&lv, &cd_S5061C1);
    dp->~S5061C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5061C1(Test_S5061C1, "S5061C1", ABISELECT(376,280));

#else // __cplusplus

extern void _ZN7S5061C1C1Ev();
extern void _ZN7S5061C1D1Ev();
Name_Map name_map_S5061C1[] = {
  NSPAIR(_ZN7S5061C1C1Ev),
  NSPAIR(_ZN7S5061C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5061C3;
extern VTBL_ENTRY _ZTI7S5061C3[];
extern  VTBL_ENTRY _ZTV7S5061C3[];
extern Class_Descriptor cd_S5061C2;
extern VTBL_ENTRY _ZTI7S5061C2[];
extern  VTBL_ENTRY _ZTV7S5061C2[];
static Base_Class bases_S5061C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5061C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S5061C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S5061C1[];
extern void _ZN7S5061C1D1Ev();
extern void _ZN7S5061C1D0Ev();
extern void _ZN7S5061C32v4Ev();
extern void _ZN7S5061C32v5Ev();
extern void _ZN7S5061C32v6Ev();
extern void _ZN7S5061C22v7Ev();
extern void _ZN7S5061C22v8Ev();
extern void _ZN7S5061C12v1Ev();
extern void _ZN7S5061C12v2Ev();
extern void _ZN7S5061C12v3Ev();
static  VTBL_ENTRY vtc_S5061C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5061C1[0]),
  (VTBL_ENTRY)&_ZN7S5061C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5061C1D0Ev,
  (VTBL_ENTRY)&_ZN7S5061C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5061C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5061C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5061C22v7Ev,
  (VTBL_ENTRY)&_ZN7S5061C22v8Ev,
  (VTBL_ENTRY)&_ZN7S5061C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5061C12v2Ev,
  (VTBL_ENTRY)&_ZN7S5061C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S5061C1[];
extern  VTBL_ENTRY _ZTV7S5061C1[];
Class_Descriptor cd_S5061C1 = {  "S5061C1", // class name
  bases_S5061C1, 2,
  &(vtc_S5061C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(376,280), // object size
  NSPAIRA(_ZTI7S5061C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5061C1),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

union  S21155C5_nt  {
  void  mf21155c5(); // _ZN11S21155C5_nt9mf21155c5Ev
};
//SIG(1 S21155C5_nt) U1{ m}

#endif // __cplusplus
#ifdef __cplusplus

struct  S21155C4  : virtual S8087C2_nt {
  ::S21155C5_nt s21155c4f0;
  ~S21155C4(); // tgen
  S21155C4(); // tgen
};
//SIG(-1 S21155C4) C1{ VBC2{ vd m Fi} FU3{ m}}


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

static void Test_S21155C4()
{
  extern Class_Descriptor cd_S21155C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S21155C4, buf);
    S21155C4 *dp, &lv = *(dp=new (buf) S21155C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S21155C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21155C4)");
    check_base_class_offset(lv, (S8087C2_nt*), ABISELECT(16,8), "S21155C4");
    check_field_offset(lv, s21155c4f0, ABISELECT(8,4), "S21155C4.s21155c4f0");
    test_class_info(&lv, &cd_S21155C4);
    dp->~S21155C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21155C4(Test_S21155C4, "S21155C4", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S21155C4C1Ev();
extern void _ZN8S21155C4D1Ev();
Name_Map name_map_S21155C4[] = {
  NSPAIR(_ZN8S21155C4C1Ev),
  NSPAIR(_ZN8S21155C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8087C2_nt;
extern VTBL_ENTRY _ZTI10S8087C2_nt[];
extern  VTBL_ENTRY _ZTV10S8087C2_nt[];
static Base_Class bases_S21155C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8087C2_nt,    ABISELECT(16,8), //bcp->offset
    5, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S21155C4[];
extern void _ZN8S21155C4D1Ev();
extern void _ZN8S21155C4D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S21155C4D1Ev,_ZTv0_n12_N8S21155C4D1Ev)();
extern void ABISELECT(_ZThn16_N8S21155C4D1Ev,_ZThn8_N8S21155C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21155C4D0Ev,_ZTv0_n12_N8S21155C4D0Ev)();
extern void ABISELECT(_ZThn16_N8S21155C4D0Ev,_ZThn8_N8S21155C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S21155C4[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S21155C4[0]),
  (VTBL_ENTRY)&_ZN8S21155C4D1Ev,
  (VTBL_ENTRY)&_ZN8S21155C4D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S21155C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21155C4D1Ev,_ZTv0_n12_N8S21155C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21155C4D0Ev,_ZTv0_n12_N8S21155C4D0Ev),
};
extern VTBL_ENTRY _ZTV8S21155C4[];
static  VTT_ENTRY vtt_S21155C4[] = {
  {&(_ZTV8S21155C4[3]),  3,10},
  {&(_ZTV8S21155C4[8]),  8,10},
};
extern VTBL_ENTRY _ZTI8S21155C4[];
extern  VTBL_ENTRY _ZTV8S21155C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21155C4[];
static VTBL_ENTRY alt_thunk_names40[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21155C4D0Ev,_ZTv0_n12_N8S21155C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S21155C4D0Ev,_ZThn8_N8S21155C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21155C4D1Ev,_ZTv0_n12_N8S21155C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S21155C4D1Ev,_ZThn8_N8S21155C4D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21155C4 = {  "S21155C4", // class name
  bases_S21155C4, 1,
  &(vtc_S21155C4[0]), // expected_vtbl_contents
  &(vtt_S21155C4[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S21155C4),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S21155C4),10, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21155C4),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names40,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21155C2  : virtual S8087C2_nt , virtual S21155C4 {
  long double s21155c2f0;
  int s21155c2f1;
  virtual  ~S21155C2(); // _ZN8S21155C2D2Ev
  S21155C2(); // tgen
};
//SIG(-1 S21155C2) C1{ VBC2{ vd m Fi} VBC3{ VBC2 FU4{ m}} vd FD Fi}


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

static void Test_S21155C2()
{
  extern Class_Descriptor cd_S21155C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(6,10)];
    init_test(&cd_S21155C2, buf);
    S21155C2 *dp, &lv = *(dp=new (buf) S21155C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,36), "sizeof(S21155C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21155C2)");
    check_base_class_offset(lv, (S8087C2_nt*), ABISELECT(40,20), "S21155C2");
    check_base_class_offset(lv, (S8087C2_nt*)(S21155C4*), ABISELECT(40,20), "S21155C2");
    check_base_class_offset(lv, (S21155C4*), ABISELECT(56,28), "S21155C2");
    check_field_offset(lv, s21155c2f0, ABISELECT(16,4), "S21155C2.s21155c2f0");
    check_field_offset(lv, s21155c2f1, ABISELECT(32,16), "S21155C2.s21155c2f1");
    test_class_info(&lv, &cd_S21155C2);
    dp->~S21155C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21155C2(Test_S21155C2, "S21155C2", ABISELECT(80,36));

#else // __cplusplus

extern void _ZN8S21155C2C1Ev();
extern void _ZN8S21155C2D2Ev();
Name_Map name_map_S21155C2[] = {
  NSPAIR(_ZN8S21155C2C1Ev),
  NSPAIR(_ZN8S21155C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S8087C2_nt;
extern VTBL_ENTRY _ZTI10S8087C2_nt[];
extern  VTBL_ENTRY _ZTV10S8087C2_nt[];
extern Class_Descriptor cd_S21155C4;
extern VTBL_ENTRY _ZTI8S21155C4[];
extern  VTBL_ENTRY _ZTV8S21155C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21155C4[];
static Base_Class bases_S21155C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8087C2_nt,    ABISELECT(40,20), //bcp->offset
    6, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S21155C4,    ABISELECT(56,28), //bcp->offset
    11, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S21155C2[];
extern void _ZN8S21155C2D1Ev();
extern void _ZN8S21155C2D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S21155C2D1Ev,_ZTv0_n12_N8S21155C2D1Ev)();
extern void ABISELECT(_ZThn40_N8S21155C2D1Ev,_ZThn20_N8S21155C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21155C2D0Ev,_ZTv0_n12_N8S21155C2D0Ev)();
extern void ABISELECT(_ZThn40_N8S21155C2D0Ev,_ZThn20_N8S21155C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21155C2D1Ev,_ZTv0_n16_N8S21155C2D1Ev)();
extern void ABISELECT(_ZThn56_N8S21155C2D1Ev,_ZThn28_N8S21155C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21155C2D0Ev,_ZTv0_n16_N8S21155C2D0Ev)();
extern void ABISELECT(_ZThn56_N8S21155C2D0Ev,_ZThn28_N8S21155C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S21155C2[] = {
  ABISELECT(56,28),
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S21155C2[0]),
  (VTBL_ENTRY)&_ZN8S21155C2D1Ev,
  (VTBL_ENTRY)&_ZN8S21155C2D0Ev,
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S21155C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21155C2D1Ev,_ZTv0_n12_N8S21155C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21155C2D0Ev,_ZTv0_n12_N8S21155C2D0Ev),
  ABISELECT(-56,-28),
  ABISELECT(-16,-8),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S21155C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21155C2D1Ev,_ZTv0_n16_N8S21155C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21155C2D0Ev,_ZTv0_n16_N8S21155C2D0Ev),
};
extern VTBL_ENTRY _ZTV8S21155C2[];
extern void _ZN8S21155C4D1Ev();
extern void _ZN8S21155C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21155C4__8S21155C2[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S21155C4[0]),
  (VTBL_ENTRY)&_ZN8S21155C4D1Ev,
  (VTBL_ENTRY)&_ZN8S21155C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21155C4D1Ev,_ZTv0_n12_N8S21155C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21155C4D0Ev,_ZTv0_n12_N8S21155C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S8087C2_nt__8S21155C4__8S21155C2[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S21155C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21155C4D1Ev,_ZTv0_n12_N8S21155C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21155C4D0Ev,_ZTv0_n12_N8S21155C4D0Ev),
};
static  VTT_ENTRY vtt_S21155C2[] = {
  {&(_ZTV8S21155C2[4]),  4,17},
  {&(_ZTV8S21155C2[9]),  9,17},
  {&(_ZTV8S21155C2[15]),  15,17},
  {&(_tg__ZTV8S21155C4__8S21155C2[3]),  3,5},
  {&(_tg__ZTV10S8087C2_nt__8S21155C4__8S21155C2[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S21155C2[];
extern  VTBL_ENTRY _ZTV8S21155C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21155C2[];
static VTBL_ENTRY alt_thunk_names41[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21155C2D0Ev,_ZTv0_n16_N8S21155C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S21155C2D0Ev,_ZThn28_N8S21155C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21155C2D1Ev,_ZTv0_n16_N8S21155C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S21155C2D1Ev,_ZThn28_N8S21155C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21155C2D0Ev,_ZTv0_n12_N8S21155C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S21155C2D0Ev,_ZThn20_N8S21155C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21155C2D1Ev,_ZTv0_n12_N8S21155C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S21155C2D1Ev,_ZThn20_N8S21155C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21155C2 = {  "S21155C2", // class name
  bases_S21155C2, 2,
  &(vtc_S21155C2[0]), // expected_vtbl_contents
  &(vtt_S21155C2[0]), // expected_vtt_contents
  ABISELECT(80,36), // object size
  NSPAIRA(_ZTI8S21155C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S21155C2),17, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21155C2),5, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names41,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21155C6  {
  long double s21155c6f0;
  void *s21155c6f1;
  long double s21155c6f2;
  void  mf21155c6(); // _ZN8S21155C69mf21155c6Ev
};
//SIG(-1 S21155C6) C1{ m FD Fp FD}


void  S21155C6 ::mf21155c6(){}

static void Test_S21155C6()
{
  {
    init_simple_test("S21155C6");
    S21155C6 lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S21155C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21155C6)");
    check_field_offset(lv, s21155c6f0, 0, "S21155C6.s21155c6f0");
    check_field_offset(lv, s21155c6f1, ABISELECT(16,12), "S21155C6.s21155c6f1");
    check_field_offset(lv, s21155c6f2, ABISELECT(32,16), "S21155C6.s21155c6f2");
  }
}
static Arrange_To_Call_Me vS21155C6(Test_S21155C6, "S21155C6", ABISELECT(48,28));

#else // __cplusplus

extern VTBL_ENTRY _ZTI8S21155C6[];
VTBL_ENTRY *P__ZTI8S21155C6 = _ZTI8S21155C6; 
Class_Descriptor cd_S21155C6 = {  "S21155C6", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI8S21155C6),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  S21155C9  : S8087C2_nt , S21155C4 {
  ::S21155C5_nt s21155c9f0[10];
  ~S21155C9(); // tgen
  S21155C9(); // tgen
};
//SIG(-1 S21155C9) C1{ BC2{ vd m Fi} BC3{ VBC2 FU4{ m}} FU4[10]}


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

static void Test_S21155C9()
{
  extern Class_Descriptor cd_S21155C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,9)];
    init_test(&cd_S21155C9, buf);
    S21155C9 *dp, &lv = *(dp=new (buf) S21155C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,32), "sizeof(S21155C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21155C9)");
    /*is_ambiguous_... S21155C9::S8087C2_nt */ AMB_check_base_class_offset(lv, (S8087C2_nt*), 0, "S21155C9");
    check_base_class_offset(lv, (S8087C2_nt*)(S21155C4*), ABISELECT(40,24), "S21155C9");
    check_base_class_offset(lv, (S21155C4*), ABISELECT(16,8), "S21155C9");
    check_field_offset(lv, s21155c9f0, ABISELECT(25,13), "S21155C9.s21155c9f0");
    test_class_info(&lv, &cd_S21155C9);
    dp->~S21155C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21155C9(Test_S21155C9, "S21155C9", ABISELECT(56,32));

#else // __cplusplus

extern void _ZN8S21155C9C1Ev();
extern void _ZN8S21155C9D1Ev();
Name_Map name_map_S21155C9[] = {
  NSPAIR(_ZN8S21155C9C1Ev),
  NSPAIR(_ZN8S21155C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8087C2_nt;
extern VTBL_ENTRY _ZTI10S8087C2_nt[];
extern  VTBL_ENTRY _ZTV10S8087C2_nt[];
extern Class_Descriptor cd_S8087C2_nt;
extern VTBL_ENTRY _ZTI10S8087C2_nt[];
extern  VTBL_ENTRY _ZTV10S8087C2_nt[];
extern Class_Descriptor cd_S21155C4;
extern VTBL_ENTRY _ZTI8S21155C4[];
extern  VTBL_ENTRY _ZTV8S21155C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21155C4[];
static Base_Class bases_S21155C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8087C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S8087C2_nt,    ABISELECT(40,24), //bcp->offset
    10, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S21155C4,    ABISELECT(16,8), //bcp->offset
    5, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S21155C9[];
extern void _ZN8S21155C9D1Ev();
extern void _ZN8S21155C9D0Ev();
extern void ABISELECT(_ZThn16_N8S21155C9D1Ev,_ZThn8_N8S21155C9D1Ev)();
extern void ABISELECT(_ZThn16_N8S21155C9D0Ev,_ZThn8_N8S21155C9D0Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21155C9D1Ev,_ZTv0_n12_N8S21155C9D1Ev)();
extern void ABISELECT(_ZThn40_N8S21155C9D1Ev,_ZThn24_N8S21155C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21155C9D0Ev,_ZTv0_n12_N8S21155C9D0Ev)();
extern void ABISELECT(_ZThn40_N8S21155C9D0Ev,_ZThn24_N8S21155C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S21155C9[] = {
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S21155C9[0]),
  (VTBL_ENTRY)&_ZN8S21155C9D1Ev,
  (VTBL_ENTRY)&_ZN8S21155C9D0Ev,
  ABISELECT(24,16),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S21155C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S21155C9D1Ev,_ZThn8_N8S21155C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S21155C9D0Ev,_ZThn8_N8S21155C9D0Ev),
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S21155C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21155C9D1Ev,_ZTv0_n12_N8S21155C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21155C9D0Ev,_ZTv0_n12_N8S21155C9D0Ev),
};
extern VTBL_ENTRY _ZTV8S21155C9[];
extern void _ZN8S21155C4D1Ev();
extern void _ZN8S21155C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21155C4__8S21155C9[] = {
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S21155C4[0]),
  (VTBL_ENTRY)&_ZN8S21155C4D1Ev,
  (VTBL_ENTRY)&_ZN8S21155C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21155C4D1Ev,_ZTv0_n12_N8S21155C4D1Ev)();
extern void ABISELECT(_ZThn24_N8S21155C4D1Ev,_ZThn16_N8S21155C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21155C4D0Ev,_ZTv0_n12_N8S21155C4D0Ev)();
extern void ABISELECT(_ZThn24_N8S21155C4D0Ev,_ZThn16_N8S21155C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S8087C2_nt__8S21155C4__8S21155C9[] = {
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S21155C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21155C4D1Ev,_ZTv0_n12_N8S21155C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21155C4D0Ev,_ZTv0_n12_N8S21155C4D0Ev),
};
static  VTT_ENTRY vtt_S21155C9[] = {
  {&(_ZTV8S21155C9[3]),  3,15},
  {&(_tg__ZTV8S21155C4__8S21155C9[3]),  3,5},
  {&(_tg__ZTV10S8087C2_nt__8S21155C4__8S21155C9[3]),  3,5},
  {&(_ZTV8S21155C9[8]),  8,15},
  {&(_ZTV8S21155C9[13]),  13,15},
};
extern VTBL_ENTRY _ZTI8S21155C9[];
extern  VTBL_ENTRY _ZTV8S21155C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21155C9[];
static VTBL_ENTRY alt_thunk_names42[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21155C4D0Ev,_ZTv0_n12_N8S21155C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S21155C4D0Ev,_ZThn16_N8S21155C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21155C4D1Ev,_ZTv0_n12_N8S21155C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S21155C4D1Ev,_ZThn16_N8S21155C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21155C9D0Ev,_ZTv0_n12_N8S21155C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S21155C9D0Ev,_ZThn24_N8S21155C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21155C9D1Ev,_ZTv0_n12_N8S21155C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S21155C9D1Ev,_ZThn24_N8S21155C9D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21155C9 = {  "S21155C9", // class name
  bases_S21155C9, 3,
  &(vtc_S21155C9[0]), // expected_vtbl_contents
  &(vtt_S21155C9[0]), // expected_vtt_contents
  ABISELECT(56,32), // object size
  NSPAIRA(_ZTI8S21155C9),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S21155C9),15, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21155C9),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names42,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21155C12  : virtual S8087C2_nt , S21155C4 {
  virtual  ~S21155C12(); // _ZN9S21155C12D2Ev
  S21155C12(); // tgen
};
//SIG(-1 S21155C12) C1{ VBC2{ vd m Fi} BC3{ VBC2 FU4{ m}} vd}


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

static void Test_S21155C12()
{
  extern Class_Descriptor cd_S21155C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S21155C12, buf);
    S21155C12 *dp, &lv = *(dp=new (buf) S21155C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S21155C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21155C12)");
    check_base_class_offset(lv, (S8087C2_nt*), ABISELECT(16,8), "S21155C12");
    check_base_class_offset(lv, (S8087C2_nt*)(S21155C4*), ABISELECT(16,8), "S21155C12");
    check_base_class_offset(lv, (S21155C4*), 0, "S21155C12");
    test_class_info(&lv, &cd_S21155C12);
    dp->~S21155C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21155C12(Test_S21155C12, "S21155C12", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN9S21155C12C1Ev();
extern void _ZN9S21155C12D2Ev();
Name_Map name_map_S21155C12[] = {
  NSPAIR(_ZN9S21155C12C1Ev),
  NSPAIR(_ZN9S21155C12D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S8087C2_nt;
extern VTBL_ENTRY _ZTI10S8087C2_nt[];
extern  VTBL_ENTRY _ZTV10S8087C2_nt[];
extern Class_Descriptor cd_S21155C4;
extern VTBL_ENTRY _ZTI8S21155C4[];
extern  VTBL_ENTRY _ZTV8S21155C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21155C4[];
static Base_Class bases_S21155C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8087C2_nt,    ABISELECT(16,8), //bcp->offset
    5, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S21155C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S21155C12[];
extern void _ZN9S21155C12D1Ev();
extern void _ZN9S21155C12D0Ev();
extern void ABISELECT(_ZTv0_n24_N9S21155C12D1Ev,_ZTv0_n12_N9S21155C12D1Ev)();
extern void ABISELECT(_ZThn16_N9S21155C12D1Ev,_ZThn8_N9S21155C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21155C12D0Ev,_ZTv0_n12_N9S21155C12D0Ev)();
extern void ABISELECT(_ZThn16_N9S21155C12D0Ev,_ZThn8_N9S21155C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S21155C12[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI9S21155C12[0]),
  (VTBL_ENTRY)&_ZN9S21155C12D1Ev,
  (VTBL_ENTRY)&_ZN9S21155C12D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S21155C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21155C12D1Ev,_ZTv0_n12_N9S21155C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21155C12D0Ev,_ZTv0_n12_N9S21155C12D0Ev),
};
extern VTBL_ENTRY _ZTV9S21155C12[];
extern void _ZN8S21155C4D1Ev();
extern void _ZN8S21155C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21155C4__9S21155C12[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S21155C4[0]),
  (VTBL_ENTRY)&_ZN8S21155C4D1Ev,
  (VTBL_ENTRY)&_ZN8S21155C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21155C4D1Ev,_ZTv0_n12_N8S21155C4D1Ev)();
extern void ABISELECT(_ZThn16_N8S21155C4D1Ev,_ZThn8_N8S21155C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21155C4D0Ev,_ZTv0_n12_N8S21155C4D0Ev)();
extern void ABISELECT(_ZThn16_N8S21155C4D0Ev,_ZThn8_N8S21155C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S8087C2_nt__8S21155C4__9S21155C12[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S21155C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21155C4D1Ev,_ZTv0_n12_N8S21155C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21155C4D0Ev,_ZTv0_n12_N8S21155C4D0Ev),
};
static  VTT_ENTRY vtt_S21155C12[] = {
  {&(_ZTV9S21155C12[3]),  3,10},
  {&(_tg__ZTV8S21155C4__9S21155C12[3]),  3,5},
  {&(_tg__ZTV10S8087C2_nt__8S21155C4__9S21155C12[3]),  3,5},
  {&(_ZTV9S21155C12[8]),  8,10},
};
extern VTBL_ENTRY _ZTI9S21155C12[];
extern  VTBL_ENTRY _ZTV9S21155C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21155C12[];
static VTBL_ENTRY alt_thunk_names43[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21155C4D0Ev,_ZTv0_n12_N8S21155C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S21155C4D0Ev,_ZThn8_N8S21155C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21155C4D1Ev,_ZTv0_n12_N8S21155C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S21155C4D1Ev,_ZThn8_N8S21155C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21155C12D0Ev,_ZTv0_n12_N9S21155C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S21155C12D0Ev,_ZThn8_N9S21155C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21155C12D1Ev,_ZTv0_n12_N9S21155C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S21155C12D1Ev,_ZThn8_N9S21155C12D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21155C12 = {  "S21155C12", // class name
  bases_S21155C12, 2,
  &(vtc_S21155C12[0]), // expected_vtbl_contents
  &(vtt_S21155C12[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI9S21155C12),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S21155C12),10, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S21155C12),4, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names43,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21155C8  : virtual S8087C2_nt , S21155C9 , virtual S3352C8_nt , S21155C12 {
  ~S21155C8(); // tgen
  S21155C8(); // tgen
};
//SIG(-1 S21155C8) C1{ VBC2{ vd m Fi} BC3{ BC2 BC4{ VBC2 FU5{ m}} FU5[10]} VBC6{ m Fi} BC7{ VBC2 BC4 vd}}


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

static void Test_S21155C8()
{
  extern Class_Descriptor cd_S21155C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,12)];
    init_test(&cd_S21155C8, buf);
    S21155C8 *dp, &lv = *(dp=new (buf) S21155C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,44), "sizeof(S21155C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21155C8)");
    /*is_ambiguous_... S21155C8::S8087C2_nt */ AMB_check_base_class_offset(lv, (S8087C2_nt*), ABISELECT(56,32), "S21155C8");
    check_base_class_offset(lv, (S8087C2_nt*)(S21155C4*)(S21155C9*), ABISELECT(56,32), "S21155C8");
    check_base_class_offset(lv, (S8087C2_nt*)(S21155C12*), ABISELECT(56,32), "S21155C8");
    check_base_class_offset(lv, (S8087C2_nt*)(S21155C4*)(S21155C12*), ABISELECT(56,32), "S21155C8");
    /*is_ambiguous_... S21155C9::S8087C2_nt */ AMB_check_base_class_offset(lv, (S8087C2_nt*)(S21155C9*), 0, "S21155C8");
    check_base_class_offset(lv, (S21155C4*)(S21155C9*), ABISELECT(16,8), "S21155C8");
    check_base_class_offset(lv, (S21155C9*), 0, "S21155C8");
    check_base_class_offset(lv, (S3352C8_nt*), ABISELECT(68,40), "S21155C8");
    check_base_class_offset(lv, (S21155C4*)(S21155C12*), ABISELECT(40,24), "S21155C8");
    check_base_class_offset(lv, (S21155C12*), ABISELECT(40,24), "S21155C8");
    test_class_info(&lv, &cd_S21155C8);
    dp->~S21155C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21155C8(Test_S21155C8, "S21155C8", ABISELECT(72,44));

#else // __cplusplus

extern void _ZN8S21155C8C1Ev();
extern void _ZN8S21155C8D1Ev();
Name_Map name_map_S21155C8[] = {
  NSPAIR(_ZN8S21155C8C1Ev),
  NSPAIR(_ZN8S21155C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8087C2_nt;
extern VTBL_ENTRY _ZTI10S8087C2_nt[];
extern  VTBL_ENTRY _ZTV10S8087C2_nt[];
extern Class_Descriptor cd_S8087C2_nt;
extern VTBL_ENTRY _ZTI10S8087C2_nt[];
extern  VTBL_ENTRY _ZTV10S8087C2_nt[];
extern Class_Descriptor cd_S21155C4;
extern VTBL_ENTRY _ZTI8S21155C4[];
extern  VTBL_ENTRY _ZTV8S21155C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21155C4[];
extern Class_Descriptor cd_S21155C9;
extern VTBL_ENTRY _ZTI8S21155C9[];
extern  VTBL_ENTRY _ZTV8S21155C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21155C9[];
extern Class_Descriptor cd_S3352C8_nt;
extern VTBL_ENTRY _ZTI10S3352C8_nt[];
extern Class_Descriptor cd_S21155C4;
extern VTBL_ENTRY _ZTI8S21155C4[];
extern  VTBL_ENTRY _ZTV8S21155C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21155C4[];
extern Class_Descriptor cd_S21155C12;
extern VTBL_ENTRY _ZTI9S21155C12[];
extern  VTBL_ENTRY _ZTV9S21155C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21155C12[];
static Base_Class bases_S21155C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8087C2_nt,    ABISELECT(56,32), //bcp->offset
    16, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S8087C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S21155C4,    ABISELECT(16,8), //bcp->offset
    6, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S21155C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3352C8_nt,    ABISELECT(68,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
    -1, //immediately_derived
  1, 1},
  {&cd_S21155C4,    ABISELECT(40,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S21155C12,    ABISELECT(40,24), //bcp->offset
    11, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S21155C8[];
extern void _ZN8S21155C8D1Ev();
extern void _ZN8S21155C8D0Ev();
extern void ABISELECT(_ZThn16_N8S21155C8D1Ev,_ZThn8_N8S21155C8D1Ev)();
extern void ABISELECT(_ZThn16_N8S21155C8D0Ev,_ZThn8_N8S21155C8D0Ev)();
extern void ABISELECT(_ZThn40_N8S21155C8D1Ev,_ZThn24_N8S21155C8D1Ev)();
extern void ABISELECT(_ZThn40_N8S21155C8D0Ev,_ZThn24_N8S21155C8D0Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21155C8D1Ev,_ZTv0_n12_N8S21155C8D1Ev)();
extern void ABISELECT(_ZThn56_N8S21155C8D1Ev,_ZThn32_N8S21155C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21155C8D0Ev,_ZTv0_n12_N8S21155C8D0Ev)();
extern void ABISELECT(_ZThn56_N8S21155C8D0Ev,_ZThn32_N8S21155C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S21155C8[] = {
  ABISELECT(68,40),
  ABISELECT(56,32),
  0,
  (VTBL_ENTRY)&(_ZTI8S21155C8[0]),
  (VTBL_ENTRY)&_ZN8S21155C8D1Ev,
  (VTBL_ENTRY)&_ZN8S21155C8D0Ev,
  ABISELECT(40,24),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S21155C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S21155C8D1Ev,_ZThn8_N8S21155C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S21155C8D0Ev,_ZThn8_N8S21155C8D0Ev),
  ABISELECT(16,8),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S21155C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N8S21155C8D1Ev,_ZThn24_N8S21155C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N8S21155C8D0Ev,_ZThn24_N8S21155C8D0Ev),
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI8S21155C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21155C8D1Ev,_ZTv0_n12_N8S21155C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21155C8D0Ev,_ZTv0_n12_N8S21155C8D0Ev),
};
extern VTBL_ENTRY _ZTV8S21155C8[];
extern void _ZN8S21155C9D1Ev();
extern void _ZN8S21155C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21155C9__8S21155C8[] = {
  ABISELECT(56,32),
  0,
  (VTBL_ENTRY)&(_ZTI8S21155C9[0]),
  (VTBL_ENTRY)&_ZN8S21155C9D1Ev,
  (VTBL_ENTRY)&_ZN8S21155C9D0Ev,
};
extern void _ZN8S21155C4D1Ev();
extern void _ZN8S21155C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21155C48S21155C9__8S21155C8[] = {
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S21155C4[0]),
  (VTBL_ENTRY)&_ZN8S21155C4D1Ev,
  (VTBL_ENTRY)&_ZN8S21155C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21155C4D1Ev,_ZTv0_n12_N8S21155C4D1Ev)();
extern void ABISELECT(_ZThn40_N8S21155C4D1Ev,_ZThn24_N8S21155C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21155C4D0Ev,_ZTv0_n12_N8S21155C4D0Ev)();
extern void ABISELECT(_ZThn40_N8S21155C4D0Ev,_ZThn24_N8S21155C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S8087C2_nt__8S21155C48S21155C9__8S21155C8[] = {
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S21155C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21155C4D1Ev,_ZTv0_n12_N8S21155C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21155C4D0Ev,_ZTv0_n12_N8S21155C4D0Ev),
};
extern void ABISELECT(_ZThn16_N8S21155C9D1Ev,_ZThn8_N8S21155C9D1Ev)();
extern void ABISELECT(_ZThn16_N8S21155C9D0Ev,_ZThn8_N8S21155C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21155C4__8S21155C9__8S21155C8[] = {
  ABISELECT(40,24),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S21155C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S21155C9D1Ev,_ZThn8_N8S21155C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S21155C9D0Ev,_ZThn8_N8S21155C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21155C9D1Ev,_ZTv0_n12_N8S21155C9D1Ev)();
extern void ABISELECT(_ZThn56_N8S21155C9D1Ev,_ZThn32_N8S21155C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21155C9D0Ev,_ZTv0_n12_N8S21155C9D0Ev)();
extern void ABISELECT(_ZThn56_N8S21155C9D0Ev,_ZThn32_N8S21155C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S8087C2_nt__A1__8S21155C9__8S21155C8[] = {
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI8S21155C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21155C9D1Ev,_ZTv0_n12_N8S21155C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21155C9D0Ev,_ZTv0_n12_N8S21155C9D0Ev),
};
extern void _ZN9S21155C12D1Ev();
extern void _ZN9S21155C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S21155C12__8S21155C8[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI9S21155C12[0]),
  (VTBL_ENTRY)&_ZN9S21155C12D1Ev,
  (VTBL_ENTRY)&_ZN9S21155C12D0Ev,
};
extern void _ZN8S21155C4D1Ev();
extern void _ZN8S21155C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21155C49S21155C12__A1__8S21155C8[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S21155C4[0]),
  (VTBL_ENTRY)&_ZN8S21155C4D1Ev,
  (VTBL_ENTRY)&_ZN8S21155C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21155C4D1Ev,_ZTv0_n12_N8S21155C4D1Ev)();
extern void ABISELECT(_ZThn16_N8S21155C4D1Ev,_ZThn8_N8S21155C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21155C4D0Ev,_ZTv0_n12_N8S21155C4D0Ev)();
extern void ABISELECT(_ZThn16_N8S21155C4D0Ev,_ZThn8_N8S21155C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S8087C2_nt__8S21155C49S21155C12__A1__8S21155C8[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S21155C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21155C4D1Ev,_ZTv0_n12_N8S21155C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21155C4D0Ev,_ZTv0_n12_N8S21155C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S21155C12D1Ev,_ZTv0_n12_N9S21155C12D1Ev)();
extern void ABISELECT(_ZThn16_N9S21155C12D1Ev,_ZThn8_N9S21155C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21155C12D0Ev,_ZTv0_n12_N9S21155C12D0Ev)();
extern void ABISELECT(_ZThn16_N9S21155C12D0Ev,_ZThn8_N9S21155C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S8087C2_nt__9S21155C12__8S21155C8[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S21155C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21155C12D1Ev,_ZTv0_n12_N9S21155C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21155C12D0Ev,_ZTv0_n12_N9S21155C12D0Ev),
};
static  VTT_ENTRY vtt_S21155C8[] = {
  {&(_ZTV8S21155C8[4]),  4,21},
  {&(_tg__ZTV8S21155C9__8S21155C8[3]),  3,5},
  {&(_tg__ZTV8S21155C48S21155C9__8S21155C8[3]),  3,5},
  {&(_tg__ZTV10S8087C2_nt__8S21155C48S21155C9__8S21155C8[3]),  3,5},
  {&(_tg__ZTV8S21155C4__8S21155C9__8S21155C8[3]),  3,5},
  {&(_tg__ZTV10S8087C2_nt__A1__8S21155C9__8S21155C8[3]),  3,5},
  {&(_tg__ZTV9S21155C12__8S21155C8[3]),  3,5},
  {&(_tg__ZTV8S21155C49S21155C12__A1__8S21155C8[3]),  3,5},
  {&(_tg__ZTV10S8087C2_nt__8S21155C49S21155C12__A1__8S21155C8[3]),  3,5},
  {&(_tg__ZTV10S8087C2_nt__9S21155C12__8S21155C8[3]),  3,5},
  {&(_ZTV8S21155C8[19]),  19,21},
  {&(_ZTV8S21155C8[9]),  9,21},
  {&(_ZTV8S21155C8[14]),  14,21},
};
extern VTBL_ENTRY _ZTI8S21155C8[];
extern  VTBL_ENTRY _ZTV8S21155C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21155C8[];
static VTBL_ENTRY alt_thunk_names44[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21155C12D0Ev,_ZTv0_n12_N9S21155C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S21155C12D0Ev,_ZThn8_N9S21155C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21155C12D1Ev,_ZTv0_n12_N9S21155C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S21155C12D1Ev,_ZThn8_N9S21155C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21155C9D0Ev,_ZTv0_n12_N8S21155C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S21155C9D0Ev,_ZThn32_N8S21155C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21155C9D1Ev,_ZTv0_n12_N8S21155C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S21155C9D1Ev,_ZThn32_N8S21155C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21155C4D0Ev,_ZTv0_n12_N8S21155C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S21155C4D0Ev,_ZThn8_N8S21155C4D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S21155C4D0Ev,_ZThn24_N8S21155C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21155C4D1Ev,_ZTv0_n12_N8S21155C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S21155C4D1Ev,_ZThn8_N8S21155C4D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S21155C4D1Ev,_ZThn24_N8S21155C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21155C8D0Ev,_ZTv0_n12_N8S21155C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S21155C8D0Ev,_ZThn32_N8S21155C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21155C8D1Ev,_ZTv0_n12_N8S21155C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S21155C8D1Ev,_ZThn32_N8S21155C8D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21155C8 = {  "S21155C8", // class name
  bases_S21155C8, 7,
  &(vtc_S21155C8[0]), // expected_vtbl_contents
  &(vtt_S21155C8[0]), // expected_vtt_contents
  ABISELECT(72,44), // object size
  NSPAIRA(_ZTI8S21155C8),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S21155C8),21, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21155C8),13, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names44,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21155C13  : virtual S21155C9 {
  virtual  ~S21155C13(); // _ZN9S21155C13D2Ev
  S21155C13(); // tgen
};
//SIG(-1 S21155C13) C1{ VBC2{ BC3{ vd m Fi} BC4{ VBC3 FU5{ m}} FU5[10]} vd}


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

static void Test_S21155C13()
{
  extern Class_Descriptor cd_S21155C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,10)];
    init_test(&cd_S21155C13, buf);
    S21155C13 *dp, &lv = *(dp=new (buf) S21155C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,36), "sizeof(S21155C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21155C13)");
    /*is_ambiguous_... S21155C9::S8087C2_nt */ AMB_check_base_class_offset(lv, (S8087C2_nt*)(S21155C9*), ABISELECT(8,4), "S21155C13");
    check_base_class_offset(lv, (S8087C2_nt*)(S21155C4*)(S21155C9*), ABISELECT(48,28), "S21155C13");
    check_base_class_offset(lv, (S21155C4*)(S21155C9*), ABISELECT(24,12), "S21155C13");
    check_base_class_offset(lv, (S21155C9*), ABISELECT(8,4), "S21155C13");
    test_class_info(&lv, &cd_S21155C13);
    dp->~S21155C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21155C13(Test_S21155C13, "S21155C13", ABISELECT(64,36));

#else // __cplusplus

extern void _ZN9S21155C13C1Ev();
extern void _ZN9S21155C13D2Ev();
Name_Map name_map_S21155C13[] = {
  NSPAIR(_ZN9S21155C13C1Ev),
  NSPAIR(_ZN9S21155C13D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S8087C2_nt;
extern VTBL_ENTRY _ZTI10S8087C2_nt[];
extern  VTBL_ENTRY _ZTV10S8087C2_nt[];
extern Class_Descriptor cd_S8087C2_nt;
extern VTBL_ENTRY _ZTI10S8087C2_nt[];
extern  VTBL_ENTRY _ZTV10S8087C2_nt[];
extern Class_Descriptor cd_S21155C4;
extern VTBL_ENTRY _ZTI8S21155C4[];
extern  VTBL_ENTRY _ZTV8S21155C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21155C4[];
extern Class_Descriptor cd_S21155C9;
extern VTBL_ENTRY _ZTI8S21155C9[];
extern  VTBL_ENTRY _ZTV8S21155C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21155C9[];
static Base_Class bases_S21155C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8087C2_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
    3, //immediately_derived
  0, 0},
  {&cd_S8087C2_nt,    ABISELECT(48,28), //bcp->offset
    17, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S21155C4,    ABISELECT(24,12), //bcp->offset
    12, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S21155C9,    ABISELECT(8,4), //bcp->offset
    6, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S21155C13[];
extern void _ZN9S21155C13D1Ev();
extern void _ZN9S21155C13D0Ev();
extern void ABISELECT(_ZTv0_n32_N9S21155C13D1Ev,_ZTv0_n16_N9S21155C13D1Ev)();
extern void ABISELECT(_ZThn8_N9S21155C13D1Ev,_ZThn4_N9S21155C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S21155C13D0Ev,_ZTv0_n16_N9S21155C13D0Ev)();
extern void ABISELECT(_ZThn8_N9S21155C13D0Ev,_ZThn4_N9S21155C13D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn16_n32_N9S21155C13D1Ev,_ZTvn8_n16_N9S21155C13D1Ev)();
extern void ABISELECT(_ZTvn16_n32_N9S21155C13D0Ev,_ZTvn8_n16_N9S21155C13D0Ev)();
extern void ABISELECT(_ZTv0_n24_N9S21155C13D1Ev,_ZTv0_n12_N9S21155C13D1Ev)();
extern void ABISELECT(_ZThn48_N9S21155C13D1Ev,_ZThn28_N9S21155C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21155C13D0Ev,_ZTv0_n12_N9S21155C13D0Ev)();
extern void ABISELECT(_ZThn48_N9S21155C13D0Ev,_ZThn28_N9S21155C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S21155C13[] = {
  ABISELECT(48,28),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S21155C13[0]),
  (VTBL_ENTRY)&_ZN9S21155C13D1Ev,
  (VTBL_ENTRY)&_ZN9S21155C13D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(40,24),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S21155C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21155C13D1Ev,_ZTv0_n16_N9S21155C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21155C13D0Ev,_ZTv0_n16_N9S21155C13D0Ev),
  ABISELECT(24,16),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S21155C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n32_N9S21155C13D1Ev,_ZTvn8_n16_N9S21155C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n32_N9S21155C13D0Ev,_ZTvn8_n16_N9S21155C13D0Ev),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI9S21155C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21155C13D1Ev,_ZTv0_n12_N9S21155C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21155C13D0Ev,_ZTv0_n12_N9S21155C13D0Ev),
};
extern VTBL_ENTRY _ZTV9S21155C13[];
extern void _ZN8S21155C9D1Ev();
extern void _ZN8S21155C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21155C9__9S21155C13[] = {
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S21155C9[0]),
  (VTBL_ENTRY)&_ZN8S21155C9D1Ev,
  (VTBL_ENTRY)&_ZN8S21155C9D0Ev,
};
extern void _ZN8S21155C4D1Ev();
extern void _ZN8S21155C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21155C48S21155C9__9S21155C13[] = {
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S21155C4[0]),
  (VTBL_ENTRY)&_ZN8S21155C4D1Ev,
  (VTBL_ENTRY)&_ZN8S21155C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21155C4D1Ev,_ZTv0_n12_N8S21155C4D1Ev)();
extern void ABISELECT(_ZThn24_N8S21155C4D1Ev,_ZThn16_N8S21155C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21155C4D0Ev,_ZTv0_n12_N8S21155C4D0Ev)();
extern void ABISELECT(_ZThn24_N8S21155C4D0Ev,_ZThn16_N8S21155C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S8087C2_nt__8S21155C48S21155C9__9S21155C13[] = {
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S21155C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21155C4D1Ev,_ZTv0_n12_N8S21155C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21155C4D0Ev,_ZTv0_n12_N8S21155C4D0Ev),
};
extern void ABISELECT(_ZThn16_N8S21155C9D1Ev,_ZThn8_N8S21155C9D1Ev)();
extern void ABISELECT(_ZThn16_N8S21155C9D0Ev,_ZThn8_N8S21155C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21155C4__8S21155C9__9S21155C13[] = {
  ABISELECT(24,16),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S21155C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S21155C9D1Ev,_ZThn8_N8S21155C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S21155C9D0Ev,_ZThn8_N8S21155C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21155C9D1Ev,_ZTv0_n12_N8S21155C9D1Ev)();
extern void ABISELECT(_ZThn40_N8S21155C9D1Ev,_ZThn24_N8S21155C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21155C9D0Ev,_ZTv0_n12_N8S21155C9D0Ev)();
extern void ABISELECT(_ZThn40_N8S21155C9D0Ev,_ZThn24_N8S21155C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S8087C2_nt__A1__8S21155C9__9S21155C13[] = {
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S21155C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21155C9D1Ev,_ZTv0_n12_N8S21155C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21155C9D0Ev,_ZTv0_n12_N8S21155C9D0Ev),
};
static  VTT_ENTRY vtt_S21155C13[] = {
  {&(_ZTV9S21155C13[4]),  4,22},
  {&(_ZTV9S21155C13[10]),  10,22},
  {&(_ZTV9S21155C13[15]),  15,22},
  {&(_ZTV9S21155C13[20]),  20,22},
  {&(_tg__ZTV8S21155C9__9S21155C13[3]),  3,5},
  {&(_tg__ZTV8S21155C48S21155C9__9S21155C13[3]),  3,5},
  {&(_tg__ZTV10S8087C2_nt__8S21155C48S21155C9__9S21155C13[3]),  3,5},
  {&(_tg__ZTV8S21155C4__8S21155C9__9S21155C13[3]),  3,5},
  {&(_tg__ZTV10S8087C2_nt__A1__8S21155C9__9S21155C13[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S21155C13[];
extern  VTBL_ENTRY _ZTV9S21155C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21155C13[];
static VTBL_ENTRY alt_thunk_names45[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21155C9D0Ev,_ZTv0_n12_N8S21155C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S21155C9D0Ev,_ZThn24_N8S21155C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21155C9D1Ev,_ZTv0_n12_N8S21155C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S21155C9D1Ev,_ZThn24_N8S21155C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21155C4D0Ev,_ZTv0_n12_N8S21155C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S21155C4D0Ev,_ZThn16_N8S21155C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21155C4D1Ev,_ZTv0_n12_N8S21155C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S21155C4D1Ev,_ZThn16_N8S21155C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21155C13D0Ev,_ZTv0_n12_N9S21155C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S21155C13D0Ev,_ZThn28_N9S21155C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21155C13D1Ev,_ZTv0_n12_N9S21155C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S21155C13D1Ev,_ZThn28_N9S21155C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S21155C13D0Ev,_ZTv0_n16_N9S21155C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S21155C13D0Ev,_ZThn4_N9S21155C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S21155C13D1Ev,_ZTv0_n16_N9S21155C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S21155C13D1Ev,_ZThn4_N9S21155C13D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21155C13 = {  "S21155C13", // class name
  bases_S21155C13, 4,
  &(vtc_S21155C13[0]), // expected_vtbl_contents
  &(vtt_S21155C13[0]), // expected_vtt_contents
  ABISELECT(64,36), // object size
  NSPAIRA(_ZTI9S21155C13),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S21155C13),22, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S21155C13),9, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names45,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21155C7  : virtual S21155C8 , S21155C13 {
  virtual  ~S21155C7(); // _ZN8S21155C7D2Ev
  S21155C7(); // tgen
};
//SIG(-1 S21155C7) C1{ VBC2{ VBC3{ vd m Fi} BC4{ BC3 BC5{ VBC3 FU6{ m}} FU6[10]} VBC7{ m Fi} BC8{ VBC3 BC5 vd}} BC9{ VBC4 vd} vd}


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

static void Test_S21155C7()
{
  extern Class_Descriptor cd_S21155C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,19)];
    init_test(&cd_S21155C7, buf);
    S21155C7 *dp, &lv = *(dp=new (buf) S21155C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,72), "sizeof(S21155C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21155C7)");
    /*is_ambiguous_... S21155C8::S8087C2_nt */ AMB_check_base_class_offset(lv, (S8087C2_nt*)(S21155C8*), ABISELECT(64,36), "S21155C7");
    check_base_class_offset(lv, (S8087C2_nt*)(S21155C4*)(S21155C9*)(S21155C8*), ABISELECT(64,36), "S21155C7");
    check_base_class_offset(lv, (S8087C2_nt*)(S21155C12*)(S21155C8*), ABISELECT(64,36), "S21155C7");
    check_base_class_offset(lv, (S8087C2_nt*)(S21155C4*)(S21155C12*)(S21155C8*), ABISELECT(64,36), "S21155C7");
    /*is_ambiguous_... S21155C7::S21155C9 */ AMB_check_base_class_offset(lv, (S8087C2_nt*)(S21155C4*)(S21155C9*), ABISELECT(64,36), "S21155C7");
    /*is_ambiguous_... S21155C9::S8087C2_nt */ AMB_check_base_class_offset(lv, (S8087C2_nt*)(S21155C9*)(S21155C8*), ABISELECT(8,4), "S21155C7");
    check_base_class_offset(lv, (S21155C4*)(S21155C9*)(S21155C8*), ABISELECT(24,12), "S21155C7");
    check_base_class_offset(lv, (S21155C9*)(S21155C8*), ABISELECT(8,4), "S21155C7");
    check_base_class_offset(lv, (S3352C8_nt*)(S21155C8*), ABISELECT(76,44), "S21155C7");
    check_base_class_offset(lv, (S21155C4*)(S21155C12*)(S21155C8*), ABISELECT(48,28), "S21155C7");
    check_base_class_offset(lv, (S21155C12*)(S21155C8*), ABISELECT(48,28), "S21155C7");
    check_base_class_offset(lv, (S21155C8*), ABISELECT(8,4), "S21155C7");
    /*is_ambiguous_... S21155C7::S21155C9 */ AMB_check_base_class_offset(lv, (S8087C2_nt*)(S21155C9*), ABISELECT(80,48), "S21155C7");
    /*is_ambiguous_... S21155C7::S21155C9 */ AMB_check_base_class_offset(lv, (S21155C4*)(S21155C9*), ABISELECT(96,56), "S21155C7");
    check_base_class_offset(lv, (S21155C9*)(S21155C13*), ABISELECT(80,48), "S21155C7");
    check_base_class_offset(lv, (S21155C13*), 0, "S21155C7");
    test_class_info(&lv, &cd_S21155C7);
    dp->~S21155C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21155C7(Test_S21155C7, "S21155C7", ABISELECT(120,72));

#else // __cplusplus

extern void _ZN8S21155C7C1Ev();
extern void _ZN8S21155C7D2Ev();
Name_Map name_map_S21155C7[] = {
  NSPAIR(_ZN8S21155C7C1Ev),
  NSPAIR(_ZN8S21155C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S8087C2_nt;
extern VTBL_ENTRY _ZTI10S8087C2_nt[];
extern  VTBL_ENTRY _ZTV10S8087C2_nt[];
extern Class_Descriptor cd_S8087C2_nt;
extern VTBL_ENTRY _ZTI10S8087C2_nt[];
extern  VTBL_ENTRY _ZTV10S8087C2_nt[];
extern Class_Descriptor cd_S21155C4;
extern VTBL_ENTRY _ZTI8S21155C4[];
extern  VTBL_ENTRY _ZTV8S21155C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21155C4[];
extern Class_Descriptor cd_S21155C9;
extern VTBL_ENTRY _ZTI8S21155C9[];
extern  VTBL_ENTRY _ZTV8S21155C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21155C9[];
extern Class_Descriptor cd_S3352C8_nt;
extern VTBL_ENTRY _ZTI10S3352C8_nt[];
extern Class_Descriptor cd_S21155C4;
extern VTBL_ENTRY _ZTI8S21155C4[];
extern  VTBL_ENTRY _ZTV8S21155C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21155C4[];
extern Class_Descriptor cd_S21155C12;
extern VTBL_ENTRY _ZTI9S21155C12[];
extern  VTBL_ENTRY _ZTV9S21155C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21155C12[];
extern Class_Descriptor cd_S21155C8;
extern VTBL_ENTRY _ZTI8S21155C8[];
extern  VTBL_ENTRY _ZTV8S21155C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21155C8[];
extern Class_Descriptor cd_S8087C2_nt;
extern VTBL_ENTRY _ZTI10S8087C2_nt[];
extern  VTBL_ENTRY _ZTV10S8087C2_nt[];
extern Class_Descriptor cd_S21155C4;
extern VTBL_ENTRY _ZTI8S21155C4[];
extern  VTBL_ENTRY _ZTV8S21155C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21155C4[];
extern Class_Descriptor cd_S21155C9;
extern VTBL_ENTRY _ZTI8S21155C9[];
extern  VTBL_ENTRY _ZTV8S21155C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21155C9[];
extern Class_Descriptor cd_S21155C13;
extern VTBL_ENTRY _ZTI9S21155C13[];
extern  VTBL_ENTRY _ZTV9S21155C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21155C13[];
static Base_Class bases_S21155C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8087C2_nt,    ABISELECT(64,36), //bcp->offset
    25, //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
    2, //immediately_derived
  0, 1},
  {&cd_S8087C2_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
    3, //immediately_derived
  0, 0},
  {&cd_S21155C4,    ABISELECT(24,12), //bcp->offset
    15, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S21155C9,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S3352C8_nt,    ABISELECT(76,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S21155C4,    ABISELECT(48,28), //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
    5, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S21155C12,    ABISELECT(48,28), //bcp->offset
    20, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S21155C8,    ABISELECT(8,4), //bcp->offset
    8, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S8087C2_nt,    ABISELECT(80,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S21155C4,    ABISELECT(96,56), //bcp->offset
    36, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S21155C9,    ABISELECT(80,48), //bcp->offset
    30, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S21155C13,    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
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S21155C7[];
extern void _ZN8S21155C7D1Ev();
extern void _ZN8S21155C7D0Ev();
extern void ABISELECT(_ZTv0_n40_N8S21155C7D1Ev,_ZTv0_n20_N8S21155C7D1Ev)();
extern void ABISELECT(_ZThn8_N8S21155C7D1Ev,_ZThn4_N8S21155C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21155C7D0Ev,_ZTv0_n20_N8S21155C7D0Ev)();
extern void ABISELECT(_ZThn8_N8S21155C7D0Ev,_ZThn4_N8S21155C7D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn16_n40_N8S21155C7D1Ev,_ZTvn8_n20_N8S21155C7D1Ev)();
extern void ABISELECT(_ZTvn16_n40_N8S21155C7D0Ev,_ZTvn8_n20_N8S21155C7D0Ev)();
extern void ABISELECT(_ZTvn40_n40_N8S21155C7D1Ev,_ZTvn24_n20_N8S21155C7D1Ev)();
extern void ABISELECT(_ZTvn40_n40_N8S21155C7D0Ev,_ZTvn24_n20_N8S21155C7D0Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21155C7D1Ev,_ZTv0_n12_N8S21155C7D1Ev)();
extern void ABISELECT(_ZThn64_N8S21155C7D1Ev,_ZThn36_N8S21155C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21155C7D0Ev,_ZTv0_n12_N8S21155C7D0Ev)();
extern void ABISELECT(_ZThn64_N8S21155C7D0Ev,_ZThn36_N8S21155C7D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21155C7D1Ev,_ZTv0_n16_N8S21155C7D1Ev)();
extern void ABISELECT(_ZThn80_N8S21155C7D1Ev,_ZThn48_N8S21155C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21155C7D0Ev,_ZTv0_n16_N8S21155C7D0Ev)();
extern void ABISELECT(_ZThn80_N8S21155C7D0Ev,_ZThn48_N8S21155C7D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn16_n32_N8S21155C7D1Ev,_ZTvn8_n16_N8S21155C7D1Ev)();
extern void ABISELECT(_ZTvn16_n32_N8S21155C7D0Ev,_ZTvn8_n16_N8S21155C7D0Ev)();
static  VTBL_ENTRY vtc_S21155C7[] = {
  ABISELECT(76,44),
  ABISELECT(8,4),
  ABISELECT(64,36),
  ABISELECT(80,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S21155C7[0]),
  (VTBL_ENTRY)&_ZN8S21155C7D1Ev,
  (VTBL_ENTRY)&_ZN8S21155C7D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(68,40),
  ABISELECT(56,32),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S21155C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21155C7D1Ev,_ZTv0_n20_N8S21155C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21155C7D0Ev,_ZTv0_n20_N8S21155C7D0Ev),
  ABISELECT(40,24),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S21155C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S21155C7D1Ev,_ZTvn8_n20_N8S21155C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S21155C7D0Ev,_ZTvn8_n20_N8S21155C7D0Ev),
  ABISELECT(16,8),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI8S21155C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn40_n40_N8S21155C7D1Ev,_ZTvn24_n20_N8S21155C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn40_n40_N8S21155C7D0Ev,_ZTvn24_n20_N8S21155C7D0Ev),
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S21155C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21155C7D1Ev,_ZTv0_n12_N8S21155C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21155C7D0Ev,_ZTv0_n12_N8S21155C7D0Ev),
  ABISELECT(-80,-48),
  ABISELECT(-16,-12),
  ABISELECT(-80,-48),
  (VTBL_ENTRY)&(_ZTI8S21155C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21155C7D1Ev,_ZTv0_n16_N8S21155C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21155C7D0Ev,_ZTv0_n16_N8S21155C7D0Ev),
  ABISELECT(-32,-20),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI8S21155C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n32_N8S21155C7D1Ev,_ZTvn8_n16_N8S21155C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n32_N8S21155C7D0Ev,_ZTvn8_n16_N8S21155C7D0Ev),
};
extern VTBL_ENTRY _ZTV8S21155C7[];
extern void _ZN9S21155C13D1Ev();
extern void _ZN9S21155C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S21155C13__8S21155C7[] = {
  ABISELECT(64,36),
  ABISELECT(80,48),
  0,
  (VTBL_ENTRY)&(_ZTI9S21155C13[0]),
  (VTBL_ENTRY)&_ZN9S21155C13D1Ev,
  (VTBL_ENTRY)&_ZN9S21155C13D0Ev,
};
extern void ABISELECT(_ZTv0_n32_N9S21155C13D1Ev,_ZTv0_n16_N9S21155C13D1Ev)();
extern void ABISELECT(_ZThn80_N9S21155C13D1Ev,_ZThn48_N9S21155C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S21155C13D0Ev,_ZTv0_n16_N9S21155C13D0Ev)();
extern void ABISELECT(_ZThn80_N9S21155C13D0Ev,_ZThn48_N9S21155C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21155C9__9S21155C13__8S21155C7[] = {
  ABISELECT(-80,-48),
  ABISELECT(-16,-12),
  ABISELECT(-80,-48),
  (VTBL_ENTRY)&(_ZTI9S21155C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21155C13D1Ev,_ZTv0_n16_N9S21155C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21155C13D0Ev,_ZTv0_n16_N9S21155C13D0Ev),
};
extern void ABISELECT(_ZTvn16_n32_N9S21155C13D1Ev,_ZTvn8_n16_N9S21155C13D1Ev)();
extern void ABISELECT(_ZTvn16_n32_N9S21155C13D0Ev,_ZTvn8_n16_N9S21155C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21155C48S21155C9__9S21155C13__8S21155C7[] = {
  ABISELECT(-32,-20),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI9S21155C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n32_N9S21155C13D1Ev,_ZTvn8_n16_N9S21155C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n32_N9S21155C13D0Ev,_ZTvn8_n16_N9S21155C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S21155C13D1Ev,_ZTv0_n12_N9S21155C13D1Ev)();
extern void ABISELECT(_ZThn64_N9S21155C13D1Ev,_ZThn36_N9S21155C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21155C13D0Ev,_ZTv0_n12_N9S21155C13D0Ev)();
extern void ABISELECT(_ZThn64_N9S21155C13D0Ev,_ZThn36_N9S21155C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S8087C2_nt__A1__9S21155C13__8S21155C7[] = {
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI9S21155C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21155C13D1Ev,_ZTv0_n12_N9S21155C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21155C13D0Ev,_ZTv0_n12_N9S21155C13D0Ev),
};
extern void _ZN8S21155C8D1Ev();
extern void _ZN8S21155C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21155C8__8S21155C7[] = {
  ABISELECT(68,40),
  ABISELECT(56,32),
  0,
  (VTBL_ENTRY)&(_ZTI8S21155C8[0]),
  (VTBL_ENTRY)&_ZN8S21155C8D1Ev,
  (VTBL_ENTRY)&_ZN8S21155C8D0Ev,
};
extern void _ZN8S21155C9D1Ev();
extern void _ZN8S21155C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21155C98S21155C8__8S21155C7[] = {
  ABISELECT(56,32),
  0,
  (VTBL_ENTRY)&(_ZTI8S21155C9[0]),
  (VTBL_ENTRY)&_ZN8S21155C9D1Ev,
  (VTBL_ENTRY)&_ZN8S21155C9D0Ev,
};
extern void _ZN8S21155C4D1Ev();
extern void _ZN8S21155C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21155C48S21155C98S21155C8__8S21155C7[] = {
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S21155C4[0]),
  (VTBL_ENTRY)&_ZN8S21155C4D1Ev,
  (VTBL_ENTRY)&_ZN8S21155C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21155C4D1Ev,_ZTv0_n12_N8S21155C4D1Ev)();
extern void ABISELECT(_ZThn40_N8S21155C4D1Ev,_ZThn24_N8S21155C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21155C4D0Ev,_ZTv0_n12_N8S21155C4D0Ev)();
extern void ABISELECT(_ZThn40_N8S21155C4D0Ev,_ZThn24_N8S21155C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S8087C2_nt__8S21155C48S21155C98S21155C8__8S21155C7[] = {
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S21155C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21155C4D1Ev,_ZTv0_n12_N8S21155C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21155C4D0Ev,_ZTv0_n12_N8S21155C4D0Ev),
};
extern void ABISELECT(_ZThn16_N8S21155C9D1Ev,_ZThn8_N8S21155C9D1Ev)();
extern void ABISELECT(_ZThn16_N8S21155C9D0Ev,_ZThn8_N8S21155C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21155C4__8S21155C98S21155C8__8S21155C7[] = {
  ABISELECT(40,24),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S21155C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S21155C9D1Ev,_ZThn8_N8S21155C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S21155C9D0Ev,_ZThn8_N8S21155C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21155C9D1Ev,_ZTv0_n12_N8S21155C9D1Ev)();
extern void ABISELECT(_ZThn56_N8S21155C9D1Ev,_ZThn32_N8S21155C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21155C9D0Ev,_ZTv0_n12_N8S21155C9D0Ev)();
extern void ABISELECT(_ZThn56_N8S21155C9D0Ev,_ZThn32_N8S21155C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S8087C2_nt__A1__8S21155C98S21155C8__8S21155C7[] = {
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI8S21155C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21155C9D1Ev,_ZTv0_n12_N8S21155C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21155C9D0Ev,_ZTv0_n12_N8S21155C9D0Ev),
};
extern void _ZN9S21155C12D1Ev();
extern void _ZN9S21155C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S21155C128S21155C8__8S21155C7[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI9S21155C12[0]),
  (VTBL_ENTRY)&_ZN9S21155C12D1Ev,
  (VTBL_ENTRY)&_ZN9S21155C12D0Ev,
};
extern void _ZN8S21155C4D1Ev();
extern void _ZN8S21155C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21155C49S21155C128S21155C8__A1__8S21155C7[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S21155C4[0]),
  (VTBL_ENTRY)&_ZN8S21155C4D1Ev,
  (VTBL_ENTRY)&_ZN8S21155C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21155C4D1Ev,_ZTv0_n12_N8S21155C4D1Ev)();
extern void ABISELECT(_ZThn16_N8S21155C4D1Ev,_ZThn8_N8S21155C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21155C4D0Ev,_ZTv0_n12_N8S21155C4D0Ev)();
extern void ABISELECT(_ZThn16_N8S21155C4D0Ev,_ZThn8_N8S21155C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S8087C2_nt__8S21155C49S21155C128S21155C8__A1__8S21155C7[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S21155C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21155C4D1Ev,_ZTv0_n12_N8S21155C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21155C4D0Ev,_ZTv0_n12_N8S21155C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S21155C12D1Ev,_ZTv0_n12_N9S21155C12D1Ev)();
extern void ABISELECT(_ZThn16_N9S21155C12D1Ev,_ZThn8_N9S21155C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21155C12D0Ev,_ZTv0_n12_N9S21155C12D0Ev)();
extern void ABISELECT(_ZThn16_N9S21155C12D0Ev,_ZThn8_N9S21155C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S8087C2_nt__9S21155C128S21155C8__8S21155C7[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S21155C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21155C12D1Ev,_ZTv0_n12_N9S21155C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21155C12D0Ev,_ZTv0_n12_N9S21155C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21155C8D1Ev,_ZTv0_n12_N8S21155C8D1Ev)();
extern void ABISELECT(_ZThn56_N8S21155C8D1Ev,_ZThn32_N8S21155C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21155C8D0Ev,_ZTv0_n12_N8S21155C8D0Ev)();
extern void ABISELECT(_ZThn56_N8S21155C8D0Ev,_ZThn32_N8S21155C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S8087C2_nt__8S21155C8__8S21155C7[] = {
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI8S21155C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21155C8D1Ev,_ZTv0_n12_N8S21155C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21155C8D0Ev,_ZTv0_n12_N8S21155C8D0Ev),
};
extern void ABISELECT(_ZThn16_N8S21155C8D1Ev,_ZThn8_N8S21155C8D1Ev)();
extern void ABISELECT(_ZThn16_N8S21155C8D0Ev,_ZThn8_N8S21155C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21155C48S21155C9__8S21155C8__8S21155C7[] = {
  ABISELECT(40,24),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S21155C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S21155C8D1Ev,_ZThn8_N8S21155C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S21155C8D0Ev,_ZThn8_N8S21155C8D0Ev),
};
extern void ABISELECT(_ZThn40_N8S21155C8D1Ev,_ZThn24_N8S21155C8D1Ev)();
extern void ABISELECT(_ZThn40_N8S21155C8D0Ev,_ZThn24_N8S21155C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S21155C12__8S21155C8__8S21155C7[] = {
  ABISELECT(16,8),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S21155C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N8S21155C8D1Ev,_ZThn24_N8S21155C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N8S21155C8D0Ev,_ZThn24_N8S21155C8D0Ev),
};
extern void _ZN8S21155C9D1Ev();
extern void _ZN8S21155C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21155C9__A1__8S21155C7[] = {
  ABISELECT(-16,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S21155C9[0]),
  (VTBL_ENTRY)&_ZN8S21155C9D1Ev,
  (VTBL_ENTRY)&_ZN8S21155C9D0Ev,
};
extern void _ZN8S21155C4D1Ev();
extern void _ZN8S21155C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21155C48S21155C9__A2__8S21155C7[] = {
  ABISELECT(-32,-20),
  0,
  (VTBL_ENTRY)&(_ZTI8S21155C4[0]),
  (VTBL_ENTRY)&_ZN8S21155C4D1Ev,
  (VTBL_ENTRY)&_ZN8S21155C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21155C4D1Ev,_ZTv0_n12_N8S21155C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21155C4D0Ev,_ZTv0_n12_N8S21155C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S8087C2_nt__8S21155C48S21155C9__A2__8S21155C7[] = {
  ABISELECT(32,20),
  ABISELECT(32,20),
  (VTBL_ENTRY)&(_ZTI8S21155C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21155C4D1Ev,_ZTv0_n12_N8S21155C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21155C4D0Ev,_ZTv0_n12_N8S21155C4D0Ev),
};
extern void ABISELECT(_ZThn16_N8S21155C9D1Ev,_ZThn8_N8S21155C9D1Ev)();
extern void ABISELECT(_ZThn16_N8S21155C9D0Ev,_ZThn8_N8S21155C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21155C4__8S21155C9__A1__8S21155C7[] = {
  ABISELECT(-32,-20),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S21155C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S21155C9D1Ev,_ZThn8_N8S21155C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S21155C9D0Ev,_ZThn8_N8S21155C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21155C9D1Ev,_ZTv0_n12_N8S21155C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21155C9D0Ev,_ZTv0_n12_N8S21155C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S8087C2_nt__A1__8S21155C9__A1__8S21155C7[] = {
  ABISELECT(16,12),
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI8S21155C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21155C9D1Ev,_ZTv0_n12_N8S21155C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21155C9D0Ev,_ZTv0_n12_N8S21155C9D0Ev),
};
static  VTT_ENTRY vtt_S21155C7[] = {
  {&(_ZTV8S21155C7[6]),  6,41},
  {&(_tg__ZTV9S21155C13__8S21155C7[4]),  4,6},
  {&(_tg__ZTV8S21155C9__9S21155C13__8S21155C7[4]),  4,6},
  {&(_tg__ZTV8S21155C48S21155C9__9S21155C13__8S21155C7[3]),  3,5},
  {&(_tg__ZTV10S8087C2_nt__A1__9S21155C13__8S21155C7[3]),  3,5},
  {&(_ZTV8S21155C7[13]),  13,41},
  {&(_ZTV8S21155C7[28]),  28,41},
  {&(_ZTV8S21155C7[18]),  18,41},
  {&(_ZTV8S21155C7[23]),  23,41},
  {&(_ZTV8S21155C7[34]),  34,41},
  {&(_ZTV8S21155C7[39]),  39,41},
  {&(_tg__ZTV8S21155C8__8S21155C7[4]),  4,6},
  {&(_tg__ZTV8S21155C98S21155C8__8S21155C7[3]),  3,5},
  {&(_tg__ZTV8S21155C48S21155C98S21155C8__8S21155C7[3]),  3,5},
  {&(_tg__ZTV10S8087C2_nt__8S21155C48S21155C98S21155C8__8S21155C7[3]),  3,5},
  {&(_tg__ZTV8S21155C4__8S21155C98S21155C8__8S21155C7[3]),  3,5},
  {&(_tg__ZTV10S8087C2_nt__A1__8S21155C98S21155C8__8S21155C7[3]),  3,5},
  {&(_tg__ZTV9S21155C128S21155C8__8S21155C7[3]),  3,5},
  {&(_tg__ZTV8S21155C49S21155C128S21155C8__A1__8S21155C7[3]),  3,5},
  {&(_tg__ZTV10S8087C2_nt__8S21155C49S21155C128S21155C8__A1__8S21155C7[3]),  3,5},
  {&(_tg__ZTV10S8087C2_nt__9S21155C128S21155C8__8S21155C7[3]),  3,5},
  {&(_tg__ZTV10S8087C2_nt__8S21155C8__8S21155C7[3]),  3,5},
  {&(_tg__ZTV8S21155C48S21155C9__8S21155C8__8S21155C7[3]),  3,5},
  {&(_tg__ZTV9S21155C12__8S21155C8__8S21155C7[3]),  3,5},
  {&(_tg__ZTV8S21155C9__A1__8S21155C7[3]),  3,5},
  {&(_tg__ZTV8S21155C48S21155C9__A2__8S21155C7[3]),  3,5},
  {&(_tg__ZTV10S8087C2_nt__8S21155C48S21155C9__A2__8S21155C7[3]),  3,5},
  {&(_tg__ZTV8S21155C4__8S21155C9__A1__8S21155C7[3]),  3,5},
  {&(_tg__ZTV10S8087C2_nt__A1__8S21155C9__A1__8S21155C7[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S21155C7[];
extern  VTBL_ENTRY _ZTV8S21155C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21155C7[];
static VTBL_ENTRY alt_thunk_names46[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21155C8D0Ev,_ZTv0_n12_N8S21155C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S21155C8D0Ev,_ZThn32_N8S21155C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21155C8D1Ev,_ZTv0_n12_N8S21155C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S21155C8D1Ev,_ZThn32_N8S21155C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21155C12D0Ev,_ZTv0_n12_N9S21155C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S21155C12D0Ev,_ZThn8_N9S21155C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21155C12D1Ev,_ZTv0_n12_N9S21155C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S21155C12D1Ev,_ZThn8_N9S21155C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21155C9D0Ev,_ZTv0_n12_N8S21155C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S21155C9D0Ev,_ZThn32_N8S21155C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21155C9D1Ev,_ZTv0_n12_N8S21155C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S21155C9D1Ev,_ZThn32_N8S21155C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21155C4D0Ev,_ZTv0_n12_N8S21155C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S21155C4D0Ev,_ZThn8_N8S21155C4D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S21155C4D0Ev,_ZThn24_N8S21155C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21155C4D1Ev,_ZTv0_n12_N8S21155C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S21155C4D1Ev,_ZThn8_N8S21155C4D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S21155C4D1Ev,_ZThn24_N8S21155C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21155C13D0Ev,_ZTv0_n12_N9S21155C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S21155C13D0Ev,_ZThn36_N9S21155C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21155C13D1Ev,_ZTv0_n12_N9S21155C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S21155C13D1Ev,_ZThn36_N9S21155C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S21155C13D0Ev,_ZTv0_n16_N9S21155C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N9S21155C13D0Ev,_ZThn48_N9S21155C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S21155C13D1Ev,_ZTv0_n16_N9S21155C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N9S21155C13D1Ev,_ZThn48_N9S21155C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21155C7D0Ev,_ZTv0_n16_N8S21155C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S21155C7D0Ev,_ZThn48_N8S21155C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21155C7D1Ev,_ZTv0_n16_N8S21155C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S21155C7D1Ev,_ZThn48_N8S21155C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21155C7D0Ev,_ZTv0_n12_N8S21155C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S21155C7D0Ev,_ZThn36_N8S21155C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21155C7D1Ev,_ZTv0_n12_N8S21155C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S21155C7D1Ev,_ZThn36_N8S21155C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21155C7D0Ev,_ZTv0_n20_N8S21155C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S21155C7D0Ev,_ZThn4_N8S21155C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21155C7D1Ev,_ZTv0_n20_N8S21155C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S21155C7D1Ev,_ZThn4_N8S21155C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21155C7 = {  "S21155C7", // class name
  bases_S21155C7, 12,
  &(vtc_S21155C7[0]), // expected_vtbl_contents
  &(vtt_S21155C7[0]), // expected_vtt_contents
  ABISELECT(120,72), // object size
  NSPAIRA(_ZTI8S21155C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S21155C7),41, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21155C7),29, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names46,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21155C1  : virtual S21155C2 , S21155C6 , S21155C7 {
  ~S21155C1(); // tgen
  S21155C1(); // tgen
};
//SIG(1 S21155C1) C1{ VBC2{ VBC3{ vd m Fi} VBC4{ VBC3 FU5{ m}} vd FD Fi} BC6{ m FD Fp FD} BC7{ VBC8{ VBC3 BC9{ BC3 BC4 FU5[10]} VBC10{ m Fi} BC11{ VBC3 BC4 vd}} BC12{ VBC9 vd} vd}}


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

static void Test_S21155C1()
{
  extern Class_Descriptor cd_S21155C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(16,33)];
    init_test(&cd_S21155C1, buf);
    S21155C1 *dp, &lv = *(dp=new (buf) S21155C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(240,128), "sizeof(S21155C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21155C1)");
    check_base_class_offset(lv, (S8087C2_nt*)(S21155C2*), ABISELECT(104,52), "S21155C1");
    /*is_ambiguous_... S21155C1::S21155C4 */ AMB_check_base_class_offset(lv, (S8087C2_nt*)(S21155C4*), ABISELECT(104,52), "S21155C1");
    /*is_ambiguous_... S21155C8::S8087C2_nt */ AMB_check_base_class_offset(lv, (S8087C2_nt*)(S21155C8*), ABISELECT(104,52), "S21155C1");
    check_base_class_offset(lv, (S8087C2_nt*)(S21155C4*)(S21155C9*)(S21155C8*), ABISELECT(104,52), "S21155C1");
    check_base_class_offset(lv, (S8087C2_nt*)(S21155C12*)(S21155C8*), ABISELECT(104,52), "S21155C1");
    check_base_class_offset(lv, (S8087C2_nt*)(S21155C4*)(S21155C12*)(S21155C8*), ABISELECT(104,52), "S21155C1");
    /*is_ambiguous_... S21155C1::S21155C9 */ AMB_check_base_class_offset(lv, (S8087C2_nt*)(S21155C4*)(S21155C9*), ABISELECT(104,52), "S21155C1");
    check_base_class_offset(lv, (S21155C4*)(S21155C2*), ABISELECT(120,60), "S21155C1");
    check_base_class_offset(lv, (S21155C2*), ABISELECT(64,32), "S21155C1");
    check_base_class_offset(lv, (S21155C6*), ABISELECT(16,4), "S21155C1");
    /*is_ambiguous_... S21155C9::S8087C2_nt */ AMB_check_base_class_offset(lv, (S8087C2_nt*)(S21155C9*)(S21155C8*), ABISELECT(136,68), "S21155C1");
    check_base_class_offset(lv, (S21155C4*)(S21155C9*)(S21155C8*), ABISELECT(152,76), "S21155C1");
    check_base_class_offset(lv, (S21155C9*)(S21155C8*), ABISELECT(136,68), "S21155C1");
    check_base_class_offset(lv, (S3352C8_nt*)(S21155C8*), ABISELECT(188,100), "S21155C1");
    check_base_class_offset(lv, (S21155C4*)(S21155C12*)(S21155C8*), ABISELECT(176,92), "S21155C1");
    check_base_class_offset(lv, (S21155C12*)(S21155C8*), ABISELECT(176,92), "S21155C1");
    check_base_class_offset(lv, (S21155C8*)(S21155C7*), ABISELECT(136,68), "S21155C1");
    /*is_ambiguous_... S21155C1::S21155C9 */ AMB_check_base_class_offset(lv, (S8087C2_nt*)(S21155C9*), ABISELECT(192,104), "S21155C1");
    /*is_ambiguous_... S21155C1::S21155C9 */ AMB_check_base_class_offset(lv, (S21155C4*)(S21155C9*), ABISELECT(208,112), "S21155C1");
    check_base_class_offset(lv, (S21155C9*)(S21155C13*)(S21155C7*), ABISELECT(192,104), "S21155C1");
    check_base_class_offset(lv, (S21155C13*)(S21155C7*), 0, "S21155C1");
    check_base_class_offset(lv, (S21155C7*), 0, "S21155C1");
    test_class_info(&lv, &cd_S21155C1);
    dp->~S21155C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21155C1(Test_S21155C1, "S21155C1", ABISELECT(240,128));

#else // __cplusplus

extern void _ZN8S21155C1C1Ev();
extern void _ZN8S21155C1D1Ev();
Name_Map name_map_S21155C1[] = {
  NSPAIR(_ZN8S21155C1C1Ev),
  NSPAIR(_ZN8S21155C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8087C2_nt;
extern VTBL_ENTRY _ZTI10S8087C2_nt[];
extern  VTBL_ENTRY _ZTV10S8087C2_nt[];
extern Class_Descriptor cd_S21155C4;
extern VTBL_ENTRY _ZTI8S21155C4[];
extern  VTBL_ENTRY _ZTV8S21155C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21155C4[];
extern Class_Descriptor cd_S21155C2;
extern VTBL_ENTRY _ZTI8S21155C2[];
extern  VTBL_ENTRY _ZTV8S21155C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21155C2[];
extern Class_Descriptor cd_S21155C6;
extern VTBL_ENTRY _ZTI8S21155C6[];
extern Class_Descriptor cd_S8087C2_nt;
extern VTBL_ENTRY _ZTI10S8087C2_nt[];
extern  VTBL_ENTRY _ZTV10S8087C2_nt[];
extern Class_Descriptor cd_S21155C4;
extern VTBL_ENTRY _ZTI8S21155C4[];
extern  VTBL_ENTRY _ZTV8S21155C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21155C4[];
extern Class_Descriptor cd_S21155C9;
extern VTBL_ENTRY _ZTI8S21155C9[];
extern  VTBL_ENTRY _ZTV8S21155C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21155C9[];
extern Class_Descriptor cd_S3352C8_nt;
extern VTBL_ENTRY _ZTI10S3352C8_nt[];
extern Class_Descriptor cd_S21155C4;
extern VTBL_ENTRY _ZTI8S21155C4[];
extern  VTBL_ENTRY _ZTV8S21155C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21155C4[];
extern Class_Descriptor cd_S21155C12;
extern VTBL_ENTRY _ZTI9S21155C12[];
extern  VTBL_ENTRY _ZTV9S21155C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21155C12[];
extern Class_Descriptor cd_S21155C8;
extern VTBL_ENTRY _ZTI8S21155C8[];
extern  VTBL_ENTRY _ZTV8S21155C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21155C8[];
extern Class_Descriptor cd_S8087C2_nt;
extern VTBL_ENTRY _ZTI10S8087C2_nt[];
extern  VTBL_ENTRY _ZTV10S8087C2_nt[];
extern Class_Descriptor cd_S21155C4;
extern VTBL_ENTRY _ZTI8S21155C4[];
extern  VTBL_ENTRY _ZTV8S21155C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21155C4[];
extern Class_Descriptor cd_S21155C9;
extern VTBL_ENTRY _ZTI8S21155C9[];
extern  VTBL_ENTRY _ZTV8S21155C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21155C9[];
extern Class_Descriptor cd_S21155C13;
extern VTBL_ENTRY _ZTI9S21155C13[];
extern  VTBL_ENTRY _ZTV9S21155C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21155C13[];
extern Class_Descriptor cd_S21155C7;
extern VTBL_ENTRY _ZTI8S21155C7[];
extern  VTBL_ENTRY _ZTV8S21155C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21155C7[];
static Base_Class bases_S21155C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8087C2_nt,    ABISELECT(104,52), //bcp->offset
    17, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S21155C4,    ABISELECT(120,60), //bcp->offset
    22, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S21155C2,    ABISELECT(64,32), //bcp->offset
    10, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S21155C6,    ABISELECT(16,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S8087C2_nt,    ABISELECT(136,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S21155C4,    ABISELECT(152,76), //bcp->offset
    35, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S21155C9,    ABISELECT(136,68), //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
    6, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S3352C8_nt,    ABISELECT(188,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S21155C4,    ABISELECT(176,92), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S21155C12,    ABISELECT(176,92), //bcp->offset
    40, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S21155C8,    ABISELECT(136,68), //bcp->offset
    28, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S8087C2_nt,    ABISELECT(192,104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S21155C4,    ABISELECT(208,112), //bcp->offset
    51, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    40, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S21155C9,    ABISELECT(192,104), //bcp->offset
    45, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S21155C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S21155C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S21155C1[];
extern void _ZN8S21155C1D1Ev();
extern void _ZN8S21155C1D0Ev();
extern void ABISELECT(_ZTv0_n40_N8S21155C1D1Ev,_ZTv0_n20_N8S21155C1D1Ev)();
extern void ABISELECT(_ZThn64_N8S21155C1D1Ev,_ZThn32_N8S21155C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21155C1D0Ev,_ZTv0_n20_N8S21155C1D0Ev)();
extern void ABISELECT(_ZThn64_N8S21155C1D0Ev,_ZThn32_N8S21155C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21155C1D1Ev,_ZTv0_n12_N8S21155C1D1Ev)();
extern void ABISELECT(_ZThn104_N8S21155C1D1Ev,_ZThn52_N8S21155C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21155C1D0Ev,_ZTv0_n12_N8S21155C1D0Ev)();
extern void ABISELECT(_ZThn104_N8S21155C1D0Ev,_ZThn52_N8S21155C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21155C1D1Ev,_ZTv0_n16_N8S21155C1D1Ev)();
extern void ABISELECT(_ZThn120_N8S21155C1D1Ev,_ZThn60_N8S21155C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21155C1D0Ev,_ZTv0_n16_N8S21155C1D0Ev)();
extern void ABISELECT(_ZThn120_N8S21155C1D0Ev,_ZThn60_N8S21155C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21155C1D1Ev,_ZTv0_n20_N8S21155C1D1Ev)();
extern void ABISELECT(_ZThn136_N8S21155C1D1Ev,_ZThn68_N8S21155C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21155C1D0Ev,_ZTv0_n20_N8S21155C1D0Ev)();
extern void ABISELECT(_ZThn136_N8S21155C1D0Ev,_ZThn68_N8S21155C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn16_n40_N8S21155C1D1Ev,_ZTvn8_n20_N8S21155C1D1Ev)();
extern void ABISELECT(_ZTvn16_n40_N8S21155C1D0Ev,_ZTvn8_n20_N8S21155C1D0Ev)();
extern void ABISELECT(_ZTvn40_n40_N8S21155C1D1Ev,_ZTvn24_n20_N8S21155C1D1Ev)();
extern void ABISELECT(_ZTvn40_n40_N8S21155C1D0Ev,_ZTvn24_n20_N8S21155C1D0Ev)();
extern void ABISELECT(_ZTv0_n32_N8S21155C1D1Ev,_ZTv0_n16_N8S21155C1D1Ev)();
extern void ABISELECT(_ZThn192_N8S21155C1D1Ev,_ZThn104_N8S21155C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21155C1D0Ev,_ZTv0_n16_N8S21155C1D0Ev)();
extern void ABISELECT(_ZThn192_N8S21155C1D0Ev,_ZThn104_N8S21155C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn16_n32_N8S21155C1D1Ev,_ZTvn8_n16_N8S21155C1D1Ev)();
extern void ABISELECT(_ZTvn16_n32_N8S21155C1D0Ev,_ZTvn8_n16_N8S21155C1D0Ev)();
static  VTBL_ENTRY vtc_S21155C1[] = {
  ABISELECT(120,60),
  ABISELECT(64,32),
  ABISELECT(188,100),
  ABISELECT(136,68),
  ABISELECT(104,52),
  ABISELECT(192,104),
  0,
  (VTBL_ENTRY)&(_ZTI8S21155C1[0]),
  (VTBL_ENTRY)&_ZN8S21155C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21155C1D0Ev,
  ABISELECT(-64,-32),
  ABISELECT(56,28),
  ABISELECT(40,20),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S21155C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21155C1D1Ev,_ZTv0_n20_N8S21155C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21155C1D0Ev,_ZTv0_n20_N8S21155C1D0Ev),
  ABISELECT(-104,-52),
  ABISELECT(-104,-52),
  (VTBL_ENTRY)&(_ZTI8S21155C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21155C1D1Ev,_ZTv0_n12_N8S21155C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21155C1D0Ev,_ZTv0_n12_N8S21155C1D0Ev),
  ABISELECT(-120,-60),
  ABISELECT(-16,-8),
  ABISELECT(-120,-60),
  (VTBL_ENTRY)&(_ZTI8S21155C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21155C1D1Ev,_ZTv0_n16_N8S21155C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21155C1D0Ev,_ZTv0_n16_N8S21155C1D0Ev),
  ABISELECT(-136,-68),
  ABISELECT(52,32),
  ABISELECT(-32,-16),
  ABISELECT(-136,-68),
  (VTBL_ENTRY)&(_ZTI8S21155C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21155C1D1Ev,_ZTv0_n20_N8S21155C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21155C1D0Ev,_ZTv0_n20_N8S21155C1D0Ev),
  ABISELECT(-48,-24),
  ABISELECT(-152,-76),
  (VTBL_ENTRY)&(_ZTI8S21155C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S21155C1D1Ev,_ZTvn8_n20_N8S21155C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S21155C1D0Ev,_ZTvn8_n20_N8S21155C1D0Ev),
  ABISELECT(-72,-40),
  ABISELECT(-176,-92),
  (VTBL_ENTRY)&(_ZTI8S21155C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn40_n40_N8S21155C1D1Ev,_ZTvn24_n20_N8S21155C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn40_n40_N8S21155C1D0Ev,_ZTvn24_n20_N8S21155C1D0Ev),
  ABISELECT(-192,-104),
  ABISELECT(-88,-52),
  ABISELECT(-192,-104),
  (VTBL_ENTRY)&(_ZTI8S21155C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21155C1D1Ev,_ZTv0_n16_N8S21155C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21155C1D0Ev,_ZTv0_n16_N8S21155C1D0Ev),
  ABISELECT(-104,-60),
  ABISELECT(-208,-112),
  (VTBL_ENTRY)&(_ZTI8S21155C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n32_N8S21155C1D1Ev,_ZTvn8_n16_N8S21155C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n32_N8S21155C1D0Ev,_ZTvn8_n16_N8S21155C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S21155C1[];
extern void _ZN8S21155C7D1Ev();
extern void _ZN8S21155C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21155C7__8S21155C1[] = {
  ABISELECT(188,100),
  ABISELECT(136,68),
  ABISELECT(104,52),
  ABISELECT(192,104),
  0,
  (VTBL_ENTRY)&(_ZTI8S21155C7[0]),
  (VTBL_ENTRY)&_ZN8S21155C7D1Ev,
  (VTBL_ENTRY)&_ZN8S21155C7D0Ev,
};
extern void _ZN9S21155C13D1Ev();
extern void _ZN9S21155C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S21155C138S21155C7__8S21155C1[] = {
  ABISELECT(104,52),
  ABISELECT(192,104),
  0,
  (VTBL_ENTRY)&(_ZTI9S21155C13[0]),
  (VTBL_ENTRY)&_ZN9S21155C13D1Ev,
  (VTBL_ENTRY)&_ZN9S21155C13D0Ev,
};
extern void ABISELECT(_ZTv0_n32_N9S21155C13D1Ev,_ZTv0_n16_N9S21155C13D1Ev)();
extern void ABISELECT(_ZThn192_N9S21155C13D1Ev,_ZThn104_N9S21155C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S21155C13D0Ev,_ZTv0_n16_N9S21155C13D0Ev)();
extern void ABISELECT(_ZThn192_N9S21155C13D0Ev,_ZThn104_N9S21155C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21155C9__9S21155C138S21155C7__8S21155C1[] = {
  ABISELECT(-192,-104),
  ABISELECT(-88,-52),
  ABISELECT(-192,-104),
  (VTBL_ENTRY)&(_ZTI9S21155C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21155C13D1Ev,_ZTv0_n16_N9S21155C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21155C13D0Ev,_ZTv0_n16_N9S21155C13D0Ev),
};
extern void ABISELECT(_ZTvn16_n32_N9S21155C13D1Ev,_ZTvn8_n16_N9S21155C13D1Ev)();
extern void ABISELECT(_ZTvn16_n32_N9S21155C13D0Ev,_ZTvn8_n16_N9S21155C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21155C48S21155C9__9S21155C138S21155C7__8S21155C1[] = {
  ABISELECT(-104,-60),
  ABISELECT(-208,-112),
  (VTBL_ENTRY)&(_ZTI9S21155C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n32_N9S21155C13D1Ev,_ZTvn8_n16_N9S21155C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n32_N9S21155C13D0Ev,_ZTvn8_n16_N9S21155C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S21155C13D1Ev,_ZTv0_n12_N9S21155C13D1Ev)();
extern void ABISELECT(_ZThn104_N9S21155C13D1Ev,_ZThn52_N9S21155C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21155C13D0Ev,_ZTv0_n12_N9S21155C13D0Ev)();
extern void ABISELECT(_ZThn104_N9S21155C13D0Ev,_ZThn52_N9S21155C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S8087C2_nt__A1__9S21155C138S21155C7__8S21155C1[] = {
  ABISELECT(-104,-52),
  ABISELECT(-104,-52),
  (VTBL_ENTRY)&(_ZTI9S21155C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21155C13D1Ev,_ZTv0_n12_N9S21155C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21155C13D0Ev,_ZTv0_n12_N9S21155C13D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S21155C7D1Ev,_ZTv0_n20_N8S21155C7D1Ev)();
extern void ABISELECT(_ZThn136_N8S21155C7D1Ev,_ZThn68_N8S21155C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21155C7D0Ev,_ZTv0_n20_N8S21155C7D0Ev)();
extern void ABISELECT(_ZThn136_N8S21155C7D0Ev,_ZThn68_N8S21155C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21155C8__8S21155C7__8S21155C1[] = {
  ABISELECT(-136,-68),
  ABISELECT(52,32),
  ABISELECT(-32,-16),
  ABISELECT(-136,-68),
  (VTBL_ENTRY)&(_ZTI8S21155C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21155C7D1Ev,_ZTv0_n20_N8S21155C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21155C7D0Ev,_ZTv0_n20_N8S21155C7D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21155C7D1Ev,_ZTv0_n12_N8S21155C7D1Ev)();
extern void ABISELECT(_ZThn104_N8S21155C7D1Ev,_ZThn52_N8S21155C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21155C7D0Ev,_ZTv0_n12_N8S21155C7D0Ev)();
extern void ABISELECT(_ZThn104_N8S21155C7D0Ev,_ZThn52_N8S21155C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S8087C2_nt__8S21155C7__8S21155C1[] = {
  ABISELECT(-104,-52),
  ABISELECT(-104,-52),
  (VTBL_ENTRY)&(_ZTI8S21155C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21155C7D1Ev,_ZTv0_n12_N8S21155C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21155C7D0Ev,_ZTv0_n12_N8S21155C7D0Ev),
};
extern void ABISELECT(_ZTvn16_n40_N8S21155C7D1Ev,_ZTvn8_n20_N8S21155C7D1Ev)();
extern void ABISELECT(_ZTvn16_n40_N8S21155C7D0Ev,_ZTvn8_n20_N8S21155C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21155C48S21155C98S21155C8__8S21155C7__8S21155C1[] = {
  ABISELECT(-48,-24),
  ABISELECT(-152,-76),
  (VTBL_ENTRY)&(_ZTI8S21155C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S21155C7D1Ev,_ZTvn8_n20_N8S21155C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n40_N8S21155C7D0Ev,_ZTvn8_n20_N8S21155C7D0Ev),
};
extern void ABISELECT(_ZTvn40_n40_N8S21155C7D1Ev,_ZTvn24_n20_N8S21155C7D1Ev)();
extern void ABISELECT(_ZTvn40_n40_N8S21155C7D0Ev,_ZTvn24_n20_N8S21155C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S21155C128S21155C8__8S21155C7__8S21155C1[] = {
  ABISELECT(-72,-40),
  ABISELECT(-176,-92),
  (VTBL_ENTRY)&(_ZTI8S21155C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn40_n40_N8S21155C7D1Ev,_ZTvn24_n20_N8S21155C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn40_n40_N8S21155C7D0Ev,_ZTvn24_n20_N8S21155C7D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S21155C7D1Ev,_ZTv0_n16_N8S21155C7D1Ev)();
extern void ABISELECT(_ZThn192_N8S21155C7D1Ev,_ZThn104_N8S21155C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21155C7D0Ev,_ZTv0_n16_N8S21155C7D0Ev)();
extern void ABISELECT(_ZThn192_N8S21155C7D0Ev,_ZThn104_N8S21155C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21155C9__A1__8S21155C7__8S21155C1[] = {
  ABISELECT(-192,-104),
  ABISELECT(-88,-52),
  ABISELECT(-192,-104),
  (VTBL_ENTRY)&(_ZTI8S21155C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21155C7D1Ev,_ZTv0_n16_N8S21155C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21155C7D0Ev,_ZTv0_n16_N8S21155C7D0Ev),
};
extern void ABISELECT(_ZTvn16_n32_N8S21155C7D1Ev,_ZTvn8_n16_N8S21155C7D1Ev)();
extern void ABISELECT(_ZTvn16_n32_N8S21155C7D0Ev,_ZTvn8_n16_N8S21155C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21155C48S21155C9__A2__8S21155C7__8S21155C1[] = {
  ABISELECT(-104,-60),
  ABISELECT(-208,-112),
  (VTBL_ENTRY)&(_ZTI8S21155C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n32_N8S21155C7D1Ev,_ZTvn8_n16_N8S21155C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n32_N8S21155C7D0Ev,_ZTvn8_n16_N8S21155C7D0Ev),
};
extern void _ZN8S21155C2D1Ev();
extern void _ZN8S21155C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21155C2__8S21155C1[] = {
  ABISELECT(56,28),
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S21155C2[0]),
  (VTBL_ENTRY)&_ZN8S21155C2D1Ev,
  (VTBL_ENTRY)&_ZN8S21155C2D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21155C2D1Ev,_ZTv0_n12_N8S21155C2D1Ev)();
extern void ABISELECT(_ZThn40_N8S21155C2D1Ev,_ZThn20_N8S21155C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21155C2D0Ev,_ZTv0_n12_N8S21155C2D0Ev)();
extern void ABISELECT(_ZThn40_N8S21155C2D0Ev,_ZThn20_N8S21155C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S8087C2_nt__8S21155C2__8S21155C1[] = {
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S21155C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21155C2D1Ev,_ZTv0_n12_N8S21155C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21155C2D0Ev,_ZTv0_n12_N8S21155C2D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S21155C2D1Ev,_ZTv0_n16_N8S21155C2D1Ev)();
extern void ABISELECT(_ZThn56_N8S21155C2D1Ev,_ZThn28_N8S21155C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21155C2D0Ev,_ZTv0_n16_N8S21155C2D0Ev)();
extern void ABISELECT(_ZThn56_N8S21155C2D0Ev,_ZThn28_N8S21155C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21155C4__8S21155C2__8S21155C1[] = {
  ABISELECT(-56,-28),
  ABISELECT(-16,-8),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S21155C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21155C2D1Ev,_ZTv0_n16_N8S21155C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21155C2D0Ev,_ZTv0_n16_N8S21155C2D0Ev),
};
extern void _ZN8S21155C4D1Ev();
extern void _ZN8S21155C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21155C4__8S21155C1[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S21155C4[0]),
  (VTBL_ENTRY)&_ZN8S21155C4D1Ev,
  (VTBL_ENTRY)&_ZN8S21155C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21155C4D1Ev,_ZTv0_n12_N8S21155C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21155C4D0Ev,_ZTv0_n12_N8S21155C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S8087C2_nt__8S21155C4__8S21155C1[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S21155C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21155C4D1Ev,_ZTv0_n12_N8S21155C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21155C4D0Ev,_ZTv0_n12_N8S21155C4D0Ev),
};
extern void _ZN8S21155C8D1Ev();
extern void _ZN8S21155C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21155C8__8S21155C1[] = {
  ABISELECT(52,32),
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI8S21155C8[0]),
  (VTBL_ENTRY)&_ZN8S21155C8D1Ev,
  (VTBL_ENTRY)&_ZN8S21155C8D0Ev,
};
extern void _ZN8S21155C9D1Ev();
extern void _ZN8S21155C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21155C98S21155C8__8S21155C1[] = {
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI8S21155C9[0]),
  (VTBL_ENTRY)&_ZN8S21155C9D1Ev,
  (VTBL_ENTRY)&_ZN8S21155C9D0Ev,
};
extern void _ZN8S21155C4D1Ev();
extern void _ZN8S21155C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21155C48S21155C98S21155C8__A1__8S21155C1[] = {
  ABISELECT(-48,-24),
  0,
  (VTBL_ENTRY)&(_ZTI8S21155C4[0]),
  (VTBL_ENTRY)&_ZN8S21155C4D1Ev,
  (VTBL_ENTRY)&_ZN8S21155C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21155C4D1Ev,_ZTv0_n12_N8S21155C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21155C4D0Ev,_ZTv0_n12_N8S21155C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S8087C2_nt__8S21155C48S21155C98S21155C8__A1__8S21155C1[] = {
  ABISELECT(48,24),
  ABISELECT(48,24),
  (VTBL_ENTRY)&(_ZTI8S21155C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21155C4D1Ev,_ZTv0_n12_N8S21155C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21155C4D0Ev,_ZTv0_n12_N8S21155C4D0Ev),
};
extern void ABISELECT(_ZThn16_N8S21155C9D1Ev,_ZThn8_N8S21155C9D1Ev)();
extern void ABISELECT(_ZThn16_N8S21155C9D0Ev,_ZThn8_N8S21155C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21155C4__8S21155C98S21155C8__8S21155C1[] = {
  ABISELECT(-48,-24),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S21155C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S21155C9D1Ev,_ZThn8_N8S21155C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S21155C9D0Ev,_ZThn8_N8S21155C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21155C9D1Ev,_ZTv0_n12_N8S21155C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21155C9D0Ev,_ZTv0_n12_N8S21155C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S8087C2_nt__A1__8S21155C98S21155C8__8S21155C1[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI8S21155C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21155C9D1Ev,_ZTv0_n12_N8S21155C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21155C9D0Ev,_ZTv0_n12_N8S21155C9D0Ev),
};
extern void _ZN9S21155C12D1Ev();
extern void _ZN9S21155C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S21155C128S21155C8__8S21155C1[] = {
  ABISELECT(-72,-40),
  0,
  (VTBL_ENTRY)&(_ZTI9S21155C12[0]),
  (VTBL_ENTRY)&_ZN9S21155C12D1Ev,
  (VTBL_ENTRY)&_ZN9S21155C12D0Ev,
};
extern void _ZN8S21155C4D1Ev();
extern void _ZN8S21155C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21155C49S21155C128S21155C8__A2__8S21155C1[] = {
  ABISELECT(-72,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S21155C4[0]),
  (VTBL_ENTRY)&_ZN8S21155C4D1Ev,
  (VTBL_ENTRY)&_ZN8S21155C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21155C4D1Ev,_ZTv0_n12_N8S21155C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21155C4D0Ev,_ZTv0_n12_N8S21155C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S8087C2_nt__8S21155C49S21155C128S21155C8__A2__8S21155C1[] = {
  ABISELECT(72,40),
  ABISELECT(72,40),
  (VTBL_ENTRY)&(_ZTI8S21155C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21155C4D1Ev,_ZTv0_n12_N8S21155C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21155C4D0Ev,_ZTv0_n12_N8S21155C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S21155C12D1Ev,_ZTv0_n12_N9S21155C12D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S21155C12D0Ev,_ZTv0_n12_N9S21155C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S8087C2_nt__9S21155C128S21155C8__8S21155C1[] = {
  ABISELECT(72,40),
  ABISELECT(72,40),
  (VTBL_ENTRY)&(_ZTI9S21155C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21155C12D1Ev,_ZTv0_n12_N9S21155C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21155C12D0Ev,_ZTv0_n12_N9S21155C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21155C8D1Ev,_ZTv0_n12_N8S21155C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21155C8D0Ev,_ZTv0_n12_N8S21155C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S8087C2_nt__8S21155C8__8S21155C1[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI8S21155C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21155C8D1Ev,_ZTv0_n12_N8S21155C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21155C8D0Ev,_ZTv0_n12_N8S21155C8D0Ev),
};
extern void ABISELECT(_ZThn16_N8S21155C8D1Ev,_ZThn8_N8S21155C8D1Ev)();
extern void ABISELECT(_ZThn16_N8S21155C8D0Ev,_ZThn8_N8S21155C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21155C48S21155C9__8S21155C8__8S21155C1[] = {
  ABISELECT(-48,-24),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S21155C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S21155C8D1Ev,_ZThn8_N8S21155C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S21155C8D0Ev,_ZThn8_N8S21155C8D0Ev),
};
extern void ABISELECT(_ZThn40_N8S21155C8D1Ev,_ZThn24_N8S21155C8D1Ev)();
extern void ABISELECT(_ZThn40_N8S21155C8D0Ev,_ZThn24_N8S21155C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S21155C12__8S21155C8__8S21155C1[] = {
  ABISELECT(-72,-40),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S21155C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N8S21155C8D1Ev,_ZThn24_N8S21155C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N8S21155C8D0Ev,_ZThn24_N8S21155C8D0Ev),
};
extern void _ZN8S21155C9D1Ev();
extern void _ZN8S21155C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21155C9__A1__8S21155C1[] = {
  ABISELECT(-88,-52),
  0,
  (VTBL_ENTRY)&(_ZTI8S21155C9[0]),
  (VTBL_ENTRY)&_ZN8S21155C9D1Ev,
  (VTBL_ENTRY)&_ZN8S21155C9D0Ev,
};
extern void _ZN8S21155C4D1Ev();
extern void _ZN8S21155C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21155C48S21155C9__A3__8S21155C1[] = {
  ABISELECT(-104,-60),
  0,
  (VTBL_ENTRY)&(_ZTI8S21155C4[0]),
  (VTBL_ENTRY)&_ZN8S21155C4D1Ev,
  (VTBL_ENTRY)&_ZN8S21155C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21155C4D1Ev,_ZTv0_n12_N8S21155C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21155C4D0Ev,_ZTv0_n12_N8S21155C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S8087C2_nt__8S21155C48S21155C9__A3__8S21155C1[] = {
  ABISELECT(104,60),
  ABISELECT(104,60),
  (VTBL_ENTRY)&(_ZTI8S21155C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21155C4D1Ev,_ZTv0_n12_N8S21155C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21155C4D0Ev,_ZTv0_n12_N8S21155C4D0Ev),
};
extern void ABISELECT(_ZThn16_N8S21155C9D1Ev,_ZThn8_N8S21155C9D1Ev)();
extern void ABISELECT(_ZThn16_N8S21155C9D0Ev,_ZThn8_N8S21155C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21155C4__8S21155C9__A1__8S21155C1[] = {
  ABISELECT(-104,-60),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S21155C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S21155C9D1Ev,_ZThn8_N8S21155C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S21155C9D0Ev,_ZThn8_N8S21155C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21155C9D1Ev,_ZTv0_n12_N8S21155C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21155C9D0Ev,_ZTv0_n12_N8S21155C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S8087C2_nt__A1__8S21155C9__A1__8S21155C1[] = {
  ABISELECT(88,52),
  ABISELECT(88,52),
  (VTBL_ENTRY)&(_ZTI8S21155C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21155C9D1Ev,_ZTv0_n12_N8S21155C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21155C9D0Ev,_ZTv0_n12_N8S21155C9D0Ev),
};
static  VTT_ENTRY vtt_S21155C1[] = {
  {&(_ZTV8S21155C1[8]),  8,56},
  {&(_tg__ZTV8S21155C7__8S21155C1[6]),  6,8},
  {&(_tg__ZTV9S21155C138S21155C7__8S21155C1[4]),  4,6},
  {&(_tg__ZTV8S21155C9__9S21155C138S21155C7__8S21155C1[4]),  4,6},
  {&(_tg__ZTV8S21155C48S21155C9__9S21155C138S21155C7__8S21155C1[3]),  3,5},
  {&(_tg__ZTV10S8087C2_nt__A1__9S21155C138S21155C7__8S21155C1[3]),  3,5},
  {&(_tg__ZTV8S21155C8__8S21155C7__8S21155C1[5]),  5,7},
  {&(_tg__ZTV10S8087C2_nt__8S21155C7__8S21155C1[3]),  3,5},
  {&(_tg__ZTV8S21155C48S21155C98S21155C8__8S21155C7__8S21155C1[3]),  3,5},
  {&(_tg__ZTV9S21155C128S21155C8__8S21155C7__8S21155C1[3]),  3,5},
  {&(_tg__ZTV8S21155C9__A1__8S21155C7__8S21155C1[4]),  4,6},
  {&(_tg__ZTV8S21155C48S21155C9__A2__8S21155C7__8S21155C1[3]),  3,5},
  {&(_ZTV8S21155C1[15]),  15,56},
  {&(_ZTV8S21155C1[20]),  20,56},
  {&(_ZTV8S21155C1[26]),  26,56},
  {&(_ZTV8S21155C1[33]),  33,56},
  {&(_ZTV8S21155C1[38]),  38,56},
  {&(_ZTV8S21155C1[43]),  43,56},
  {&(_ZTV8S21155C1[49]),  49,56},
  {&(_ZTV8S21155C1[54]),  54,56},
  {&(_tg__ZTV8S21155C2__8S21155C1[4]),  4,6},
  {&(_tg__ZTV10S8087C2_nt__8S21155C2__8S21155C1[3]),  3,5},
  {&(_tg__ZTV8S21155C4__8S21155C2__8S21155C1[4]),  4,6},
  {&(_tg__ZTV8S21155C4__8S21155C1[3]),  3,5},
  {&(_tg__ZTV10S8087C2_nt__8S21155C4__8S21155C1[3]),  3,5},
  {&(_tg__ZTV8S21155C8__8S21155C1[4]),  4,6},
  {&(_tg__ZTV8S21155C98S21155C8__8S21155C1[3]),  3,5},
  {&(_tg__ZTV8S21155C48S21155C98S21155C8__A1__8S21155C1[3]),  3,5},
  {&(_tg__ZTV10S8087C2_nt__8S21155C48S21155C98S21155C8__A1__8S21155C1[3]),  3,5},
  {&(_tg__ZTV8S21155C4__8S21155C98S21155C8__8S21155C1[3]),  3,5},
  {&(_tg__ZTV10S8087C2_nt__A1__8S21155C98S21155C8__8S21155C1[3]),  3,5},
  {&(_tg__ZTV9S21155C128S21155C8__8S21155C1[3]),  3,5},
  {&(_tg__ZTV8S21155C49S21155C128S21155C8__A2__8S21155C1[3]),  3,5},
  {&(_tg__ZTV10S8087C2_nt__8S21155C49S21155C128S21155C8__A2__8S21155C1[3]),  3,5},
  {&(_tg__ZTV10S8087C2_nt__9S21155C128S21155C8__8S21155C1[3]),  3,5},
  {&(_tg__ZTV10S8087C2_nt__8S21155C8__8S21155C1[3]),  3,5},
  {&(_tg__ZTV8S21155C48S21155C9__8S21155C8__8S21155C1[3]),  3,5},
  {&(_tg__ZTV9S21155C12__8S21155C8__8S21155C1[3]),  3,5},
  {&(_tg__ZTV8S21155C9__A1__8S21155C1[3]),  3,5},
  {&(_tg__ZTV8S21155C48S21155C9__A3__8S21155C1[3]),  3,5},
  {&(_tg__ZTV10S8087C2_nt__8S21155C48S21155C9__A3__8S21155C1[3]),  3,5},
  {&(_tg__ZTV8S21155C4__8S21155C9__A1__8S21155C1[3]),  3,5},
  {&(_tg__ZTV10S8087C2_nt__A1__8S21155C9__A1__8S21155C1[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S21155C1[];
extern  VTBL_ENTRY _ZTV8S21155C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21155C1[];
static VTBL_ENTRY alt_thunk_names47[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21155C2D0Ev,_ZTv0_n16_N8S21155C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S21155C2D0Ev,_ZThn28_N8S21155C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21155C2D1Ev,_ZTv0_n16_N8S21155C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S21155C2D1Ev,_ZThn28_N8S21155C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21155C2D0Ev,_ZTv0_n12_N8S21155C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S21155C2D0Ev,_ZThn20_N8S21155C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21155C2D1Ev,_ZTv0_n12_N8S21155C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S21155C2D1Ev,_ZThn20_N8S21155C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21155C7D0Ev,_ZTv0_n16_N8S21155C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S21155C7D0Ev,_ZThn104_N8S21155C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21155C7D1Ev,_ZTv0_n16_N8S21155C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S21155C7D1Ev,_ZThn104_N8S21155C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21155C7D0Ev,_ZTv0_n12_N8S21155C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S21155C7D0Ev,_ZThn52_N8S21155C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21155C7D1Ev,_ZTv0_n12_N8S21155C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S21155C7D1Ev,_ZThn52_N8S21155C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21155C7D0Ev,_ZTv0_n20_N8S21155C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N8S21155C7D0Ev,_ZThn68_N8S21155C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21155C7D1Ev,_ZTv0_n20_N8S21155C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N8S21155C7D1Ev,_ZThn68_N8S21155C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21155C13D0Ev,_ZTv0_n12_N9S21155C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N9S21155C13D0Ev,_ZThn52_N9S21155C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21155C13D1Ev,_ZTv0_n12_N9S21155C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N9S21155C13D1Ev,_ZThn52_N9S21155C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S21155C13D0Ev,_ZTv0_n16_N9S21155C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N9S21155C13D0Ev,_ZThn104_N9S21155C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S21155C13D1Ev,_ZTv0_n16_N9S21155C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N9S21155C13D1Ev,_ZThn104_N9S21155C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21155C1D0Ev,_ZTv0_n16_N8S21155C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S21155C1D0Ev,_ZThn104_N8S21155C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn120_N8S21155C1D0Ev,_ZThn60_N8S21155C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21155C1D1Ev,_ZTv0_n16_N8S21155C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S21155C1D1Ev,_ZThn104_N8S21155C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn120_N8S21155C1D1Ev,_ZThn60_N8S21155C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21155C1D0Ev,_ZTv0_n12_N8S21155C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S21155C1D0Ev,_ZThn52_N8S21155C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21155C1D1Ev,_ZTv0_n12_N8S21155C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S21155C1D1Ev,_ZThn52_N8S21155C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21155C1D0Ev,_ZTv0_n20_N8S21155C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N8S21155C1D0Ev,_ZThn68_N8S21155C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S21155C1D0Ev,_ZThn32_N8S21155C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21155C1D1Ev,_ZTv0_n20_N8S21155C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N8S21155C1D1Ev,_ZThn68_N8S21155C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S21155C1D1Ev,_ZThn32_N8S21155C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21155C1 = {  "S21155C1", // class name
  bases_S21155C1, 16,
  &(vtc_S21155C1[0]), // expected_vtbl_contents
  &(vtt_S21155C1[0]), // expected_vtt_contents
  ABISELECT(240,128), // object size
  NSPAIRA(_ZTI8S21155C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S21155C1),56, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21155C1),43, //virtual table table var
  14, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names47,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5063C3  {
  ::S2120C20_nt s5063c3f0;
  int s5063c3f1[2];
  char s5063c3f2;
  virtual  ~S5063C3(); // _ZN7S5063C3D1Ev
  virtual void  v4(); // _ZN7S5063C32v4Ev
  virtual void  v5(); // _ZN7S5063C32v5Ev
  virtual void  v6(); // _ZN7S5063C32v6Ev
  S5063C3(); // tgen
};
//SIG(-1 S5063C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S5063C3 ::~S5063C3(){ note_dtor("S5063C3", this);}
void  S5063C3 ::v4(){vfunc_called(this, "_ZN7S5063C32v4Ev");}
void  S5063C3 ::v5(){vfunc_called(this, "_ZN7S5063C32v5Ev");}
void  S5063C3 ::v6(){vfunc_called(this, "_ZN7S5063C32v6Ev");}
S5063C3 ::S5063C3(){ note_ctor("S5063C3", this);} // tgen

static void Test_S5063C3()
{
  extern Class_Descriptor cd_S5063C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S5063C3, buf);
    S5063C3 *dp, &lv = *(dp=new (buf) S5063C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S5063C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5063C3)");
    check_field_offset(lv, s5063c3f0, ABISELECT(8,4), "S5063C3.s5063c3f0");
    check_field_offset(lv, s5063c3f1, ABISELECT(24,16), "S5063C3.s5063c3f1");
    check_field_offset(lv, s5063c3f2, ABISELECT(32,24), "S5063C3.s5063c3f2");
    test_class_info(&lv, &cd_S5063C3);
    dp->~S5063C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5063C3(Test_S5063C3, "S5063C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S5063C3C1Ev();
extern void _ZN7S5063C3D1Ev();
Name_Map name_map_S5063C3[] = {
  NSPAIR(_ZN7S5063C3C1Ev),
  NSPAIR(_ZN7S5063C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5063C3[];
extern void _ZN7S5063C3D1Ev();
extern void _ZN7S5063C3D0Ev();
extern void _ZN7S5063C32v4Ev();
extern void _ZN7S5063C32v5Ev();
extern void _ZN7S5063C32v6Ev();
static  VTBL_ENTRY vtc_S5063C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5063C3[0]),
  (VTBL_ENTRY)&_ZN7S5063C3D1Ev,
  (VTBL_ENTRY)&_ZN7S5063C3D0Ev,
  (VTBL_ENTRY)&_ZN7S5063C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5063C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5063C32v6Ev,
};
extern VTBL_ENTRY _ZTI7S5063C3[];
extern  VTBL_ENTRY _ZTV7S5063C3[];
Class_Descriptor cd_S5063C3 = {  "S5063C3", // class name
  0,0,//no base classes
  &(vtc_S5063C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S5063C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5063C3),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  S5063C2  : S5063C3 {
  void *s5063c2f0;
  virtual void  v7(); // _ZN7S5063C22v7Ev
  virtual void  v8(); // _ZN7S5063C22v8Ev
  ~S5063C2(); // tgen
  S5063C2(); // tgen
};
//SIG(-1 S5063C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S5063C2 ::v7(){vfunc_called(this, "_ZN7S5063C22v7Ev");}
void  S5063C2 ::v8(){vfunc_called(this, "_ZN7S5063C22v8Ev");}
S5063C2 ::~S5063C2(){ note_dtor("S5063C2", this);} // tgen
S5063C2 ::S5063C2(){ note_ctor("S5063C2", this);} // tgen

static void Test_S5063C2()
{
  extern Class_Descriptor cd_S5063C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S5063C2, buf);
    S5063C2 *dp, &lv = *(dp=new (buf) S5063C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S5063C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5063C2)");
    check_base_class_offset(lv, (S5063C3*), 0, "S5063C2");
    check_field_offset(lv, s5063c2f0, ABISELECT(40,28), "S5063C2.s5063c2f0");
    test_class_info(&lv, &cd_S5063C2);
    dp->~S5063C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5063C2(Test_S5063C2, "S5063C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S5063C2C1Ev();
extern void _ZN7S5063C2D1Ev();
Name_Map name_map_S5063C2[] = {
  NSPAIR(_ZN7S5063C2C1Ev),
  NSPAIR(_ZN7S5063C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5063C3;
extern VTBL_ENTRY _ZTI7S5063C3[];
extern  VTBL_ENTRY _ZTV7S5063C3[];
static Base_Class bases_S5063C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5063C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5063C2[];
extern void _ZN7S5063C2D1Ev();
extern void _ZN7S5063C2D0Ev();
extern void _ZN7S5063C32v4Ev();
extern void _ZN7S5063C32v5Ev();
extern void _ZN7S5063C32v6Ev();
extern void _ZN7S5063C22v7Ev();
extern void _ZN7S5063C22v8Ev();
static  VTBL_ENTRY vtc_S5063C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5063C2[0]),
  (VTBL_ENTRY)&_ZN7S5063C2D1Ev,
  (VTBL_ENTRY)&_ZN7S5063C2D0Ev,
  (VTBL_ENTRY)&_ZN7S5063C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5063C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5063C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5063C22v7Ev,
  (VTBL_ENTRY)&_ZN7S5063C22v8Ev,
};
extern VTBL_ENTRY _ZTI7S5063C2[];
extern  VTBL_ENTRY _ZTV7S5063C2[];
Class_Descriptor cd_S5063C2 = {  "S5063C2", // class name
  bases_S5063C2, 1,
  &(vtc_S5063C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S5063C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5063C2),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  S5063C8_nt  {
  __tsi64 s5063c8f0[4];
  void  mf5063c8(); // _ZN10S5063C8_nt8mf5063c8Ev
};
//SIG(-1 S5063C8_nt) C1{ m FL[4]}


void  S5063C8_nt ::mf5063c8(){}

//skip512 S5063C8_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5063C1  : S5063C2 {
  ::S2120C20_nt s5063c1f0;
  ::S5062C6_nt s5063c1f1;
  int s5063c1f2;
  ::S5063C8_nt s5063c1f3;
  ::S5062C10_nt s5063c1f4;
  void *s5063c1f5[2];
  virtual void  v1(); // _ZN7S5063C12v1Ev
  virtual void  v2(); // _ZN7S5063C12v2Ev
  virtual void  v3(); // _ZN7S5063C12v3Ev
  ~S5063C1(); // tgen
  S5063C1(); // tgen
};
//SIG(1 S5063C1) C1{ BC2{ BC3{ vd v4 v5 v6 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v7 v8 Fp} v1 v2 v3 FC4 FC6{ Fi FC7{ Fi[2] FL Fc}[9] Fi} Fi FC8{ m FL[4]} FC9{ m Fp FC10{ Fi[4]}} Fp[2]}


void  S5063C1 ::v1(){vfunc_called(this, "_ZN7S5063C12v1Ev");}
void  S5063C1 ::v2(){vfunc_called(this, "_ZN7S5063C12v2Ev");}
void  S5063C1 ::v3(){vfunc_called(this, "_ZN7S5063C12v3Ev");}
S5063C1 ::~S5063C1(){ note_dtor("S5063C1", this);} // tgen
S5063C1 ::S5063C1(){ note_ctor("S5063C1", this);} // tgen

static void Test_S5063C1()
{
  extern Class_Descriptor cd_S5063C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(48,75)];
    init_test(&cd_S5063C1, buf);
    S5063C1 *dp, &lv = *(dp=new (buf) S5063C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(376,296), "sizeof(S5063C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5063C1)");
    check_base_class_offset(lv, (S5063C3*)(S5063C2*), 0, "S5063C1");
    check_base_class_offset(lv, (S5063C2*), 0, "S5063C1");
    check_field_offset(lv, s5063c1f0, ABISELECT(48,32), "S5063C1.s5063c1f0");
    check_field_offset(lv, s5063c1f1, ABISELECT(64,44), "S5063C1.s5063c1f1");
    check_field_offset(lv, s5063c1f2, ABISELECT(296,232), "S5063C1.s5063c1f2");
    check_field_offset(lv, s5063c1f3, ABISELECT(304,236), "S5063C1.s5063c1f3");
    check_field_offset(lv, s5063c1f4, ABISELECT(336,268), "S5063C1.s5063c1f4");
    check_field_offset(lv, s5063c1f5, ABISELECT(360,288), "S5063C1.s5063c1f5");
    test_class_info(&lv, &cd_S5063C1);
    dp->~S5063C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5063C1(Test_S5063C1, "S5063C1", ABISELECT(376,296));

#else // __cplusplus

extern void _ZN7S5063C1C1Ev();
extern void _ZN7S5063C1D1Ev();
Name_Map name_map_S5063C1[] = {
  NSPAIR(_ZN7S5063C1C1Ev),
  NSPAIR(_ZN7S5063C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5063C3;
extern VTBL_ENTRY _ZTI7S5063C3[];
extern  VTBL_ENTRY _ZTV7S5063C3[];
extern Class_Descriptor cd_S5063C2;
extern VTBL_ENTRY _ZTI7S5063C2[];
extern  VTBL_ENTRY _ZTV7S5063C2[];
static Base_Class bases_S5063C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5063C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S5063C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S5063C1[];
extern void _ZN7S5063C1D1Ev();
extern void _ZN7S5063C1D0Ev();
extern void _ZN7S5063C32v4Ev();
extern void _ZN7S5063C32v5Ev();
extern void _ZN7S5063C32v6Ev();
extern void _ZN7S5063C22v7Ev();
extern void _ZN7S5063C22v8Ev();
extern void _ZN7S5063C12v1Ev();
extern void _ZN7S5063C12v2Ev();
extern void _ZN7S5063C12v3Ev();
static  VTBL_ENTRY vtc_S5063C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5063C1[0]),
  (VTBL_ENTRY)&_ZN7S5063C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5063C1D0Ev,
  (VTBL_ENTRY)&_ZN7S5063C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5063C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5063C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5063C22v7Ev,
  (VTBL_ENTRY)&_ZN7S5063C22v8Ev,
  (VTBL_ENTRY)&_ZN7S5063C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5063C12v2Ev,
  (VTBL_ENTRY)&_ZN7S5063C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S5063C1[];
extern  VTBL_ENTRY _ZTV7S5063C1[];
Class_Descriptor cd_S5063C1 = {  "S5063C1", // class name
  bases_S5063C1, 2,
  &(vtc_S5063C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(376,296), // object size
  NSPAIRA(_ZTI7S5063C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5063C1),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12730C3  {
  long s12730c3f0;
  long s12730c3f1;
  long s12730c3f2;
  int s12730c3f3;
  unsigned int s12730c3f4:1;
  int s12730c3f5:7;
  int s12730c3f6:8;
};
//SIG(1 S12730C3) C1{ Fl[3] Fi Fi:1 Fi:7 Fi:8}



static void Test_S12730C3()
{
  {
    init_simple_test("S12730C3");
    static S12730C3 lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S12730C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12730C3)");
    check_field_offset(lv, s12730c3f0, 0, "S12730C3.s12730c3f0");
    check_field_offset(lv, s12730c3f1, ABISELECT(8,4), "S12730C3.s12730c3f1");
    check_field_offset(lv, s12730c3f2, ABISELECT(16,8), "S12730C3.s12730c3f2");
    check_field_offset(lv, s12730c3f3, ABISELECT(24,12), "S12730C3.s12730c3f3");
    set_bf_and_test(lv, s12730c3f4, ABISELECT(28,16), 0, 1, 1, "S12730C3");
    set_bf_and_test(lv, s12730c3f5, ABISELECT(28,16), 1, 7, 1, "S12730C3");
    set_bf_and_test(lv, s12730c3f5, ABISELECT(28,16), 1, 7, hide_sll(1LL<<6), "S12730C3");
    set_bf_and_test(lv, s12730c3f6, ABISELECT(29,17), 0, 8, 1, "S12730C3");
    set_bf_and_test(lv, s12730c3f6, ABISELECT(29,17), 0, 8, hide_sll(1LL<<7), "S12730C3");
  }
}
static Arrange_To_Call_Me vS12730C3(Test_S12730C3, "S12730C3", ABISELECT(32,20));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12730C4  {
  long s12730c4f0;
  int s12730c4f1:4;
  int s12730c4f2:5;
  int s12730c4f3:5;
  int s12730c4f4:6;
  __tsi64 s12730c4f5;
  unsigned int s12730c4f6:1;
  int s12730c4f7:12;
};
//SIG(1 S12730C4) C1{ Fl Fi:4 Fi:5 Fi:5 Fi:6 FL Fi:1 Fi:12}



static void Test_S12730C4()
{
  {
    init_simple_test("S12730C4");
    static S12730C4 lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S12730C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12730C4)");
    check_field_offset(lv, s12730c4f0, 0, "S12730C4.s12730c4f0");
    set_bf_and_test(lv, s12730c4f1, ABISELECT(8,4), 0, 4, 1, "S12730C4");
    set_bf_and_test(lv, s12730c4f1, ABISELECT(8,4), 0, 4, hide_sll(1LL<<3), "S12730C4");
    set_bf_and_test(lv, s12730c4f2, ABISELECT(8,4), 4, 5, 1, "S12730C4");
    set_bf_and_test(lv, s12730c4f2, ABISELECT(8,4), 4, 5, hide_sll(1LL<<4), "S12730C4");
    set_bf_and_test(lv, s12730c4f3, ABISELECT(9,5), 1, 5, 1, "S12730C4");
    set_bf_and_test(lv, s12730c4f3, ABISELECT(9,5), 1, 5, hide_sll(1LL<<4), "S12730C4");
    set_bf_and_test(lv, s12730c4f4, ABISELECT(9,5), 6, 6, 1, "S12730C4");
    set_bf_and_test(lv, s12730c4f4, ABISELECT(9,5), 6, 6, hide_sll(1LL<<5), "S12730C4");
    check_field_offset(lv, s12730c4f5, ABISELECT(16,8), "S12730C4.s12730c4f5");
    set_bf_and_test(lv, s12730c4f6, ABISELECT(24,16), 0, 1, 1, "S12730C4");
    set_bf_and_test(lv, s12730c4f7, ABISELECT(24,16), 1, 12, 1, "S12730C4");
    set_bf_and_test(lv, s12730c4f7, ABISELECT(24,16), 1, 12, hide_sll(1LL<<11), "S12730C4");
  }
}
static Arrange_To_Call_Me vS12730C4(Test_S12730C4, "S12730C4", ABISELECT(32,20));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12730C5  {
  long s12730c5f0;
  long s12730c5f1;
  __tsi64 s12730c5f2;
};
//SIG(1 S12730C5) C1{ Fl[2] FL}



static void Test_S12730C5()
{
  {
    init_simple_test("S12730C5");
    S12730C5 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S12730C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12730C5)");
    check_field_offset(lv, s12730c5f0, 0, "S12730C5.s12730c5f0");
    check_field_offset(lv, s12730c5f1, ABISELECT(8,4), "S12730C5.s12730c5f1");
    check_field_offset(lv, s12730c5f2, ABISELECT(16,8), "S12730C5.s12730c5f2");
  }
}
static Arrange_To_Call_Me vS12730C5(Test_S12730C5, "S12730C5", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12730C7_nt  {
  void *s12730c7f0;
  int s12730c7f1;
};
//SIG(1 S12730C7_nt) C1{ Fp Fi}



//skip512 S12730C7_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

union  S12730C2  {
  ::S12730C3 s12730c2f0;
  ::S12730C4 s12730c2f1;
  ::S12730C5 s12730c2f2;
  ::S11720C18 s12730c2f3;
  ::S12730C7_nt s12730c2f4;
  ::S12730C7_nt s12730c2f5;
  int s12730c2f6;
  __tsi64 s12730c2f7;
  int s12730c2f8;
  void *s12730c2f9;
};
//SIG(1 S12730C2) U1{ FC2{ Fl Fl Fl Fi Fi:1 Fi:7 Fi:8} FC3{ Fl Fi:4 Fi:5 Fi:5 Fi:6 FL Fi:1 Fi:12} FC4{ Fl Fl FL} FC5{ Fp Fp} FC6{ Fp Fi} FC6 Fi FL Fi Fp}

#endif // __cplusplus
#ifdef __cplusplus

struct  S12730C1  {
  int s12730c1f0;
  void *s12730c1f1;
  ::S12730C2 s12730c1f2;
};
//SIG(1 S12730C1) C1{ Fi Fp FU2{ FC3{ Fl Fl Fl Fi Fi:1 Fi:7 Fi:8} FC4{ Fl Fi:4 Fi:5 Fi:5 Fi:6 FL Fi:1 Fi:12} FC5{ Fl Fl FL} FC6{ Fp Fp} FC7{ Fp Fi} FC7 Fi FL Fi Fp}}



static void Test_S12730C1()
{
  {
    init_simple_test("S12730C1");
    S12730C1 lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S12730C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12730C1)");
    check_field_offset(lv, s12730c1f0, 0, "S12730C1.s12730c1f0");
    check_field_offset(lv, s12730c1f1, ABISELECT(8,4), "S12730C1.s12730c1f1");
    check_field_offset(lv, s12730c1f2, ABISELECT(16,8), "S12730C1.s12730c1f2");
  }
}
static Arrange_To_Call_Me vS12730C1(Test_S12730C1, "S12730C1", ABISELECT(48,28));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2390C4_nt  {
  char s2390c4f0;
  int s2390c4f1;
  virtual  ~S2390C4_nt(); // _ZN10S2390C4_ntD1Ev
  virtual void  v6(); // _ZN10S2390C4_nt2v6Ev
  S2390C4_nt(); // tgen
};
//SIG(-1 S2390C4_nt) C1{ vd v1 Fc Fi}


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

//skip512 S2390C4_nt

#else // __cplusplus

extern void _ZN10S2390C4_ntC1Ev();
extern void _ZN10S2390C4_ntD1Ev();
Name_Map name_map_S2390C4_nt[] = {
  NSPAIR(_ZN10S2390C4_ntC1Ev),
  NSPAIR(_ZN10S2390C4_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S2390C4_nt[];
extern void _ZN10S2390C4_ntD1Ev();
extern void _ZN10S2390C4_ntD0Ev();
extern void _ZN10S2390C4_nt2v6Ev();
static  VTBL_ENTRY vtc_S2390C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S2390C4_nt[0]),
  (VTBL_ENTRY)&_ZN10S2390C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S2390C4_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S2390C4_nt2v6Ev,
};
extern VTBL_ENTRY _ZTI10S2390C4_nt[];
VTBL_ENTRY *P__ZTI10S2390C4_nt = _ZTI10S2390C4_nt; 
extern  VTBL_ENTRY _ZTV10S2390C4_nt[];
Class_Descriptor cd_S2390C4_nt = {  "S2390C4_nt", // class name
  0,0,//no base classes
  &(vtc_S2390C4_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI10S2390C4_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S2390C4_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  S2390C3_nt  : S2390C4_nt {
  void *s2390c3f0;
  char s2390c3f1[2];
  virtual  ~S2390C3_nt(); // _ZN10S2390C3_ntD1Ev
  virtual void  v7(); // _ZN10S2390C3_nt2v7Ev
  S2390C3_nt(); // tgen
};
//SIG(-1 S2390C3_nt) C1{ BC2{ vd v2 Fc Fi} vd v1 Fp Fc[2]}


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

//skip512 S2390C3_nt

#else // __cplusplus

extern void _ZN10S2390C3_ntC1Ev();
extern void _ZN10S2390C3_ntD1Ev();
Name_Map name_map_S2390C3_nt[] = {
  NSPAIR(_ZN10S2390C3_ntC1Ev),
  NSPAIR(_ZN10S2390C3_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2390C4_nt;
extern VTBL_ENTRY _ZTI10S2390C4_nt[];
extern  VTBL_ENTRY _ZTV10S2390C4_nt[];
static Base_Class bases_S2390C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2390C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S2390C3_nt[];
extern void _ZN10S2390C3_ntD1Ev();
extern void _ZN10S2390C3_ntD0Ev();
extern void _ZN10S2390C4_nt2v6Ev();
extern void _ZN10S2390C3_nt2v7Ev();
static  VTBL_ENTRY vtc_S2390C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S2390C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S2390C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S2390C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S2390C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S2390C3_nt2v7Ev,
};
extern VTBL_ENTRY _ZTI10S2390C3_nt[];
VTBL_ENTRY *P__ZTI10S2390C3_nt = _ZTI10S2390C3_nt; 
extern  VTBL_ENTRY _ZTV10S2390C3_nt[];
Class_Descriptor cd_S2390C3_nt = {  "S2390C3_nt", // class name
  bases_S2390C3_nt, 1,
  &(vtc_S2390C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI10S2390C3_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S2390C3_nt),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2390C2_nt  : S2390C3_nt {
  void *s2390c2f0[2];
  int s2390c2f1[3];
  char s2390c2f2[2];
  void *s2390c2f3;
  virtual  ~S2390C2_nt(); // _ZN10S2390C2_ntD1Ev
  virtual void  v8(); // _ZN10S2390C2_nt2v8Ev
  virtual void  v9(); // _ZN10S2390C2_nt2v9Ev
  virtual void  v10(); // _ZN10S2390C2_nt3v10Ev
  virtual void  v11(); // _ZN10S2390C2_nt3v11Ev
  S2390C2_nt(); // tgen
};
//SIG(-1 S2390C2_nt) C1{ BC2{ BC3{ vd v5 Fc Fi} vd v6 Fp Fc[2]} vd v1 v2 v3 v4 Fp[2] Fi[3] Fc[2] Fp}


 S2390C2_nt ::~S2390C2_nt(){ note_dtor("S2390C2_nt", this);}
void  S2390C2_nt ::v8(){vfunc_called(this, "_ZN10S2390C2_nt2v8Ev");}
void  S2390C2_nt ::v9(){vfunc_called(this, "_ZN10S2390C2_nt2v9Ev");}
void  S2390C2_nt ::v10(){vfunc_called(this, "_ZN10S2390C2_nt3v10Ev");}
void  S2390C2_nt ::v11(){vfunc_called(this, "_ZN10S2390C2_nt3v11Ev");}
S2390C2_nt ::S2390C2_nt(){ note_ctor("S2390C2_nt", this);} // tgen

//skip512 S2390C2_nt

#else // __cplusplus

extern void _ZN10S2390C2_ntC1Ev();
extern void _ZN10S2390C2_ntD1Ev();
Name_Map name_map_S2390C2_nt[] = {
  NSPAIR(_ZN10S2390C2_ntC1Ev),
  NSPAIR(_ZN10S2390C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2390C4_nt;
extern VTBL_ENTRY _ZTI10S2390C4_nt[];
extern  VTBL_ENTRY _ZTV10S2390C4_nt[];
extern Class_Descriptor cd_S2390C3_nt;
extern VTBL_ENTRY _ZTI10S2390C3_nt[];
extern  VTBL_ENTRY _ZTV10S2390C3_nt[];
static Base_Class bases_S2390C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2390C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2390C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI10S2390C2_nt[];
extern void _ZN10S2390C2_ntD1Ev();
extern void _ZN10S2390C2_ntD0Ev();
extern void _ZN10S2390C4_nt2v6Ev();
extern void _ZN10S2390C3_nt2v7Ev();
extern void _ZN10S2390C2_nt2v8Ev();
extern void _ZN10S2390C2_nt2v9Ev();
extern void _ZN10S2390C2_nt3v10Ev();
extern void _ZN10S2390C2_nt3v11Ev();
static  VTBL_ENTRY vtc_S2390C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S2390C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S2390C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S2390C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S2390C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S2390C3_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S2390C2_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S2390C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S2390C2_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S2390C2_nt3v11Ev,
};
extern VTBL_ENTRY _ZTI10S2390C2_nt[];
VTBL_ENTRY *P__ZTI10S2390C2_nt = _ZTI10S2390C2_nt; 
extern  VTBL_ENTRY _ZTV10S2390C2_nt[];
Class_Descriptor cd_S2390C2_nt = {  "S2390C2_nt", // class name
  bases_S2390C2_nt, 2,
  &(vtc_S2390C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI10S2390C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S2390C2_nt),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2390C5  {
  virtual  ~S2390C5(); // _ZN7S2390C5D1Ev
  virtual void  v12(); // _ZN7S2390C53v12Ev
  S2390C5(); // tgen
};
//SIG(-1 S2390C5) C1{ vd v1}


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

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

#else // __cplusplus

extern void _ZN7S2390C5C1Ev();
extern void _ZN7S2390C5D1Ev();
Name_Map name_map_S2390C5[] = {
  NSPAIR(_ZN7S2390C5C1Ev),
  NSPAIR(_ZN7S2390C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2390C5[];
extern void _ZN7S2390C5D1Ev();
extern void _ZN7S2390C5D0Ev();
extern void _ZN7S2390C53v12Ev();
static  VTBL_ENTRY vtc_S2390C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2390C5[0]),
  (VTBL_ENTRY)&_ZN7S2390C5D1Ev,
  (VTBL_ENTRY)&_ZN7S2390C5D0Ev,
  (VTBL_ENTRY)&_ZN7S2390C53v12Ev,
};
extern VTBL_ENTRY _ZTI7S2390C5[];
extern  VTBL_ENTRY _ZTV7S2390C5[];
Class_Descriptor cd_S2390C5 = {  "S2390C5", // class name
  0,0,//no base classes
  &(vtc_S2390C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S2390C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2390C5),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  S2390C1  : S2390C2_nt , S2390C5 {
  int s2390c1f0;
  void *s2390c1f1;
  int s2390c1f2;
  void *s2390c1f3[3];
  int s2390c1f4[2];
  void *s2390c1f5[2];
  int s2390c1f6;
  virtual  ~S2390C1(); // _ZN7S2390C1D1Ev
  virtual void  v1(); // _ZN7S2390C12v1Ev
  virtual void  v2(); // _ZN7S2390C12v2Ev
  virtual void  v3(); // _ZN7S2390C12v3Ev
  virtual void  v4(); // _ZN7S2390C12v4Ev
  virtual void  v5(); // _ZN7S2390C12v5Ev
  S2390C1(); // tgen
};
//SIG(1 S2390C1) C1{ BC2{ BC3{ BC4{ vd v6 Fc Fi} vd v7 Fp Fc[2]} vd v8 v9 v10 v11 Fp[2] Fi[3] Fc[2] Fp} BC5{ vd v12} vd v1 v2 v3 v4 v5 Fi Fp Fi Fp[3] Fi[2] Fp[2] Fi}


 S2390C1 ::~S2390C1(){ note_dtor("S2390C1", this);}
void  S2390C1 ::v1(){vfunc_called(this, "_ZN7S2390C12v1Ev");}
void  S2390C1 ::v2(){vfunc_called(this, "_ZN7S2390C12v2Ev");}
void  S2390C1 ::v3(){vfunc_called(this, "_ZN7S2390C12v3Ev");}
void  S2390C1 ::v4(){vfunc_called(this, "_ZN7S2390C12v4Ev");}
void  S2390C1 ::v5(){vfunc_called(this, "_ZN7S2390C12v5Ev");}
S2390C1 ::S2390C1(){ note_ctor("S2390C1", this);} // tgen

static void Test_S2390C1()
{
  extern Class_Descriptor cd_S2390C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(21,25)];
    init_test(&cd_S2390C1, buf);
    S2390C1 *dp, &lv = *(dp=new (buf) S2390C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,96), "sizeof(S2390C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2390C1)");
    check_base_class_offset(lv, (S2390C4_nt*)(S2390C3_nt*)(S2390C2_nt*), 0, "S2390C1");
    check_base_class_offset(lv, (S2390C3_nt*)(S2390C2_nt*), 0, "S2390C1");
    check_base_class_offset(lv, (S2390C2_nt*), 0, "S2390C1");
    check_base_class_offset(lv, (S2390C5*), ABISELECT(72,48), "S2390C1");
    check_field_offset(lv, s2390c1f0, ABISELECT(80,52), "S2390C1.s2390c1f0");
    check_field_offset(lv, s2390c1f1, ABISELECT(88,56), "S2390C1.s2390c1f1");
    check_field_offset(lv, s2390c1f2, ABISELECT(96,60), "S2390C1.s2390c1f2");
    check_field_offset(lv, s2390c1f3, ABISELECT(104,64), "S2390C1.s2390c1f3");
    check_field_offset(lv, s2390c1f4, ABISELECT(128,76), "S2390C1.s2390c1f4");
    check_field_offset(lv, s2390c1f5, ABISELECT(136,84), "S2390C1.s2390c1f5");
    check_field_offset(lv, s2390c1f6, ABISELECT(152,92), "S2390C1.s2390c1f6");
    test_class_info(&lv, &cd_S2390C1);
    dp->~S2390C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2390C1(Test_S2390C1, "S2390C1", ABISELECT(160,96));

#else // __cplusplus

extern void _ZN7S2390C1C1Ev();
extern void _ZN7S2390C1D1Ev();
Name_Map name_map_S2390C1[] = {
  NSPAIR(_ZN7S2390C1C1Ev),
  NSPAIR(_ZN7S2390C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2390C4_nt;
extern VTBL_ENTRY _ZTI10S2390C4_nt[];
extern  VTBL_ENTRY _ZTV10S2390C4_nt[];
extern Class_Descriptor cd_S2390C3_nt;
extern VTBL_ENTRY _ZTI10S2390C3_nt[];
extern  VTBL_ENTRY _ZTV10S2390C3_nt[];
extern Class_Descriptor cd_S2390C2_nt;
extern VTBL_ENTRY _ZTI10S2390C2_nt[];
extern  VTBL_ENTRY _ZTV10S2390C2_nt[];
extern Class_Descriptor cd_S2390C5;
extern VTBL_ENTRY _ZTI7S2390C5[];
extern  VTBL_ENTRY _ZTV7S2390C5[];
static Base_Class bases_S2390C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2390C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2390C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2390C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2390C5,    ABISELECT(72,48), //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
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2390C1[];
extern void _ZN7S2390C1D1Ev();
extern void _ZN7S2390C1D0Ev();
extern void _ZN10S2390C4_nt2v6Ev();
extern void _ZN10S2390C3_nt2v7Ev();
extern void _ZN10S2390C2_nt2v8Ev();
extern void _ZN10S2390C2_nt2v9Ev();
extern void _ZN10S2390C2_nt3v10Ev();
extern void _ZN10S2390C2_nt3v11Ev();
extern void _ZN7S2390C12v1Ev();
extern void _ZN7S2390C12v2Ev();
extern void _ZN7S2390C12v3Ev();
extern void _ZN7S2390C12v4Ev();
extern void _ZN7S2390C12v5Ev();
extern void ABISELECT(_ZThn72_N7S2390C1D1Ev,_ZThn48_N7S2390C1D1Ev)();
extern void ABISELECT(_ZThn72_N7S2390C1D0Ev,_ZThn48_N7S2390C1D0Ev)();
extern void _ZN7S2390C53v12Ev();
static  VTBL_ENTRY vtc_S2390C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2390C1[0]),
  (VTBL_ENTRY)&_ZN7S2390C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2390C1D0Ev,
  (VTBL_ENTRY)&_ZN10S2390C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S2390C3_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S2390C2_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S2390C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S2390C2_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S2390C2_nt3v11Ev,
  (VTBL_ENTRY)&_ZN7S2390C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2390C12v2Ev,
  (VTBL_ENTRY)&_ZN7S2390C12v3Ev,
  (VTBL_ENTRY)&_ZN7S2390C12v4Ev,
  (VTBL_ENTRY)&_ZN7S2390C12v5Ev,
  ABISELECT(-72,-48),
  (VTBL_ENTRY)&(_ZTI7S2390C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S2390C1D1Ev,_ZThn48_N7S2390C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn72_N7S2390C1D0Ev,_ZThn48_N7S2390C1D0Ev),
  (VTBL_ENTRY)&_ZN7S2390C53v12Ev,
};
extern VTBL_ENTRY _ZTI7S2390C1[];
extern  VTBL_ENTRY _ZTV7S2390C1[];
Class_Descriptor cd_S2390C1 = {  "S2390C1", // class name
  bases_S2390C1, 4,
  &(vtc_S2390C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(160,96), // object size
  NSPAIRA(_ZTI7S2390C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2390C1),20, //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  S16352C2_nt  {
  void *s16352c2f0;
  __tsi64 s16352c2f1;
  int s16352c2f2;
  void  mf16352c2(); // _ZN11S16352C2_nt9mf16352c2Ev
};
//SIG(-1 S16352C2_nt) C1{ m Fp FL Fi}


void  S16352C2_nt ::mf16352c2(){}

//skip512 S16352C2_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16352C3  {
  short s16352c3f0;
  int s16352c3f1;
  short s16352c3f2;
  short s16352c3f3;
  int s16352c3f4;
};
//SIG(-1 S16352C3) C1{ Fs Fi Fs[2] Fi}



static void Test_S16352C3()
{
  {
    init_simple_test("S16352C3");
    S16352C3 lv;
    check2(sizeof(lv), 16, "sizeof(S16352C3)");
    check2(__alignof__(lv), 4, "__alignof__(S16352C3)");
    check_field_offset(lv, s16352c3f0, 0, "S16352C3.s16352c3f0");
    check_field_offset(lv, s16352c3f1, 4, "S16352C3.s16352c3f1");
    check_field_offset(lv, s16352c3f2, 8, "S16352C3.s16352c3f2");
    check_field_offset(lv, s16352c3f3, 10, "S16352C3.s16352c3f3");
    check_field_offset(lv, s16352c3f4, 12, "S16352C3.s16352c3f4");
  }
}
static Arrange_To_Call_Me vS16352C3(Test_S16352C3, "S16352C3", 16);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16352C4  {
  int s16352c4f0;
  int s16352c4f1;
  int s16352c4f2;
  short s16352c4f3;
  short s16352c4f4;
  int s16352c4f5;
  int s16352c4f6;
  int s16352c4f7;
  int s16352c4f8;
  int s16352c4f9;
  int s16352c4f10;
};
//SIG(-1 S16352C4) C1{ Fi[3] Fs[2] Fi[6]}



static void Test_S16352C4()
{
  {
    init_simple_test("S16352C4");
    S16352C4 lv;
    check2(sizeof(lv), 40, "sizeof(S16352C4)");
    check2(__alignof__(lv), 4, "__alignof__(S16352C4)");
    check_field_offset(lv, s16352c4f0, 0, "S16352C4.s16352c4f0");
    check_field_offset(lv, s16352c4f1, 4, "S16352C4.s16352c4f1");
    check_field_offset(lv, s16352c4f2, 8, "S16352C4.s16352c4f2");
    check_field_offset(lv, s16352c4f3, 12, "S16352C4.s16352c4f3");
    check_field_offset(lv, s16352c4f4, 14, "S16352C4.s16352c4f4");
    check_field_offset(lv, s16352c4f5, 16, "S16352C4.s16352c4f5");
    check_field_offset(lv, s16352c4f6, 20, "S16352C4.s16352c4f6");
    check_field_offset(lv, s16352c4f7, 24, "S16352C4.s16352c4f7");
    check_field_offset(lv, s16352c4f8, 28, "S16352C4.s16352c4f8");
    check_field_offset(lv, s16352c4f9, 32, "S16352C4.s16352c4f9");
    check_field_offset(lv, s16352c4f10, 36, "S16352C4.s16352c4f10");
  }
}
static Arrange_To_Call_Me vS16352C4(Test_S16352C4, "S16352C4", 40);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16352C5_nt  {
  short s16352c5f0;
  void *s16352c5f1;
};
//SIG(-1 S16352C5_nt) C1{ Fs Fp}



//skip512 S16352C5_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16352C6  {
  int s16352c6f0[13];
};
//SIG(-1 S16352C6) C1{ Fi[13]}



static void Test_S16352C6()
{
  {
    init_simple_test("S16352C6");
    S16352C6 lv;
    check2(sizeof(lv), 52, "sizeof(S16352C6)");
    check2(__alignof__(lv), 4, "__alignof__(S16352C6)");
    check_field_offset(lv, s16352c6f0, 0, "S16352C6.s16352c6f0");
  }
}
static Arrange_To_Call_Me vS16352C6(Test_S16352C6, "S16352C6", 52);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16352C1  {
  ::S16352C2_nt s16352c1f0;
  __tsi64 s16352c1f1;
  ::S16352C3 s16352c1f2;
  ::S16352C4 s16352c1f3;
  ::S16352C5_nt s16352c1f4;
  ::S16352C6 s16352c1f5;
  void *s16352c1f6[2];
  char s16352c1f7[3];
  void *s16352c1f8;
  int s16352c1f9;
  void  mf16352c1(); // _ZN8S16352C19mf16352c1Ev
};
//SIG(1 S16352C1) C1{ m FC2{ m Fp FL Fi} FL FC3{ Fs Fi Fs[2] Fi} FC4{ Fi[3] Fs[2] Fi[6]} FC5{ Fs Fp} FC6{ Fi[13]} Fp[2] Fc[3] Fp Fi}


void  S16352C1 ::mf16352c1(){}

static void Test_S16352C1()
{
  {
    init_simple_test("S16352C1");
    S16352C1 lv;
    check2(sizeof(lv), ABISELECT(200,160), "sizeof(S16352C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16352C1)");
    check_field_offset(lv, s16352c1f0, 0, "S16352C1.s16352c1f0");
    check_field_offset(lv, s16352c1f1, ABISELECT(24,16), "S16352C1.s16352c1f1");
    check_field_offset(lv, s16352c1f2, ABISELECT(32,24), "S16352C1.s16352c1f2");
    check_field_offset(lv, s16352c1f3, ABISELECT(48,40), "S16352C1.s16352c1f3");
    check_field_offset(lv, s16352c1f4, ABISELECT(88,80), "S16352C1.s16352c1f4");
    check_field_offset(lv, s16352c1f5, ABISELECT(104,88), "S16352C1.s16352c1f5");
    check_field_offset(lv, s16352c1f6, ABISELECT(160,140), "S16352C1.s16352c1f6");
    check_field_offset(lv, s16352c1f7, ABISELECT(176,148), "S16352C1.s16352c1f7");
    check_field_offset(lv, s16352c1f8, ABISELECT(184,152), "S16352C1.s16352c1f8");
    check_field_offset(lv, s16352c1f9, ABISELECT(192,156), "S16352C1.s16352c1f9");
  }
}
static Arrange_To_Call_Me vS16352C1(Test_S16352C1, "S16352C1", ABISELECT(200,160));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7187C2  {
  virtual  ~S7187C2(); // _ZN7S7187C2D1Ev
  virtual void  v9(); // _ZN7S7187C22v9Ev
  virtual void  v10(); // _ZN7S7187C23v10Ev
  virtual void  v11(); // _ZN7S7187C23v11Ev
  virtual void  v12(); // _ZN7S7187C23v12Ev
  S7187C2(); // tgen
};
//SIG(-1 S7187C2) C1{ vd v1 v2 v3 v4}


 S7187C2 ::~S7187C2(){ note_dtor("S7187C2", this);}
void  S7187C2 ::v9(){vfunc_called(this, "_ZN7S7187C22v9Ev");}
void  S7187C2 ::v10(){vfunc_called(this, "_ZN7S7187C23v10Ev");}
void  S7187C2 ::v11(){vfunc_called(this, "_ZN7S7187C23v11Ev");}
void  S7187C2 ::v12(){vfunc_called(this, "_ZN7S7187C23v12Ev");}
S7187C2 ::S7187C2(){ note_ctor("S7187C2", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S7187C2C1Ev();
extern void _ZN7S7187C2D1Ev();
Name_Map name_map_S7187C2[] = {
  NSPAIR(_ZN7S7187C2C1Ev),
  NSPAIR(_ZN7S7187C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7187C2[];
extern void _ZN7S7187C2D1Ev();
extern void _ZN7S7187C2D0Ev();
extern void _ZN7S7187C22v9Ev();
extern void _ZN7S7187C23v10Ev();
extern void _ZN7S7187C23v11Ev();
extern void _ZN7S7187C23v12Ev();
static  VTBL_ENTRY vtc_S7187C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7187C2[0]),
  (VTBL_ENTRY)&_ZN7S7187C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7187C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7187C22v9Ev,
  (VTBL_ENTRY)&_ZN7S7187C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7187C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7187C23v12Ev,
};
extern VTBL_ENTRY _ZTI7S7187C2[];
extern  VTBL_ENTRY _ZTV7S7187C2[];
Class_Descriptor cd_S7187C2 = {  "S7187C2", // class name
  0,0,//no base classes
  &(vtc_S7187C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7187C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7187C2),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7187C3  {
  virtual  ~S7187C3(); // _ZN7S7187C3D1Ev
  virtual void  v13(); // _ZN7S7187C33v13Ev
  virtual void  v14(); // _ZN7S7187C33v14Ev
  virtual void  v15(); // _ZN7S7187C33v15Ev
  virtual void  v16(); // _ZN7S7187C33v16Ev
  S7187C3(); // tgen
};
//SIG(-1 S7187C3) C1{ vd v1 v2 v3 v4}


 S7187C3 ::~S7187C3(){ note_dtor("S7187C3", this);}
void  S7187C3 ::v13(){vfunc_called(this, "_ZN7S7187C33v13Ev");}
void  S7187C3 ::v14(){vfunc_called(this, "_ZN7S7187C33v14Ev");}
void  S7187C3 ::v15(){vfunc_called(this, "_ZN7S7187C33v15Ev");}
void  S7187C3 ::v16(){vfunc_called(this, "_ZN7S7187C33v16Ev");}
S7187C3 ::S7187C3(){ note_ctor("S7187C3", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S7187C3C1Ev();
extern void _ZN7S7187C3D1Ev();
Name_Map name_map_S7187C3[] = {
  NSPAIR(_ZN7S7187C3C1Ev),
  NSPAIR(_ZN7S7187C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7187C3[];
extern void _ZN7S7187C3D1Ev();
extern void _ZN7S7187C3D0Ev();
extern void _ZN7S7187C33v13Ev();
extern void _ZN7S7187C33v14Ev();
extern void _ZN7S7187C33v15Ev();
extern void _ZN7S7187C33v16Ev();
static  VTBL_ENTRY vtc_S7187C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7187C3[0]),
  (VTBL_ENTRY)&_ZN7S7187C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7187C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7187C33v13Ev,
  (VTBL_ENTRY)&_ZN7S7187C33v14Ev,
  (VTBL_ENTRY)&_ZN7S7187C33v15Ev,
  (VTBL_ENTRY)&_ZN7S7187C33v16Ev,
};
extern VTBL_ENTRY _ZTI7S7187C3[];
extern  VTBL_ENTRY _ZTV7S7187C3[];
Class_Descriptor cd_S7187C3 = {  "S7187C3", // class name
  0,0,//no base classes
  &(vtc_S7187C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7187C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7187C3),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7187C5  {
  ::S16968C9 s7187c5f0;
  void *s7187c5f1;
  void  mf7187c5(); // _ZN7S7187C58mf7187c5Ev
};
//SIG(-1 S7187C5) C1{ m FC2{ BC3{ m Fc[16]}} Fp}


void  S7187C5 ::mf7187c5(){}

static void Test_S7187C5()
{
  {
    init_simple_test("S7187C5");
    S7187C5 lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(S7187C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7187C5)");
    check_field_offset(lv, s7187c5f0, 0, "S7187C5.s7187c5f0");
    check_field_offset(lv, s7187c5f1, 16, "S7187C5.s7187c5f1");
  }
}
static Arrange_To_Call_Me vS7187C5(Test_S7187C5, "S7187C5", ABISELECT(24,20));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7187C1  : S7187C2 , S7187C3 {
  ::S3352C7_nt s7187c1f0;
  ::S7187C5 s7187c1f1;
  int s7187c1f2[4];
  void *s7187c1f3[2];
  virtual  ~S7187C1(); // _ZN7S7187C1D1Ev
  virtual void  v1(); // _ZN7S7187C12v1Ev
  virtual void  v2(); // _ZN7S7187C12v2Ev
  virtual void  v3(); // _ZN7S7187C12v3Ev
  virtual void  v4(); // _ZN7S7187C12v4Ev
  virtual void  v5(); // _ZN7S7187C12v5Ev
  virtual void  v6(); // _ZN7S7187C12v6Ev
  virtual void  v7(); // _ZN7S7187C12v7Ev
  virtual void  v8(); // _ZN7S7187C12v8Ev
  S7187C1(); // tgen
};
//SIG(1 S7187C1) C1{ BC2{ vd v9 v10 v11 v12} BC3{ vd v13 v14 v15 v16} vd v1 v2 v3 v4 v5 v6 v7 v8 FC4{ m Fp Fi[2]} FC5{ m FC6{ BC7{ m Fc[16]}} Fp} Fi[4] Fp[2]}


 S7187C1 ::~S7187C1(){ note_dtor("S7187C1", this);}
void  S7187C1 ::v1(){vfunc_called(this, "_ZN7S7187C12v1Ev");}
void  S7187C1 ::v2(){vfunc_called(this, "_ZN7S7187C12v2Ev");}
void  S7187C1 ::v3(){vfunc_called(this, "_ZN7S7187C12v3Ev");}
void  S7187C1 ::v4(){vfunc_called(this, "_ZN7S7187C12v4Ev");}
void  S7187C1 ::v5(){vfunc_called(this, "_ZN7S7187C12v5Ev");}
void  S7187C1 ::v6(){vfunc_called(this, "_ZN7S7187C12v6Ev");}
void  S7187C1 ::v7(){vfunc_called(this, "_ZN7S7187C12v7Ev");}
void  S7187C1 ::v8(){vfunc_called(this, "_ZN7S7187C12v8Ev");}
S7187C1 ::S7187C1(){ note_ctor("S7187C1", this);} // tgen

static void Test_S7187C1()
{
  extern Class_Descriptor cd_S7187C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,17)];
    init_test(&cd_S7187C1, buf);
    S7187C1 *dp, &lv = *(dp=new (buf) S7187C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,64), "sizeof(S7187C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7187C1)");
    check_base_class_offset(lv, (S7187C2*), 0, "S7187C1");
    check_base_class_offset(lv, (S7187C3*), ABISELECT(8,4), "S7187C1");
    check_field_offset(lv, s7187c1f0, ABISELECT(16,8), "S7187C1.s7187c1f0");
    check_field_offset(lv, s7187c1f1, ABISELECT(32,20), "S7187C1.s7187c1f1");
    check_field_offset(lv, s7187c1f2, ABISELECT(56,40), "S7187C1.s7187c1f2");
    check_field_offset(lv, s7187c1f3, ABISELECT(72,56), "S7187C1.s7187c1f3");
    test_class_info(&lv, &cd_S7187C1);
    dp->~S7187C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7187C1(Test_S7187C1, "S7187C1", ABISELECT(88,64));

#else // __cplusplus

extern void _ZN7S7187C1C1Ev();
extern void _ZN7S7187C1D1Ev();
Name_Map name_map_S7187C1[] = {
  NSPAIR(_ZN7S7187C1C1Ev),
  NSPAIR(_ZN7S7187C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7187C2;
extern VTBL_ENTRY _ZTI7S7187C2[];
extern  VTBL_ENTRY _ZTV7S7187C2[];
extern Class_Descriptor cd_S7187C3;
extern VTBL_ENTRY _ZTI7S7187C3[];
extern  VTBL_ENTRY _ZTV7S7187C3[];
static Base_Class bases_S7187C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7187C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S7187C3,    ABISELECT(8,4), //bcp->offset
    16, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7187C1[];
extern void _ZN7S7187C1D1Ev();
extern void _ZN7S7187C1D0Ev();
extern void _ZN7S7187C22v9Ev();
extern void _ZN7S7187C23v10Ev();
extern void _ZN7S7187C23v11Ev();
extern void _ZN7S7187C23v12Ev();
extern void _ZN7S7187C12v1Ev();
extern void _ZN7S7187C12v2Ev();
extern void _ZN7S7187C12v3Ev();
extern void _ZN7S7187C12v4Ev();
extern void _ZN7S7187C12v5Ev();
extern void _ZN7S7187C12v6Ev();
extern void _ZN7S7187C12v7Ev();
extern void _ZN7S7187C12v8Ev();
extern void ABISELECT(_ZThn8_N7S7187C1D1Ev,_ZThn4_N7S7187C1D1Ev)();
extern void ABISELECT(_ZThn8_N7S7187C1D0Ev,_ZThn4_N7S7187C1D0Ev)();
extern void _ZN7S7187C33v13Ev();
extern void _ZN7S7187C33v14Ev();
extern void _ZN7S7187C33v15Ev();
extern void _ZN7S7187C33v16Ev();
static  VTBL_ENTRY vtc_S7187C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7187C1[0]),
  (VTBL_ENTRY)&_ZN7S7187C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7187C1D0Ev,
  (VTBL_ENTRY)&_ZN7S7187C22v9Ev,
  (VTBL_ENTRY)&_ZN7S7187C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7187C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7187C23v12Ev,
  (VTBL_ENTRY)&_ZN7S7187C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7187C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7187C12v3Ev,
  (VTBL_ENTRY)&_ZN7S7187C12v4Ev,
  (VTBL_ENTRY)&_ZN7S7187C12v5Ev,
  (VTBL_ENTRY)&_ZN7S7187C12v6Ev,
  (VTBL_ENTRY)&_ZN7S7187C12v7Ev,
  (VTBL_ENTRY)&_ZN7S7187C12v8Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7187C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7187C1D1Ev,_ZThn4_N7S7187C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S7187C1D0Ev,_ZThn4_N7S7187C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7187C33v13Ev,
  (VTBL_ENTRY)&_ZN7S7187C33v14Ev,
  (VTBL_ENTRY)&_ZN7S7187C33v15Ev,
  (VTBL_ENTRY)&_ZN7S7187C33v16Ev,
};
extern VTBL_ENTRY _ZTI7S7187C1[];
extern  VTBL_ENTRY _ZTV7S7187C1[];
Class_Descriptor cd_S7187C1 = {  "S7187C1", // class name
  bases_S7187C1, 2,
  &(vtc_S7187C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,64), // object size
  NSPAIRA(_ZTI7S7187C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7187C1),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  S11809C2  {
  void *s11809c2f0;
  char s11809c2f1[518];
  int s11809c2f2[13];
  void *s11809c2f3[2];
};
//SIG(-1 S11809C2) C1{ Fp Fc[518] Fi[13] Fp[2]}



static void Test_S11809C2()
{
  {
    init_simple_test("S11809C2");
    S11809C2 lv;
    check2(sizeof(lv), ABISELECT(600,584), "sizeof(S11809C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11809C2)");
    check_field_offset(lv, s11809c2f0, 0, "S11809C2.s11809c2f0");
    check_field_offset(lv, s11809c2f1, ABISELECT(8,4), "S11809C2.s11809c2f1");
    check_field_offset(lv, s11809c2f2, ABISELECT(528,524), "S11809C2.s11809c2f2");
    check_field_offset(lv, s11809c2f3, ABISELECT(584,576), "S11809C2.s11809c2f3");
  }
}
static Arrange_To_Call_Me vS11809C2(Test_S11809C2, "S11809C2", ABISELECT(600,584));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11809C3  {
  void *s11809c3f0;
  short s11809c3f1[2];
  __tsi64 s11809c3f2;
  char s11809c3f3[580];
  int s11809c3f4;
  char s11809c3f5[128];
  int s11809c3f6;
  short s11809c3f7[2];
};
//SIG(-1 S11809C3) C1{ Fp Fs[2] FL Fc[580] Fi Fc[128] Fi Fs[2]}



static void Test_S11809C3()
{
  {
    init_simple_test("S11809C3");
    S11809C3 lv;
    check2(sizeof(lv), ABISELECT(744,736), "sizeof(S11809C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11809C3)");
    check_field_offset(lv, s11809c3f0, 0, "S11809C3.s11809c3f0");
    check_field_offset(lv, s11809c3f1, ABISELECT(8,4), "S11809C3.s11809c3f1");
    check_field_offset(lv, s11809c3f2, ABISELECT(16,8), "S11809C3.s11809c3f2");
    check_field_offset(lv, s11809c3f3, ABISELECT(24,16), "S11809C3.s11809c3f3");
    check_field_offset(lv, s11809c3f4, ABISELECT(604,596), "S11809C3.s11809c3f4");
    check_field_offset(lv, s11809c3f5, ABISELECT(608,600), "S11809C3.s11809c3f5");
    check_field_offset(lv, s11809c3f6, ABISELECT(736,728), "S11809C3.s11809c3f6");
    check_field_offset(lv, s11809c3f7, ABISELECT(740,732), "S11809C3.s11809c3f7");
  }
}
static Arrange_To_Call_Me vS11809C3(Test_S11809C3, "S11809C3", ABISELECT(744,736));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11809C4  {
  void *s11809c4f0;
  __tsi64 s11809c4f1;
  char s11809c4f2[324];
};
//SIG(-1 S11809C4) C1{ Fp FL Fc[324]}



static void Test_S11809C4()
{
  {
    init_simple_test("S11809C4");
    S11809C4 lv;
    check2(sizeof(lv), ABISELECT(344,336), "sizeof(S11809C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11809C4)");
    check_field_offset(lv, s11809c4f0, 0, "S11809C4.s11809c4f0");
    check_field_offset(lv, s11809c4f1, ABISELECT(8,4), "S11809C4.s11809c4f1");
    check_field_offset(lv, s11809c4f2, ABISELECT(16,12), "S11809C4.s11809c4f2");
  }
}
static Arrange_To_Call_Me vS11809C4(Test_S11809C4, "S11809C4", ABISELECT(344,336));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11809C5  {
  short s11809c5f0[2];
  __tsi64 s11809c5f1;
  char s11809c5f2[324];
};
//SIG(-1 S11809C5) C1{ Fs[2] FL Fc[324]}



static void Test_S11809C5()
{
  {
    init_simple_test("S11809C5");
    S11809C5 lv;
    check2(sizeof(lv), ABISELECT(344,336), "sizeof(S11809C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11809C5)");
    check_field_offset(lv, s11809c5f0, 0, "S11809C5.s11809c5f0");
    check_field_offset(lv, s11809c5f1, ABISELECT(8,4), "S11809C5.s11809c5f1");
    check_field_offset(lv, s11809c5f2, ABISELECT(16,12), "S11809C5.s11809c5f2");
  }
}
static Arrange_To_Call_Me vS11809C5(Test_S11809C5, "S11809C5", ABISELECT(344,336));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11809C1  {
  ::S11809C2 s11809c1f0;
  int s11809c1f1[2];
  char s11809c1f2[4];
  ::S11809C3 s11809c1f3;
  ::S11809C4 s11809c1f4;
  ::S11809C5 s11809c1f5;
  int s11809c1f6[2];
};
//SIG(1 S11809C1) C1{ FC2{ Fp Fc[518] Fi[13] Fp[2]} Fi[2] Fc[4] FC3{ Fp Fs[2] FL Fc[580] Fi Fc[128] Fi Fs[2]} FC4{ Fp FL Fc[324]} FC5{ Fs[2] FL Fc[324]} Fi[2]}



static void Test_S11809C1()
{
  {
    init_simple_test("S11809C1");
    S11809C1 lv;
    check2(sizeof(lv), ABISELECT(2056,2012), "sizeof(S11809C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11809C1)");
    check_field_offset(lv, s11809c1f0, 0, "S11809C1.s11809c1f0");
    check_field_offset(lv, s11809c1f1, ABISELECT(600,584), "S11809C1.s11809c1f1");
    check_field_offset(lv, s11809c1f2, ABISELECT(608,592), "S11809C1.s11809c1f2");
    check_field_offset(lv, s11809c1f3, ABISELECT(616,596), "S11809C1.s11809c1f3");
    check_field_offset(lv, s11809c1f4, ABISELECT(1360,1332), "S11809C1.s11809c1f4");
    check_field_offset(lv, s11809c1f5, ABISELECT(1704,1668), "S11809C1.s11809c1f5");
    check_field_offset(lv, s11809c1f6, ABISELECT(2048,2004), "S11809C1.s11809c1f6");
  }
}
static Arrange_To_Call_Me vS11809C1(Test_S11809C1, "S11809C1", ABISELECT(2056,2012));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7029C2  {
  virtual void  v6(); // _ZN7S7029C22v6Ev
  virtual void  v7(); // _ZN7S7029C22v7Ev
  virtual void  v8(); // _ZN7S7029C22v8Ev
  virtual void  v9(); // _ZN7S7029C22v9Ev
  virtual void  v10(); // _ZN7S7029C23v10Ev
  virtual void  v11(); // _ZN7S7029C23v11Ev
  ~S7029C2(); // tgen
  S7029C2(); // tgen
};
//SIG(-1 S7029C2) C1{ v1 v2 v3 v4 v5 v6}


void  S7029C2 ::v6(){vfunc_called(this, "_ZN7S7029C22v6Ev");}
void  S7029C2 ::v7(){vfunc_called(this, "_ZN7S7029C22v7Ev");}
void  S7029C2 ::v8(){vfunc_called(this, "_ZN7S7029C22v8Ev");}
void  S7029C2 ::v9(){vfunc_called(this, "_ZN7S7029C22v9Ev");}
void  S7029C2 ::v10(){vfunc_called(this, "_ZN7S7029C23v10Ev");}
void  S7029C2 ::v11(){vfunc_called(this, "_ZN7S7029C23v11Ev");}
S7029C2 ::~S7029C2(){ note_dtor("S7029C2", this);} // tgen
S7029C2 ::S7029C2(){ note_ctor("S7029C2", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S7029C2C1Ev();
extern void _ZN7S7029C2D1Ev();
Name_Map name_map_S7029C2[] = {
  NSPAIR(_ZN7S7029C2C1Ev),
  NSPAIR(_ZN7S7029C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7029C2[];
extern void _ZN7S7029C22v6Ev();
extern void _ZN7S7029C22v7Ev();
extern void _ZN7S7029C22v8Ev();
extern void _ZN7S7029C22v9Ev();
extern void _ZN7S7029C23v10Ev();
extern void _ZN7S7029C23v11Ev();
static  VTBL_ENTRY vtc_S7029C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7029C2[0]),
  (VTBL_ENTRY)&_ZN7S7029C22v6Ev,
  (VTBL_ENTRY)&_ZN7S7029C22v7Ev,
  (VTBL_ENTRY)&_ZN7S7029C22v8Ev,
  (VTBL_ENTRY)&_ZN7S7029C22v9Ev,
  (VTBL_ENTRY)&_ZN7S7029C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7029C23v11Ev,
};
extern VTBL_ENTRY _ZTI7S7029C2[];
extern  VTBL_ENTRY _ZTV7S7029C2[];
Class_Descriptor cd_S7029C2 = {  "S7029C2", // class name
  0,0,//no base classes
  &(vtc_S7029C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7029C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7029C2),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7029C5_nt  {
  virtual void  v12(); // _ZN10S7029C5_nt3v12Ev
  virtual void  v13(); // _ZN10S7029C5_nt3v13Ev
  virtual void  v14(); // _ZN10S7029C5_nt3v14Ev
  ~S7029C5_nt(); // tgen
  S7029C5_nt(); // tgen
};
//SIG(-1 S7029C5_nt) C1{ v1 v2 v3}


void  S7029C5_nt ::v12(){vfunc_called(this, "_ZN10S7029C5_nt3v12Ev");}
void  S7029C5_nt ::v13(){vfunc_called(this, "_ZN10S7029C5_nt3v13Ev");}
void  S7029C5_nt ::v14(){vfunc_called(this, "_ZN10S7029C5_nt3v14Ev");}
S7029C5_nt ::~S7029C5_nt(){ note_dtor("S7029C5_nt", this);} // tgen
S7029C5_nt ::S7029C5_nt(){ note_ctor("S7029C5_nt", this);} // tgen

//skip512 S7029C5_nt

#else // __cplusplus

extern void _ZN10S7029C5_ntC1Ev();
extern void _ZN10S7029C5_ntD1Ev();
Name_Map name_map_S7029C5_nt[] = {
  NSPAIR(_ZN10S7029C5_ntC1Ev),
  NSPAIR(_ZN10S7029C5_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S7029C5_nt[];
extern void _ZN10S7029C5_nt3v12Ev();
extern void _ZN10S7029C5_nt3v13Ev();
extern void _ZN10S7029C5_nt3v14Ev();
static  VTBL_ENTRY vtc_S7029C5_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S7029C5_nt[0]),
  (VTBL_ENTRY)&_ZN10S7029C5_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S7029C5_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S7029C5_nt3v14Ev,
};
extern VTBL_ENTRY _ZTI10S7029C5_nt[];
VTBL_ENTRY *P__ZTI10S7029C5_nt = _ZTI10S7029C5_nt; 
extern  VTBL_ENTRY _ZTV10S7029C5_nt[];
Class_Descriptor cd_S7029C5_nt = {  "S7029C5_nt", // class name
  0,0,//no base classes
  &(vtc_S7029C5_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S7029C5_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S7029C5_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  S7029C4  : S7029C5_nt {
  virtual  ~S7029C4(); // _ZN7S7029C4D1Ev
  virtual void  v15(); // _ZN7S7029C43v15Ev
  virtual void  v16(); // _ZN7S7029C43v16Ev
  virtual void  v17(); // _ZN7S7029C43v17Ev
  S7029C4(); // tgen
};
//SIG(-1 S7029C4) C1{ BC2{ v4 v5 v6} vd v1 v2 v3}


 S7029C4 ::~S7029C4(){ note_dtor("S7029C4", this);}
void  S7029C4 ::v15(){vfunc_called(this, "_ZN7S7029C43v15Ev");}
void  S7029C4 ::v16(){vfunc_called(this, "_ZN7S7029C43v16Ev");}
void  S7029C4 ::v17(){vfunc_called(this, "_ZN7S7029C43v17Ev");}
S7029C4 ::S7029C4(){ note_ctor("S7029C4", this);} // tgen

static void Test_S7029C4()
{
  extern Class_Descriptor cd_S7029C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S7029C4, buf);
    S7029C4 *dp, &lv = *(dp=new (buf) S7029C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S7029C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7029C4)");
    check_base_class_offset(lv, (S7029C5_nt*), 0, "S7029C4");
    test_class_info(&lv, &cd_S7029C4);
    dp->~S7029C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7029C4(Test_S7029C4, "S7029C4", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S7029C4C1Ev();
extern void _ZN7S7029C4D1Ev();
Name_Map name_map_S7029C4[] = {
  NSPAIR(_ZN7S7029C4C1Ev),
  NSPAIR(_ZN7S7029C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7029C5_nt;
extern VTBL_ENTRY _ZTI10S7029C5_nt[];
extern  VTBL_ENTRY _ZTV10S7029C5_nt[];
static Base_Class bases_S7029C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7029C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7029C4[];
extern void _ZN10S7029C5_nt3v12Ev();
extern void _ZN10S7029C5_nt3v13Ev();
extern void _ZN10S7029C5_nt3v14Ev();
extern void _ZN7S7029C4D1Ev();
extern void _ZN7S7029C4D0Ev();
extern void _ZN7S7029C43v15Ev();
extern void _ZN7S7029C43v16Ev();
extern void _ZN7S7029C43v17Ev();
static  VTBL_ENTRY vtc_S7029C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7029C4[0]),
  (VTBL_ENTRY)&_ZN10S7029C5_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S7029C5_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S7029C5_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S7029C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7029C4D0Ev,
  (VTBL_ENTRY)&_ZN7S7029C43v15Ev,
  (VTBL_ENTRY)&_ZN7S7029C43v16Ev,
  (VTBL_ENTRY)&_ZN7S7029C43v17Ev,
};
extern VTBL_ENTRY _ZTI7S7029C4[];
extern  VTBL_ENTRY _ZTV7S7029C4[];
Class_Descriptor cd_S7029C4 = {  "S7029C4", // class name
  bases_S7029C4, 1,
  &(vtc_S7029C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7029C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7029C4),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7029C3  : virtual S7029C4 {
  int s7029c3f0;
  void *s7029c3f1[2];
  __tsi64 s7029c3f2;
  int s7029c3f3;
  virtual void  v18(); // _ZN7S7029C33v18Ev
  virtual void  v19(); // _ZN7S7029C33v19Ev
  virtual void  v20(); // _ZN7S7029C33v20Ev
  virtual void  v21(); // _ZN7S7029C33v21Ev
  virtual void  v22(); // _ZN7S7029C33v22Ev
  ~S7029C3(); // tgen
  S7029C3(); // tgen
};
//SIG(-1 S7029C3) C1{ VBC2{ BC3{ v6 v7 v8} vd v9 v10 v11} v1 v2 v3 v4 v5 Fi Fp[2] FL Fi}


void  S7029C3 ::v18(){vfunc_called(this, "_ZN7S7029C33v18Ev");}
void  S7029C3 ::v19(){vfunc_called(this, "_ZN7S7029C33v19Ev");}
void  S7029C3 ::v20(){vfunc_called(this, "_ZN7S7029C33v20Ev");}
void  S7029C3 ::v21(){vfunc_called(this, "_ZN7S7029C33v21Ev");}
void  S7029C3 ::v22(){vfunc_called(this, "_ZN7S7029C33v22Ev");}
S7029C3 ::~S7029C3(){ note_dtor("S7029C3", this);} // tgen
S7029C3 ::S7029C3(){ note_ctor("S7029C3", this);} // tgen

static void Test_S7029C3()
{
  extern Class_Descriptor cd_S7029C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S7029C3, buf);
    S7029C3 *dp, &lv = *(dp=new (buf) S7029C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S7029C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7029C3)");
    check_base_class_offset(lv, (S7029C5_nt*)(S7029C4*), 0, "S7029C3");
    check_base_class_offset(lv, (S7029C4*), 0, "S7029C3");
    check_field_offset(lv, s7029c3f0, ABISELECT(8,4), "S7029C3.s7029c3f0");
    check_field_offset(lv, s7029c3f1, ABISELECT(16,8), "S7029C3.s7029c3f1");
    check_field_offset(lv, s7029c3f2, ABISELECT(32,16), "S7029C3.s7029c3f2");
    check_field_offset(lv, s7029c3f3, ABISELECT(40,24), "S7029C3.s7029c3f3");
    test_class_info(&lv, &cd_S7029C3);
    dp->~S7029C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7029C3(Test_S7029C3, "S7029C3", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN7S7029C3C1Ev();
extern void _ZN7S7029C3D1Ev();
Name_Map name_map_S7029C3[] = {
  NSPAIR(_ZN7S7029C3C1Ev),
  NSPAIR(_ZN7S7029C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7029C5_nt;
extern VTBL_ENTRY _ZTI10S7029C5_nt[];
extern  VTBL_ENTRY _ZTV10S7029C5_nt[];
extern Class_Descriptor cd_S7029C4;
extern VTBL_ENTRY _ZTI7S7029C4[];
extern  VTBL_ENTRY _ZTV7S7029C4[];
static Base_Class bases_S7029C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7029C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S7029C4,    0, //bcp->offset
    -1, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7029C3[];
extern void _ZN10S7029C5_nt3v12Ev();
extern void _ZN10S7029C5_nt3v13Ev();
extern void _ZN10S7029C5_nt3v14Ev();
extern void _ZN7S7029C3D1Ev();
extern void _ZN7S7029C3D0Ev();
extern void _ZN7S7029C43v15Ev();
extern void _ZN7S7029C43v16Ev();
extern void _ZN7S7029C43v17Ev();
extern void _ZN7S7029C33v18Ev();
extern void _ZN7S7029C33v19Ev();
extern void _ZN7S7029C33v20Ev();
extern void _ZN7S7029C33v21Ev();
extern void _ZN7S7029C33v22Ev();
static  VTBL_ENTRY vtc_S7029C3[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7029C3[0]),
  (VTBL_ENTRY)&_ZN10S7029C5_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S7029C5_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S7029C5_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S7029C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7029C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7029C43v15Ev,
  (VTBL_ENTRY)&_ZN7S7029C43v16Ev,
  (VTBL_ENTRY)&_ZN7S7029C43v17Ev,
  (VTBL_ENTRY)&_ZN7S7029C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7029C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7029C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7029C33v21Ev,
  (VTBL_ENTRY)&_ZN7S7029C33v22Ev,
};
extern VTBL_ENTRY _ZTV7S7029C3[];
static  VTT_ENTRY vtt_S7029C3[] = {
  {&(_ZTV7S7029C3[10]),  10,23},
  {&(_ZTV7S7029C3[10]),  10,23},
};
extern VTBL_ENTRY _ZTI7S7029C3[];
extern  VTBL_ENTRY _ZTV7S7029C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7029C3[];
Class_Descriptor cd_S7029C3 = {  "S7029C3", // class name
  bases_S7029C3, 2,
  &(vtc_S7029C3[0]), // expected_vtbl_contents
  &(vtt_S7029C3[0]), // expected_vtt_contents
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI7S7029C3),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7029C3),23, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7029C3),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  S7029C1  : S7029C2 , S7029C3 {
  void *s7029c1f0[2];
  ::S7029C5_nt s7029c1f1;
  virtual  ~S7029C1(); // _ZN7S7029C1D2Ev
  virtual void  v1(); // _ZN7S7029C12v1Ev
  virtual void  v2(); // _ZN7S7029C12v2Ev
  virtual void  v3(); // _ZN7S7029C12v3Ev
  virtual void  v4(); // _ZN7S7029C12v4Ev
  virtual void  v5(); // _ZN7S7029C12v5Ev
  S7029C1(); // tgen
};
//SIG(1 S7029C1) C1{ BC2{ v6 v7 v8 v9 v10 v11} BC3{ VBC4{ BC5{ v12 v13 v14} vd v15 v16 v17} v18 v19 v20 v21 v22 Fi Fp[2] FL Fi} vd v1 v2 v3 v4 v5 Fp[2] FC5}


 S7029C1 ::~S7029C1(){ note_dtor("S7029C1", this);}
void  S7029C1 ::v1(){vfunc_called(this, "_ZN7S7029C12v1Ev");}
void  S7029C1 ::v2(){vfunc_called(this, "_ZN7S7029C12v2Ev");}
void  S7029C1 ::v3(){vfunc_called(this, "_ZN7S7029C12v3Ev");}
void  S7029C1 ::v4(){vfunc_called(this, "_ZN7S7029C12v4Ev");}
void  S7029C1 ::v5(){vfunc_called(this, "_ZN7S7029C12v5Ev");}
S7029C1 ::S7029C1(){ note_ctor("S7029C1", this);} // tgen

static void Test_S7029C1()
{
  extern Class_Descriptor cd_S7029C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,12)];
    init_test(&cd_S7029C1, buf);
    S7029C1 *dp, &lv = *(dp=new (buf) S7029C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,44), "sizeof(S7029C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7029C1)");
    check_base_class_offset(lv, (S7029C2*), 0, "S7029C1");
    check_base_class_offset(lv, (S7029C5_nt*)(S7029C4*), ABISELECT(8,4), "S7029C1");
    check_base_class_offset(lv, (S7029C4*)(S7029C3*), ABISELECT(8,4), "S7029C1");
    check_base_class_offset(lv, (S7029C3*), ABISELECT(8,4), "S7029C1");
    check_field_offset(lv, s7029c1f0, ABISELECT(56,32), "S7029C1.s7029c1f0");
    check_field_offset(lv, s7029c1f1, ABISELECT(72,40), "S7029C1.s7029c1f1");
    test_class_info(&lv, &cd_S7029C1);
    dp->~S7029C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7029C1(Test_S7029C1, "S7029C1", ABISELECT(80,44));

#else // __cplusplus

extern void _ZN7S7029C1C1Ev();
extern void _ZN7S7029C1D2Ev();
Name_Map name_map_S7029C1[] = {
  NSPAIR(_ZN7S7029C1C1Ev),
  NSPAIR(_ZN7S7029C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7029C2;
extern VTBL_ENTRY _ZTI7S7029C2[];
extern  VTBL_ENTRY _ZTV7S7029C2[];
extern Class_Descriptor cd_S7029C5_nt;
extern VTBL_ENTRY _ZTI10S7029C5_nt[];
extern  VTBL_ENTRY _ZTV10S7029C5_nt[];
extern Class_Descriptor cd_S7029C4;
extern VTBL_ENTRY _ZTI7S7029C4[];
extern  VTBL_ENTRY _ZTV7S7029C4[];
extern Class_Descriptor cd_S7029C3;
extern VTBL_ENTRY _ZTI7S7029C3[];
extern  VTBL_ENTRY _ZTV7S7029C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7029C3[];
static Base_Class bases_S7029C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7029C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7029C5_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7029C4,    ABISELECT(8,4), //bcp->offset
    -1, //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
    3, //immediately_derived
  0, 1},
  {&cd_S7029C3,    ABISELECT(8,4), //bcp->offset
    16, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7029C1[];
extern void _ZN7S7029C22v6Ev();
extern void _ZN7S7029C22v7Ev();
extern void _ZN7S7029C22v8Ev();
extern void _ZN7S7029C22v9Ev();
extern void _ZN7S7029C23v10Ev();
extern void _ZN7S7029C23v11Ev();
extern void _ZN7S7029C1D1Ev();
extern void _ZN7S7029C1D0Ev();
extern void _ZN7S7029C12v1Ev();
extern void _ZN7S7029C12v2Ev();
extern void _ZN7S7029C12v3Ev();
extern void _ZN7S7029C12v4Ev();
extern void _ZN7S7029C12v5Ev();
extern void _ZN10S7029C5_nt3v12Ev();
extern void _ZN10S7029C5_nt3v13Ev();
extern void _ZN10S7029C5_nt3v14Ev();
extern void ABISELECT(_ZTv0_n48_N7S7029C1D1Ev,_ZTv0_n24_N7S7029C1D1Ev)();
extern void ABISELECT(_ZThn8_N7S7029C1D1Ev,_ZThn4_N7S7029C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7029C1D0Ev,_ZTv0_n24_N7S7029C1D0Ev)();
extern void ABISELECT(_ZThn8_N7S7029C1D0Ev,_ZThn4_N7S7029C1D0Ev)() __attribute__((weak));
extern void _ZN7S7029C43v15Ev();
extern void _ZN7S7029C43v16Ev();
extern void _ZN7S7029C43v17Ev();
extern void _ZN7S7029C33v18Ev();
extern void _ZN7S7029C33v19Ev();
extern void _ZN7S7029C33v20Ev();
extern void _ZN7S7029C33v21Ev();
extern void _ZN7S7029C33v22Ev();
static  VTBL_ENTRY vtc_S7029C1[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7029C1[0]),
  (VTBL_ENTRY)&_ZN7S7029C22v6Ev,
  (VTBL_ENTRY)&_ZN7S7029C22v7Ev,
  (VTBL_ENTRY)&_ZN7S7029C22v8Ev,
  (VTBL_ENTRY)&_ZN7S7029C22v9Ev,
  (VTBL_ENTRY)&_ZN7S7029C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7029C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7029C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7029C1D0Ev,
  (VTBL_ENTRY)&_ZN7S7029C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7029C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7029C12v3Ev,
  (VTBL_ENTRY)&_ZN7S7029C12v4Ev,
  (VTBL_ENTRY)&_ZN7S7029C12v5Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7029C1[0]),
  (VTBL_ENTRY)&_ZN10S7029C5_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S7029C5_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S7029C5_nt3v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7029C1D1Ev,_ZTv0_n24_N7S7029C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7029C1D0Ev,_ZTv0_n24_N7S7029C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7029C43v15Ev,
  (VTBL_ENTRY)&_ZN7S7029C43v16Ev,
  (VTBL_ENTRY)&_ZN7S7029C43v17Ev,
  (VTBL_ENTRY)&_ZN7S7029C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7029C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7029C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7029C33v21Ev,
  (VTBL_ENTRY)&_ZN7S7029C33v22Ev,
};
extern VTBL_ENTRY _ZTV7S7029C1[];
extern void _ZN10S7029C5_nt3v12Ev();
extern void _ZN10S7029C5_nt3v13Ev();
extern void _ZN10S7029C5_nt3v14Ev();
extern void ABISELECT(_ZTv0_n48_N7S7029C3D1Ev,_ZTv0_n24_N7S7029C3D1Ev)();
extern void _ZN7S7029C3D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7029C3D0Ev,_ZTv0_n24_N7S7029C3D0Ev)();
extern void _ZN7S7029C3D0Ev() __attribute__((weak));
extern void _ZN7S7029C43v15Ev();
extern void _ZN7S7029C43v16Ev();
extern void _ZN7S7029C43v17Ev();
extern void _ZN7S7029C33v18Ev();
extern void _ZN7S7029C33v19Ev();
extern void _ZN7S7029C33v20Ev();
extern void _ZN7S7029C33v21Ev();
extern void _ZN7S7029C33v22Ev();
static  VTBL_ENTRY _tg__ZTV7S7029C3__7S7029C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7029C3[0]),
  (VTBL_ENTRY)&_ZN10S7029C5_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S7029C5_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S7029C5_nt3v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7029C3D1Ev,_ZTv0_n24_N7S7029C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7029C3D0Ev,_ZTv0_n24_N7S7029C3D0Ev),
  (VTBL_ENTRY)&_ZN7S7029C43v15Ev,
  (VTBL_ENTRY)&_ZN7S7029C43v16Ev,
  (VTBL_ENTRY)&_ZN7S7029C43v17Ev,
  (VTBL_ENTRY)&_ZN7S7029C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7029C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7029C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7029C33v21Ev,
  (VTBL_ENTRY)&_ZN7S7029C33v22Ev,
};
static  VTT_ENTRY vtt_S7029C1[] = {
  {&(_ZTV7S7029C1[3]),  3,39},
  {&(_tg__ZTV7S7029C3__7S7029C1[10]),  10,23},
  {&(_tg__ZTV7S7029C3__7S7029C1[10]),  10,23},
  {&(_ZTV7S7029C1[26]),  26,39},
  {&(_ZTV7S7029C1[26]),  26,39},
};
extern VTBL_ENTRY _ZTI7S7029C1[];
extern  VTBL_ENTRY _ZTV7S7029C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7029C1[];
static VTBL_ENTRY alt_thunk_names48[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7029C3D0Ev,_ZTv0_n24_N7S7029C3D0Ev), // 
  (VTBL_ENTRY)_ZN7S7029C3D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7029C3D1Ev,_ZTv0_n24_N7S7029C3D1Ev), // 
  (VTBL_ENTRY)_ZN7S7029C3D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7029C1D0Ev,_ZTv0_n24_N7S7029C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7029C1D0Ev,_ZThn4_N7S7029C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7029C1D1Ev,_ZTv0_n24_N7S7029C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7029C1D1Ev,_ZThn4_N7S7029C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7029C1 = {  "S7029C1", // class name
  bases_S7029C1, 4,
  &(vtc_S7029C1[0]), // expected_vtbl_contents
  &(vtt_S7029C1[0]), // expected_vtt_contents
  ABISELECT(80,44), // object size
  NSPAIRA(_ZTI7S7029C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7029C1),39, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7029C1),5, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names48,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4761C3  {
  ::S2120C20_nt s4761c3f0;
  int s4761c3f1[2];
  char s4761c3f2;
  virtual  ~S4761C3(); // _ZN7S4761C3D1Ev
  virtual void  v3(); // _ZN7S4761C32v3Ev
  virtual void  v4(); // _ZN7S4761C32v4Ev
  virtual void  v5(); // _ZN7S4761C32v5Ev
  S4761C3(); // tgen
};
//SIG(-1 S4761C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4761C3 ::~S4761C3(){ note_dtor("S4761C3", this);}
void  S4761C3 ::v3(){vfunc_called(this, "_ZN7S4761C32v3Ev");}
void  S4761C3 ::v4(){vfunc_called(this, "_ZN7S4761C32v4Ev");}
void  S4761C3 ::v5(){vfunc_called(this, "_ZN7S4761C32v5Ev");}
S4761C3 ::S4761C3(){ note_ctor("S4761C3", this);} // tgen

static void Test_S4761C3()
{
  extern Class_Descriptor cd_S4761C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4761C3, buf);
    S4761C3 *dp, &lv = *(dp=new (buf) S4761C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4761C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4761C3)");
    check_field_offset(lv, s4761c3f0, ABISELECT(8,4), "S4761C3.s4761c3f0");
    check_field_offset(lv, s4761c3f1, ABISELECT(24,16), "S4761C3.s4761c3f1");
    check_field_offset(lv, s4761c3f2, ABISELECT(32,24), "S4761C3.s4761c3f2");
    test_class_info(&lv, &cd_S4761C3);
    dp->~S4761C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4761C3(Test_S4761C3, "S4761C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4761C3C1Ev();
extern void _ZN7S4761C3D1Ev();
Name_Map name_map_S4761C3[] = {
  NSPAIR(_ZN7S4761C3C1Ev),
  NSPAIR(_ZN7S4761C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4761C3[];
extern void _ZN7S4761C3D1Ev();
extern void _ZN7S4761C3D0Ev();
extern void _ZN7S4761C32v3Ev();
extern void _ZN7S4761C32v4Ev();
extern void _ZN7S4761C32v5Ev();
static  VTBL_ENTRY vtc_S4761C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4761C3[0]),
  (VTBL_ENTRY)&_ZN7S4761C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4761C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4761C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4761C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4761C32v5Ev,
};
extern VTBL_ENTRY _ZTI7S4761C3[];
extern  VTBL_ENTRY _ZTV7S4761C3[];
Class_Descriptor cd_S4761C3 = {  "S4761C3", // class name
  0,0,//no base classes
  &(vtc_S4761C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4761C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4761C3),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  S4761C2  : S4761C3 {
  void *s4761c2f0;
  virtual void  v6(); // _ZN7S4761C22v6Ev
  virtual void  v7(); // _ZN7S4761C22v7Ev
  ~S4761C2(); // tgen
  S4761C2(); // tgen
};
//SIG(-1 S4761C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S4761C2 ::v6(){vfunc_called(this, "_ZN7S4761C22v6Ev");}
void  S4761C2 ::v7(){vfunc_called(this, "_ZN7S4761C22v7Ev");}
S4761C2 ::~S4761C2(){ note_dtor("S4761C2", this);} // tgen
S4761C2 ::S4761C2(){ note_ctor("S4761C2", this);} // tgen

static void Test_S4761C2()
{
  extern Class_Descriptor cd_S4761C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S4761C2, buf);
    S4761C2 *dp, &lv = *(dp=new (buf) S4761C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S4761C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4761C2)");
    check_base_class_offset(lv, (S4761C3*), 0, "S4761C2");
    check_field_offset(lv, s4761c2f0, ABISELECT(40,28), "S4761C2.s4761c2f0");
    test_class_info(&lv, &cd_S4761C2);
    dp->~S4761C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4761C2(Test_S4761C2, "S4761C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S4761C2C1Ev();
extern void _ZN7S4761C2D1Ev();
Name_Map name_map_S4761C2[] = {
  NSPAIR(_ZN7S4761C2C1Ev),
  NSPAIR(_ZN7S4761C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4761C3;
extern VTBL_ENTRY _ZTI7S4761C3[];
extern  VTBL_ENTRY _ZTV7S4761C3[];
static Base_Class bases_S4761C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4761C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4761C2[];
extern void _ZN7S4761C2D1Ev();
extern void _ZN7S4761C2D0Ev();
extern void _ZN7S4761C32v3Ev();
extern void _ZN7S4761C32v4Ev();
extern void _ZN7S4761C32v5Ev();
extern void _ZN7S4761C22v6Ev();
extern void _ZN7S4761C22v7Ev();
static  VTBL_ENTRY vtc_S4761C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4761C2[0]),
  (VTBL_ENTRY)&_ZN7S4761C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4761C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4761C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4761C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4761C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4761C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4761C22v7Ev,
};
extern VTBL_ENTRY _ZTI7S4761C2[];
extern  VTBL_ENTRY _ZTV7S4761C2[];
Class_Descriptor cd_S4761C2 = {  "S4761C2", // class name
  bases_S4761C2, 1,
  &(vtc_S4761C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S4761C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4761C2),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  S4761C8_nt  {
  ::S5078C10_nt s4761c8f0;
  long s4761c8f1[3];
  int s4761c8f2[2];
  ::S5062C11_nt s4761c8f3;
};
//SIG(-1 S4761C8_nt) C1{ FC2{ FC3{ Fc[20]} Fc[16]} Fl[3] Fi[2] FC4{ Fi[4]}}



//skip512 S4761C8_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4761C1  : S4761C2 {
  ::S5078C10_nt s4761c1f0;
  int s4761c1f1;
  ::S4761C8_nt s4761c1f2;
  int s4761c1f3;
  virtual  ~S4761C1(); // _ZN7S4761C1D1Ev
  virtual void  v1(); // _ZN7S4761C12v1Ev
  virtual void  v2(); // _ZN7S4761C12v2Ev
  S4761C1(); // tgen
};
//SIG(1 S4761C1) C1{ BC2{ BC3{ vd v3 v4 v5 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v6 v7 Fp} vd v1 v2 FC6{ FC7{ Fc[20]} Fc[16]} Fi FC8{ FC6 Fl[3] Fi[2] FC9{ Fi[4]}} Fi}


 S4761C1 ::~S4761C1(){ note_dtor("S4761C1", this);}
void  S4761C1 ::v1(){vfunc_called(this, "_ZN7S4761C12v1Ev");}
void  S4761C1 ::v2(){vfunc_called(this, "_ZN7S4761C12v2Ev");}
S4761C1 ::S4761C1(){ note_ctor("S4761C1", this);} // tgen

static void Test_S4761C1()
{
  extern Class_Descriptor cd_S4761C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(24,38)];
    init_test(&cd_S4761C1, buf);
    S4761C1 *dp, &lv = *(dp=new (buf) S4761C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(184,148), "sizeof(S4761C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4761C1)");
    check_base_class_offset(lv, (S4761C3*)(S4761C2*), 0, "S4761C1");
    check_base_class_offset(lv, (S4761C2*), 0, "S4761C1");
    check_field_offset(lv, s4761c1f0, ABISELECT(48,32), "S4761C1.s4761c1f0");
    check_field_offset(lv, s4761c1f1, ABISELECT(84,68), "S4761C1.s4761c1f1");
    check_field_offset(lv, s4761c1f2, ABISELECT(88,72), "S4761C1.s4761c1f2");
    check_field_offset(lv, s4761c1f3, ABISELECT(176,144), "S4761C1.s4761c1f3");
    test_class_info(&lv, &cd_S4761C1);
    dp->~S4761C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4761C1(Test_S4761C1, "S4761C1", ABISELECT(184,148));

#else // __cplusplus

extern void _ZN7S4761C1C1Ev();
extern void _ZN7S4761C1D1Ev();
Name_Map name_map_S4761C1[] = {
  NSPAIR(_ZN7S4761C1C1Ev),
  NSPAIR(_ZN7S4761C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4761C3;
extern VTBL_ENTRY _ZTI7S4761C3[];
extern  VTBL_ENTRY _ZTV7S4761C3[];
extern Class_Descriptor cd_S4761C2;
extern VTBL_ENTRY _ZTI7S4761C2[];
extern  VTBL_ENTRY _ZTV7S4761C2[];
static Base_Class bases_S4761C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4761C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4761C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S4761C1[];
extern void _ZN7S4761C1D1Ev();
extern void _ZN7S4761C1D0Ev();
extern void _ZN7S4761C32v3Ev();
extern void _ZN7S4761C32v4Ev();
extern void _ZN7S4761C32v5Ev();
extern void _ZN7S4761C22v6Ev();
extern void _ZN7S4761C22v7Ev();
extern void _ZN7S4761C12v1Ev();
extern void _ZN7S4761C12v2Ev();
static  VTBL_ENTRY vtc_S4761C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4761C1[0]),
  (VTBL_ENTRY)&_ZN7S4761C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4761C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4761C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4761C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4761C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4761C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4761C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4761C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4761C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S4761C1[];
extern  VTBL_ENTRY _ZTV7S4761C1[];
Class_Descriptor cd_S4761C1 = {  "S4761C1", // class name
  bases_S4761C1, 2,
  &(vtc_S4761C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(184,148), // object size
  NSPAIRA(_ZTI7S4761C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4761C1),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21830C2  {
  void *s21830c2f0[14];
};
//SIG(-1 S21830C2) C1{ Fp[14]}



static void Test_S21830C2()
{
  {
    init_simple_test("S21830C2");
    S21830C2 lv;
    check2(sizeof(lv), ABISELECT(112,56), "sizeof(S21830C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21830C2)");
    check_field_offset(lv, s21830c2f0, 0, "S21830C2.s21830c2f0");
  }
}
static Arrange_To_Call_Me vS21830C2(Test_S21830C2, "S21830C2", ABISELECT(112,56));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21830C3  {
  int s21830c3f0[2];
  void *s21830c3f1[3];
  int s21830c3f2;
  void *s21830c3f3;
  int s21830c3f4[4];
  void  mf21830c3(); // _ZN8S21830C39mf21830c3Ev
};
//SIG(-1 S21830C3) C1{ m Fi[2] Fp[3] Fi Fp Fi[4]}


void  S21830C3 ::mf21830c3(){}

static void Test_S21830C3()
{
  {
    init_simple_test("S21830C3");
    S21830C3 lv;
    check2(sizeof(lv), ABISELECT(64,44), "sizeof(S21830C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21830C3)");
    check_field_offset(lv, s21830c3f0, 0, "S21830C3.s21830c3f0");
    check_field_offset(lv, s21830c3f1, 8, "S21830C3.s21830c3f1");
    check_field_offset(lv, s21830c3f2, ABISELECT(32,20), "S21830C3.s21830c3f2");
    check_field_offset(lv, s21830c3f3, ABISELECT(40,24), "S21830C3.s21830c3f3");
    check_field_offset(lv, s21830c3f4, ABISELECT(48,28), "S21830C3.s21830c3f4");
  }
}
static Arrange_To_Call_Me vS21830C3(Test_S21830C3, "S21830C3", ABISELECT(64,44));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21830C5  {
  void *s21830c5f0;
  int s21830c5f1;
  void *s21830c5f2;
  __tsi64 s21830c5f3[2];
  void *s21830c5f4;
  void  mf21830c5(); // _ZN8S21830C59mf21830c5Ev
};
//SIG(-1 S21830C5) C1{ m Fp Fi Fp FL[2] Fp}


void  S21830C5 ::mf21830c5(){}

static void Test_S21830C5()
{
  {
    init_simple_test("S21830C5");
    S21830C5 lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S21830C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21830C5)");
    check_field_offset(lv, s21830c5f0, 0, "S21830C5.s21830c5f0");
    check_field_offset(lv, s21830c5f1, ABISELECT(8,4), "S21830C5.s21830c5f1");
    check_field_offset(lv, s21830c5f2, ABISELECT(16,8), "S21830C5.s21830c5f2");
    check_field_offset(lv, s21830c5f3, ABISELECT(24,12), "S21830C5.s21830c5f3");
    check_field_offset(lv, s21830c5f4, ABISELECT(40,28), "S21830C5.s21830c5f4");
  }
}
static Arrange_To_Call_Me vS21830C5(Test_S21830C5, "S21830C5", ABISELECT(48,32));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21830C1  {
  void *s21830c1f0[3];
  ::S21830C2 s21830c1f1;
  void *s21830c1f2[2];
  __tsi64 s21830c1f3[3];
  long s21830c1f4[4];
  ::S21830C3 s21830c1f5;
  ::S21830C3 s21830c1f6;
  int s21830c1f7;
  ::S5061C9_nt s21830c1f8;
  int s21830c1f9[2];
  ::S21830C5 s21830c1f10;
  int s21830c1f11[2];
  void  mf21830c1(); // _ZN8S21830C19mf21830c1Ev
  virtual  ~S21830C1(); // _ZN8S21830C1D1Ev
  S21830C1(); // tgen
};
//SIG(1 S21830C1) C1{ vd m Fp[3] FC2{ Fp[14]} Fp[2] FL[3] Fl[4] FC3{ m Fi[2] Fp[3] Fi Fp Fi[4]} FC3 Fi FC4{ Fl[4]} Fi[2] FC5{ m Fp Fi Fp FL[2] Fp} Fi[2]}


void  S21830C1 ::mf21830c1(){}
 S21830C1 ::~S21830C1(){ note_dtor("S21830C1", this);}
S21830C1 ::S21830C1(){ note_ctor("S21830C1", this);} // tgen

static void Test_S21830C1()
{
  extern Class_Descriptor cd_S21830C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(57,70)];
    init_test(&cd_S21830C1, buf);
    S21830C1 *dp, &lv = *(dp=new (buf) S21830C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(448,276), "sizeof(S21830C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21830C1)");
    check_field_offset(lv, s21830c1f0, ABISELECT(8,4), "S21830C1.s21830c1f0");
    check_field_offset(lv, s21830c1f1, ABISELECT(32,16), "S21830C1.s21830c1f1");
    check_field_offset(lv, s21830c1f2, ABISELECT(144,72), "S21830C1.s21830c1f2");
    check_field_offset(lv, s21830c1f3, ABISELECT(160,80), "S21830C1.s21830c1f3");
    check_field_offset(lv, s21830c1f4, ABISELECT(184,104), "S21830C1.s21830c1f4");
    check_field_offset(lv, s21830c1f5, ABISELECT(216,120), "S21830C1.s21830c1f5");
    check_field_offset(lv, s21830c1f6, ABISELECT(280,164), "S21830C1.s21830c1f6");
    check_field_offset(lv, s21830c1f7, ABISELECT(344,208), "S21830C1.s21830c1f7");
    check_field_offset(lv, s21830c1f8, ABISELECT(352,212), "S21830C1.s21830c1f8");
    check_field_offset(lv, s21830c1f9, ABISELECT(384,228), "S21830C1.s21830c1f9");
    check_field_offset(lv, s21830c1f10, ABISELECT(392,236), "S21830C1.s21830c1f10");
    check_field_offset(lv, s21830c1f11, ABISELECT(440,268), "S21830C1.s21830c1f11");
    test_class_info(&lv, &cd_S21830C1);
    dp->~S21830C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21830C1(Test_S21830C1, "S21830C1", ABISELECT(448,276));

#else // __cplusplus

extern void _ZN8S21830C1C1Ev();
extern void _ZN8S21830C1D1Ev();
Name_Map name_map_S21830C1[] = {
  NSPAIR(_ZN8S21830C1C1Ev),
  NSPAIR(_ZN8S21830C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21830C1[];
extern void _ZN8S21830C1D1Ev();
extern void _ZN8S21830C1D0Ev();
static  VTBL_ENTRY vtc_S21830C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21830C1[0]),
  (VTBL_ENTRY)&_ZN8S21830C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21830C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21830C1[];
extern  VTBL_ENTRY _ZTV8S21830C1[];
Class_Descriptor cd_S21830C1 = {  "S21830C1", // class name
  0,0,//no base classes
  &(vtc_S21830C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(448,276), // object size
  NSPAIRA(_ZTI8S21830C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21830C1),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  S21831C1  {
  void *s21831c1f0[3];
  ::S21830C2 s21831c1f1;
  void *s21831c1f2[2];
  __tsi64 s21831c1f3[3];
  long s21831c1f4[4];
  ::S21830C3 s21831c1f5;
  ::S21830C3 s21831c1f6;
  int s21831c1f7;
  ::S5062C9_nt s21831c1f8;
  int s21831c1f9[2];
  ::S21830C5 s21831c1f10;
  int s21831c1f11[2];
  void  mf21831c1(); // _ZN8S21831C19mf21831c1Ev
  virtual  ~S21831C1(); // _ZN8S21831C1D1Ev
  S21831C1(); // tgen
};
//SIG(1 S21831C1) C1{ vd m Fp[3] FC2{ Fp[14]} Fp[2] FL[3] Fl[4] FC3{ m Fi[2] Fp[3] Fi Fp Fi[4]} FC3 Fi FC4{ FL[4]} Fi[2] FC5{ m Fp Fi Fp FL[2] Fp} Fi[2]}


void  S21831C1 ::mf21831c1(){}
 S21831C1 ::~S21831C1(){ note_dtor("S21831C1", this);}
S21831C1 ::S21831C1(){ note_ctor("S21831C1", this);} // tgen

static void Test_S21831C1()
{
  extern Class_Descriptor cd_S21831C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(57,74)];
    init_test(&cd_S21831C1, buf);
    S21831C1 *dp, &lv = *(dp=new (buf) S21831C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(448,292), "sizeof(S21831C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21831C1)");
    check_field_offset(lv, s21831c1f0, ABISELECT(8,4), "S21831C1.s21831c1f0");
    check_field_offset(lv, s21831c1f1, ABISELECT(32,16), "S21831C1.s21831c1f1");
    check_field_offset(lv, s21831c1f2, ABISELECT(144,72), "S21831C1.s21831c1f2");
    check_field_offset(lv, s21831c1f3, ABISELECT(160,80), "S21831C1.s21831c1f3");
    check_field_offset(lv, s21831c1f4, ABISELECT(184,104), "S21831C1.s21831c1f4");
    check_field_offset(lv, s21831c1f5, ABISELECT(216,120), "S21831C1.s21831c1f5");
    check_field_offset(lv, s21831c1f6, ABISELECT(280,164), "S21831C1.s21831c1f6");
    check_field_offset(lv, s21831c1f7, ABISELECT(344,208), "S21831C1.s21831c1f7");
    check_field_offset(lv, s21831c1f8, ABISELECT(352,212), "S21831C1.s21831c1f8");
    check_field_offset(lv, s21831c1f9, ABISELECT(384,244), "S21831C1.s21831c1f9");
    check_field_offset(lv, s21831c1f10, ABISELECT(392,252), "S21831C1.s21831c1f10");
    check_field_offset(lv, s21831c1f11, ABISELECT(440,284), "S21831C1.s21831c1f11");
    test_class_info(&lv, &cd_S21831C1);
    dp->~S21831C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21831C1(Test_S21831C1, "S21831C1", ABISELECT(448,292));

#else // __cplusplus

extern void _ZN8S21831C1C1Ev();
extern void _ZN8S21831C1D1Ev();
Name_Map name_map_S21831C1[] = {
  NSPAIR(_ZN8S21831C1C1Ev),
  NSPAIR(_ZN8S21831C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21831C1[];
extern void _ZN8S21831C1D1Ev();
extern void _ZN8S21831C1D0Ev();
static  VTBL_ENTRY vtc_S21831C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21831C1[0]),
  (VTBL_ENTRY)&_ZN8S21831C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21831C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21831C1[];
extern  VTBL_ENTRY _ZTV8S21831C1[];
Class_Descriptor cd_S21831C1 = {  "S21831C1", // class name
  0,0,//no base classes
  &(vtc_S21831C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(448,292), // object size
  NSPAIRA(_ZTI8S21831C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21831C1),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  S5247C3  {
  ::S3352C4_nt s5247c3f0;
  char s5247c3f1;
  virtual  ~S5247C3(); // _ZN7S5247C3D1Ev
  virtual void  v5(); // _ZN7S5247C32v5Ev
  virtual void  v6(); // _ZN7S5247C32v6Ev
  virtual void  v7(); // _ZN7S5247C32v7Ev
  virtual void  v8(); // _ZN7S5247C32v8Ev
  virtual void  v9(); // _ZN7S5247C32v9Ev
  virtual void  v10(); // _ZN7S5247C33v10Ev
  virtual void  v11(); // _ZN7S5247C33v11Ev
  S5247C3(); // tgen
};
//SIG(-1 S5247C3) C1{ vd v1 v2 v3 v4 v5 v6 v7 FC2{ m Fi[2]} Fc}


 S5247C3 ::~S5247C3(){ note_dtor("S5247C3", this);}
void  S5247C3 ::v5(){vfunc_called(this, "_ZN7S5247C32v5Ev");}
void  S5247C3 ::v6(){vfunc_called(this, "_ZN7S5247C32v6Ev");}
void  S5247C3 ::v7(){vfunc_called(this, "_ZN7S5247C32v7Ev");}
void  S5247C3 ::v8(){vfunc_called(this, "_ZN7S5247C32v8Ev");}
void  S5247C3 ::v9(){vfunc_called(this, "_ZN7S5247C32v9Ev");}
void  S5247C3 ::v10(){vfunc_called(this, "_ZN7S5247C33v10Ev");}
void  S5247C3 ::v11(){vfunc_called(this, "_ZN7S5247C33v11Ev");}
S5247C3 ::S5247C3(){ note_ctor("S5247C3", this);} // tgen

static void Test_S5247C3()
{
  extern Class_Descriptor cd_S5247C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S5247C3, buf);
    S5247C3 *dp, &lv = *(dp=new (buf) S5247C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S5247C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5247C3)");
    check_field_offset(lv, s5247c3f0, ABISELECT(8,4), "S5247C3.s5247c3f0");
    check_field_offset(lv, s5247c3f1, ABISELECT(16,12), "S5247C3.s5247c3f1");
    test_class_info(&lv, &cd_S5247C3);
    dp->~S5247C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5247C3(Test_S5247C3, "S5247C3", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S5247C3C1Ev();
extern void _ZN7S5247C3D1Ev();
Name_Map name_map_S5247C3[] = {
  NSPAIR(_ZN7S5247C3C1Ev),
  NSPAIR(_ZN7S5247C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5247C3[];
extern void _ZN7S5247C3D1Ev();
extern void _ZN7S5247C3D0Ev();
extern void _ZN7S5247C32v5Ev();
extern void _ZN7S5247C32v6Ev();
extern void _ZN7S5247C32v7Ev();
extern void _ZN7S5247C32v8Ev();
extern void _ZN7S5247C32v9Ev();
extern void _ZN7S5247C33v10Ev();
extern void _ZN7S5247C33v11Ev();
static  VTBL_ENTRY vtc_S5247C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5247C3[0]),
  (VTBL_ENTRY)&_ZN7S5247C3D1Ev,
  (VTBL_ENTRY)&_ZN7S5247C3D0Ev,
  (VTBL_ENTRY)&_ZN7S5247C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5247C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5247C32v7Ev,
  (VTBL_ENTRY)&_ZN7S5247C32v8Ev,
  (VTBL_ENTRY)&_ZN7S5247C32v9Ev,
  (VTBL_ENTRY)&_ZN7S5247C33v10Ev,
  (VTBL_ENTRY)&_ZN7S5247C33v11Ev,
};
extern VTBL_ENTRY _ZTI7S5247C3[];
extern  VTBL_ENTRY _ZTV7S5247C3[];
Class_Descriptor cd_S5247C3 = {  "S5247C3", // class name
  0,0,//no base classes
  &(vtc_S5247C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S5247C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5247C3),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5247C2  : S5247C3 {
  ::S3352C4_nt s5247c2f0;
  ::S885C14_nt s5247c2f1;
  virtual  ~S5247C2(); // _ZN7S5247C2D1Ev
  virtual void  v12(); // _ZN7S5247C23v12Ev
  virtual void  v13(); // _ZN7S5247C23v13Ev
  virtual void  v14(); // _ZN7S5247C23v14Ev
  S5247C2(); // tgen
};
//SIG(-1 S5247C2) C1{ BC2{ vd v4 v5 v6 v7 v8 v9 v10 FC3{ m Fi[2]} Fc} vd v1 v2 v3 FC3 FC4{ m Fi[4]}}


 S5247C2 ::~S5247C2(){ note_dtor("S5247C2", this);}
void  S5247C2 ::v12(){vfunc_called(this, "_ZN7S5247C23v12Ev");}
void  S5247C2 ::v13(){vfunc_called(this, "_ZN7S5247C23v13Ev");}
void  S5247C2 ::v14(){vfunc_called(this, "_ZN7S5247C23v14Ev");}
S5247C2 ::S5247C2(){ note_ctor("S5247C2", this);} // tgen

static void Test_S5247C2()
{
  extern Class_Descriptor cd_S5247C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,11)];
    init_test(&cd_S5247C2, buf);
    S5247C2 *dp, &lv = *(dp=new (buf) S5247C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,40), "sizeof(S5247C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5247C2)");
    check_base_class_offset(lv, (S5247C3*), 0, "S5247C2");
    check_field_offset(lv, s5247c2f0, ABISELECT(20,16), "S5247C2.s5247c2f0");
    check_field_offset(lv, s5247c2f1, ABISELECT(28,24), "S5247C2.s5247c2f1");
    test_class_info(&lv, &cd_S5247C2);
    dp->~S5247C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5247C2(Test_S5247C2, "S5247C2", ABISELECT(48,40));

#else // __cplusplus

extern void _ZN7S5247C2C1Ev();
extern void _ZN7S5247C2D1Ev();
Name_Map name_map_S5247C2[] = {
  NSPAIR(_ZN7S5247C2C1Ev),
  NSPAIR(_ZN7S5247C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5247C3;
extern VTBL_ENTRY _ZTI7S5247C3[];
extern  VTBL_ENTRY _ZTV7S5247C3[];
static Base_Class bases_S5247C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5247C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5247C2[];
extern void _ZN7S5247C2D1Ev();
extern void _ZN7S5247C2D0Ev();
extern void _ZN7S5247C32v5Ev();
extern void _ZN7S5247C32v6Ev();
extern void _ZN7S5247C32v7Ev();
extern void _ZN7S5247C32v8Ev();
extern void _ZN7S5247C32v9Ev();
extern void _ZN7S5247C33v10Ev();
extern void _ZN7S5247C33v11Ev();
extern void _ZN7S5247C23v12Ev();
extern void _ZN7S5247C23v13Ev();
extern void _ZN7S5247C23v14Ev();
static  VTBL_ENTRY vtc_S5247C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5247C2[0]),
  (VTBL_ENTRY)&_ZN7S5247C2D1Ev,
  (VTBL_ENTRY)&_ZN7S5247C2D0Ev,
  (VTBL_ENTRY)&_ZN7S5247C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5247C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5247C32v7Ev,
  (VTBL_ENTRY)&_ZN7S5247C32v8Ev,
  (VTBL_ENTRY)&_ZN7S5247C32v9Ev,
  (VTBL_ENTRY)&_ZN7S5247C33v10Ev,
  (VTBL_ENTRY)&_ZN7S5247C33v11Ev,
  (VTBL_ENTRY)&_ZN7S5247C23v12Ev,
  (VTBL_ENTRY)&_ZN7S5247C23v13Ev,
  (VTBL_ENTRY)&_ZN7S5247C23v14Ev,
};
extern VTBL_ENTRY _ZTI7S5247C2[];
extern  VTBL_ENTRY _ZTV7S5247C2[];
Class_Descriptor cd_S5247C2 = {  "S5247C2", // class name
  bases_S5247C2, 1,
  &(vtc_S5247C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,40), // object size
  NSPAIRA(_ZTI7S5247C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5247C2),14, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5247C6  {
  int s5247c6f0[2];
  char s5247c6f1;
  int s5247c6f2[8];
};
//SIG(-1 S5247C6) C1{ Fi[2] Fc Fi[8]}



static void Test_S5247C6()
{
  {
    init_simple_test("S5247C6");
    S5247C6 lv;
    check2(sizeof(lv), 44, "sizeof(S5247C6)");
    check2(__alignof__(lv), 4, "__alignof__(S5247C6)");
    check_field_offset(lv, s5247c6f0, 0, "S5247C6.s5247c6f0");
    check_field_offset(lv, s5247c6f1, 8, "S5247C6.s5247c6f1");
    check_field_offset(lv, s5247c6f2, 12, "S5247C6.s5247c6f2");
  }
}
static Arrange_To_Call_Me vS5247C6(Test_S5247C6, "S5247C6", 44);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5247C1  : S5247C2 {
  void *s5247c1f0;
  ::S5247C6 s5247c1f1;
  virtual  ~S5247C1(); // _ZN7S5247C1D1Ev
  virtual void  v1(); // _ZN7S5247C12v1Ev
  virtual void  v2(); // _ZN7S5247C12v2Ev
  virtual void  v3(); // _ZN7S5247C12v3Ev
  virtual void  v4(); // _ZN7S5247C12v4Ev
  S5247C1(); // tgen
};
//SIG(1 S5247C1) C1{ BC2{ BC3{ vd v5 v6 v7 v8 v9 v10 v11 FC4{ m Fi[2]} Fc} vd v12 v13 v14 FC4 FC5{ m Fi[4]}} vd v1 v2 v3 v4 Fp FC6{ Fi[2] Fc Fi[8]}}


 S5247C1 ::~S5247C1(){ note_dtor("S5247C1", this);}
void  S5247C1 ::v1(){vfunc_called(this, "_ZN7S5247C12v1Ev");}
void  S5247C1 ::v2(){vfunc_called(this, "_ZN7S5247C12v2Ev");}
void  S5247C1 ::v3(){vfunc_called(this, "_ZN7S5247C12v3Ev");}
void  S5247C1 ::v4(){vfunc_called(this, "_ZN7S5247C12v4Ev");}
S5247C1 ::S5247C1(){ note_ctor("S5247C1", this);} // tgen

static void Test_S5247C1()
{
  extern Class_Descriptor cd_S5247C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,23)];
    init_test(&cd_S5247C1, buf);
    S5247C1 *dp, &lv = *(dp=new (buf) S5247C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,88), "sizeof(S5247C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5247C1)");
    check_base_class_offset(lv, (S5247C3*)(S5247C2*), 0, "S5247C1");
    check_base_class_offset(lv, (S5247C2*), 0, "S5247C1");
    check_field_offset(lv, s5247c1f0, ABISELECT(48,40), "S5247C1.s5247c1f0");
    check_field_offset(lv, s5247c1f1, ABISELECT(56,44), "S5247C1.s5247c1f1");
    test_class_info(&lv, &cd_S5247C1);
    dp->~S5247C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5247C1(Test_S5247C1, "S5247C1", ABISELECT(104,88));

#else // __cplusplus

extern void _ZN7S5247C1C1Ev();
extern void _ZN7S5247C1D1Ev();
Name_Map name_map_S5247C1[] = {
  NSPAIR(_ZN7S5247C1C1Ev),
  NSPAIR(_ZN7S5247C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5247C3;
extern VTBL_ENTRY _ZTI7S5247C3[];
extern  VTBL_ENTRY _ZTV7S5247C3[];
extern Class_Descriptor cd_S5247C2;
extern VTBL_ENTRY _ZTI7S5247C2[];
extern  VTBL_ENTRY _ZTV7S5247C2[];
static Base_Class bases_S5247C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5247C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S5247C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S5247C1[];
extern void _ZN7S5247C1D1Ev();
extern void _ZN7S5247C1D0Ev();
extern void _ZN7S5247C32v5Ev();
extern void _ZN7S5247C32v6Ev();
extern void _ZN7S5247C32v7Ev();
extern void _ZN7S5247C32v8Ev();
extern void _ZN7S5247C32v9Ev();
extern void _ZN7S5247C33v10Ev();
extern void _ZN7S5247C33v11Ev();
extern void _ZN7S5247C23v12Ev();
extern void _ZN7S5247C23v13Ev();
extern void _ZN7S5247C23v14Ev();
extern void _ZN7S5247C12v1Ev();
extern void _ZN7S5247C12v2Ev();
extern void _ZN7S5247C12v3Ev();
extern void _ZN7S5247C12v4Ev();
static  VTBL_ENTRY vtc_S5247C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5247C1[0]),
  (VTBL_ENTRY)&_ZN7S5247C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5247C1D0Ev,
  (VTBL_ENTRY)&_ZN7S5247C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5247C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5247C32v7Ev,
  (VTBL_ENTRY)&_ZN7S5247C32v8Ev,
  (VTBL_ENTRY)&_ZN7S5247C32v9Ev,
  (VTBL_ENTRY)&_ZN7S5247C33v10Ev,
  (VTBL_ENTRY)&_ZN7S5247C33v11Ev,
  (VTBL_ENTRY)&_ZN7S5247C23v12Ev,
  (VTBL_ENTRY)&_ZN7S5247C23v13Ev,
  (VTBL_ENTRY)&_ZN7S5247C23v14Ev,
  (VTBL_ENTRY)&_ZN7S5247C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5247C12v2Ev,
  (VTBL_ENTRY)&_ZN7S5247C12v3Ev,
  (VTBL_ENTRY)&_ZN7S5247C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S5247C1[];
extern  VTBL_ENTRY _ZTV7S5247C1[];
Class_Descriptor cd_S5247C1 = {  "S5247C1", // class name
  bases_S5247C1, 2,
  &(vtc_S5247C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,88), // object size
  NSPAIRA(_ZTI7S5247C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5247C1),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4769C3  {
  ::S2120C20_nt s4769c3f0;
  int s4769c3f1[2];
  char s4769c3f2;
  virtual  ~S4769C3(); // _ZN7S4769C3D1Ev
  virtual void  v3(); // _ZN7S4769C32v3Ev
  virtual void  v4(); // _ZN7S4769C32v4Ev
  virtual void  v5(); // _ZN7S4769C32v5Ev
  S4769C3(); // tgen
};
//SIG(-1 S4769C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4769C3 ::~S4769C3(){ note_dtor("S4769C3", this);}
void  S4769C3 ::v3(){vfunc_called(this, "_ZN7S4769C32v3Ev");}
void  S4769C3 ::v4(){vfunc_called(this, "_ZN7S4769C32v4Ev");}
void  S4769C3 ::v5(){vfunc_called(this, "_ZN7S4769C32v5Ev");}
S4769C3 ::S4769C3(){ note_ctor("S4769C3", this);} // tgen

static void Test_S4769C3()
{
  extern Class_Descriptor cd_S4769C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4769C3, buf);
    S4769C3 *dp, &lv = *(dp=new (buf) S4769C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4769C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4769C3)");
    check_field_offset(lv, s4769c3f0, ABISELECT(8,4), "S4769C3.s4769c3f0");
    check_field_offset(lv, s4769c3f1, ABISELECT(24,16), "S4769C3.s4769c3f1");
    check_field_offset(lv, s4769c3f2, ABISELECT(32,24), "S4769C3.s4769c3f2");
    test_class_info(&lv, &cd_S4769C3);
    dp->~S4769C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4769C3(Test_S4769C3, "S4769C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4769C3C1Ev();
extern void _ZN7S4769C3D1Ev();
Name_Map name_map_S4769C3[] = {
  NSPAIR(_ZN7S4769C3C1Ev),
  NSPAIR(_ZN7S4769C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4769C3[];
extern void _ZN7S4769C3D1Ev();
extern void _ZN7S4769C3D0Ev();
extern void _ZN7S4769C32v3Ev();
extern void _ZN7S4769C32v4Ev();
extern void _ZN7S4769C32v5Ev();
static  VTBL_ENTRY vtc_S4769C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4769C3[0]),
  (VTBL_ENTRY)&_ZN7S4769C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4769C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4769C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4769C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4769C32v5Ev,
};
extern VTBL_ENTRY _ZTI7S4769C3[];
extern  VTBL_ENTRY _ZTV7S4769C3[];
Class_Descriptor cd_S4769C3 = {  "S4769C3", // class name
  0,0,//no base classes
  &(vtc_S4769C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4769C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4769C3),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  S4769C2  : S4769C3 {
  void *s4769c2f0;
  virtual void  v6(); // _ZN7S4769C22v6Ev
  virtual void  v7(); // _ZN7S4769C22v7Ev
  ~S4769C2(); // tgen
  S4769C2(); // tgen
};
//SIG(-1 S4769C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S4769C2 ::v6(){vfunc_called(this, "_ZN7S4769C22v6Ev");}
void  S4769C2 ::v7(){vfunc_called(this, "_ZN7S4769C22v7Ev");}
S4769C2 ::~S4769C2(){ note_dtor("S4769C2", this);} // tgen
S4769C2 ::S4769C2(){ note_ctor("S4769C2", this);} // tgen

static void Test_S4769C2()
{
  extern Class_Descriptor cd_S4769C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S4769C2, buf);
    S4769C2 *dp, &lv = *(dp=new (buf) S4769C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S4769C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4769C2)");
    check_base_class_offset(lv, (S4769C3*), 0, "S4769C2");
    check_field_offset(lv, s4769c2f0, ABISELECT(40,28), "S4769C2.s4769c2f0");
    test_class_info(&lv, &cd_S4769C2);
    dp->~S4769C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4769C2(Test_S4769C2, "S4769C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S4769C2C1Ev();
extern void _ZN7S4769C2D1Ev();
Name_Map name_map_S4769C2[] = {
  NSPAIR(_ZN7S4769C2C1Ev),
  NSPAIR(_ZN7S4769C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4769C3;
extern VTBL_ENTRY _ZTI7S4769C3[];
extern  VTBL_ENTRY _ZTV7S4769C3[];
static Base_Class bases_S4769C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4769C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4769C2[];
extern void _ZN7S4769C2D1Ev();
extern void _ZN7S4769C2D0Ev();
extern void _ZN7S4769C32v3Ev();
extern void _ZN7S4769C32v4Ev();
extern void _ZN7S4769C32v5Ev();
extern void _ZN7S4769C22v6Ev();
extern void _ZN7S4769C22v7Ev();
static  VTBL_ENTRY vtc_S4769C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4769C2[0]),
  (VTBL_ENTRY)&_ZN7S4769C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4769C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4769C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4769C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4769C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4769C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4769C22v7Ev,
};
extern VTBL_ENTRY _ZTI7S4769C2[];
extern  VTBL_ENTRY _ZTV7S4769C2[];
Class_Descriptor cd_S4769C2 = {  "S4769C2", // class name
  bases_S4769C2, 1,
  &(vtc_S4769C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S4769C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4769C2),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  S4769C1  : S4769C2 {
  ::S5061C8_nt s4769c1f0;
  void *s4769c1f1;
  int s4769c1f2;
  ::S5078C10_nt s4769c1f3;
  char s4769c1f4[2];
  virtual  ~S4769C1(); // _ZN7S4769C1D1Ev
  virtual void  v1(); // _ZN7S4769C12v1Ev
  virtual void  v2(); // _ZN7S4769C12v2Ev
  S4769C1(); // tgen
};
//SIG(1 S4769C1) C1{ BC2{ BC3{ vd v3 v4 v5 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v6 v7 Fp} vd v1 v2 FC6{ m FC7{ Fl[4]}} Fp Fi FC8{ FC9{ Fc[20]} Fc[16]} Fc[2]}


 S4769C1 ::~S4769C1(){ note_dtor("S4769C1", this);}
void  S4769C1 ::v1(){vfunc_called(this, "_ZN7S4769C12v1Ev");}
void  S4769C1 ::v2(){vfunc_called(this, "_ZN7S4769C12v2Ev");}
S4769C1 ::S4769C1(){ note_ctor("S4769C1", this);} // tgen

static void Test_S4769C1()
{
  extern Class_Descriptor cd_S4769C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,25)];
    init_test(&cd_S4769C1, buf);
    S4769C1 *dp, &lv = *(dp=new (buf) S4769C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,96), "sizeof(S4769C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4769C1)");
    check_base_class_offset(lv, (S4769C3*)(S4769C2*), 0, "S4769C1");
    check_base_class_offset(lv, (S4769C2*), 0, "S4769C1");
    check_field_offset(lv, s4769c1f0, ABISELECT(48,32), "S4769C1.s4769c1f0");
    check_field_offset(lv, s4769c1f1, ABISELECT(80,48), "S4769C1.s4769c1f1");
    check_field_offset(lv, s4769c1f2, ABISELECT(88,52), "S4769C1.s4769c1f2");
    check_field_offset(lv, s4769c1f3, ABISELECT(92,56), "S4769C1.s4769c1f3");
    check_field_offset(lv, s4769c1f4, ABISELECT(128,92), "S4769C1.s4769c1f4");
    test_class_info(&lv, &cd_S4769C1);
    dp->~S4769C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4769C1(Test_S4769C1, "S4769C1", ABISELECT(136,96));

#else // __cplusplus

extern void _ZN7S4769C1C1Ev();
extern void _ZN7S4769C1D1Ev();
Name_Map name_map_S4769C1[] = {
  NSPAIR(_ZN7S4769C1C1Ev),
  NSPAIR(_ZN7S4769C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4769C3;
extern VTBL_ENTRY _ZTI7S4769C3[];
extern  VTBL_ENTRY _ZTV7S4769C3[];
extern Class_Descriptor cd_S4769C2;
extern VTBL_ENTRY _ZTI7S4769C2[];
extern  VTBL_ENTRY _ZTV7S4769C2[];
static Base_Class bases_S4769C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4769C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4769C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S4769C1[];
extern void _ZN7S4769C1D1Ev();
extern void _ZN7S4769C1D0Ev();
extern void _ZN7S4769C32v3Ev();
extern void _ZN7S4769C32v4Ev();
extern void _ZN7S4769C32v5Ev();
extern void _ZN7S4769C22v6Ev();
extern void _ZN7S4769C22v7Ev();
extern void _ZN7S4769C12v1Ev();
extern void _ZN7S4769C12v2Ev();
static  VTBL_ENTRY vtc_S4769C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4769C1[0]),
  (VTBL_ENTRY)&_ZN7S4769C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4769C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4769C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4769C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4769C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4769C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4769C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4769C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4769C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S4769C1[];
extern  VTBL_ENTRY _ZTV7S4769C1[];
Class_Descriptor cd_S4769C1 = {  "S4769C1", // class name
  bases_S4769C1, 2,
  &(vtc_S4769C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(136,96), // object size
  NSPAIRA(_ZTI7S4769C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4769C1),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5248C3  {
  ::S3352C4_nt s5248c3f0;
  char s5248c3f1;
  virtual  ~S5248C3(); // _ZN7S5248C3D1Ev
  virtual void  v5(); // _ZN7S5248C32v5Ev
  virtual void  v6(); // _ZN7S5248C32v6Ev
  virtual void  v7(); // _ZN7S5248C32v7Ev
  virtual void  v8(); // _ZN7S5248C32v8Ev
  virtual void  v9(); // _ZN7S5248C32v9Ev
  virtual void  v10(); // _ZN7S5248C33v10Ev
  virtual void  v11(); // _ZN7S5248C33v11Ev
  S5248C3(); // tgen
};
//SIG(-1 S5248C3) C1{ vd v1 v2 v3 v4 v5 v6 v7 FC2{ m Fi[2]} Fc}


 S5248C3 ::~S5248C3(){ note_dtor("S5248C3", this);}
void  S5248C3 ::v5(){vfunc_called(this, "_ZN7S5248C32v5Ev");}
void  S5248C3 ::v6(){vfunc_called(this, "_ZN7S5248C32v6Ev");}
void  S5248C3 ::v7(){vfunc_called(this, "_ZN7S5248C32v7Ev");}
void  S5248C3 ::v8(){vfunc_called(this, "_ZN7S5248C32v8Ev");}
void  S5248C3 ::v9(){vfunc_called(this, "_ZN7S5248C32v9Ev");}
void  S5248C3 ::v10(){vfunc_called(this, "_ZN7S5248C33v10Ev");}
void  S5248C3 ::v11(){vfunc_called(this, "_ZN7S5248C33v11Ev");}
S5248C3 ::S5248C3(){ note_ctor("S5248C3", this);} // tgen

static void Test_S5248C3()
{
  extern Class_Descriptor cd_S5248C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S5248C3, buf);
    S5248C3 *dp, &lv = *(dp=new (buf) S5248C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S5248C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5248C3)");
    check_field_offset(lv, s5248c3f0, ABISELECT(8,4), "S5248C3.s5248c3f0");
    check_field_offset(lv, s5248c3f1, ABISELECT(16,12), "S5248C3.s5248c3f1");
    test_class_info(&lv, &cd_S5248C3);
    dp->~S5248C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5248C3(Test_S5248C3, "S5248C3", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S5248C3C1Ev();
extern void _ZN7S5248C3D1Ev();
Name_Map name_map_S5248C3[] = {
  NSPAIR(_ZN7S5248C3C1Ev),
  NSPAIR(_ZN7S5248C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5248C3[];
extern void _ZN7S5248C3D1Ev();
extern void _ZN7S5248C3D0Ev();
extern void _ZN7S5248C32v5Ev();
extern void _ZN7S5248C32v6Ev();
extern void _ZN7S5248C32v7Ev();
extern void _ZN7S5248C32v8Ev();
extern void _ZN7S5248C32v9Ev();
extern void _ZN7S5248C33v10Ev();
extern void _ZN7S5248C33v11Ev();
static  VTBL_ENTRY vtc_S5248C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5248C3[0]),
  (VTBL_ENTRY)&_ZN7S5248C3D1Ev,
  (VTBL_ENTRY)&_ZN7S5248C3D0Ev,
  (VTBL_ENTRY)&_ZN7S5248C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5248C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5248C32v7Ev,
  (VTBL_ENTRY)&_ZN7S5248C32v8Ev,
  (VTBL_ENTRY)&_ZN7S5248C32v9Ev,
  (VTBL_ENTRY)&_ZN7S5248C33v10Ev,
  (VTBL_ENTRY)&_ZN7S5248C33v11Ev,
};
extern VTBL_ENTRY _ZTI7S5248C3[];
extern  VTBL_ENTRY _ZTV7S5248C3[];
Class_Descriptor cd_S5248C3 = {  "S5248C3", // class name
  0,0,//no base classes
  &(vtc_S5248C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S5248C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5248C3),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5248C2  : S5248C3 {
  ::S3352C4_nt s5248c2f0;
  ::S885C14_nt s5248c2f1;
  virtual  ~S5248C2(); // _ZN7S5248C2D1Ev
  virtual void  v12(); // _ZN7S5248C23v12Ev
  virtual void  v13(); // _ZN7S5248C23v13Ev
  virtual void  v14(); // _ZN7S5248C23v14Ev
  S5248C2(); // tgen
};
//SIG(-1 S5248C2) C1{ BC2{ vd v4 v5 v6 v7 v8 v9 v10 FC3{ m Fi[2]} Fc} vd v1 v2 v3 FC3 FC4{ m Fi[4]}}


 S5248C2 ::~S5248C2(){ note_dtor("S5248C2", this);}
void  S5248C2 ::v12(){vfunc_called(this, "_ZN7S5248C23v12Ev");}
void  S5248C2 ::v13(){vfunc_called(this, "_ZN7S5248C23v13Ev");}
void  S5248C2 ::v14(){vfunc_called(this, "_ZN7S5248C23v14Ev");}
S5248C2 ::S5248C2(){ note_ctor("S5248C2", this);} // tgen

static void Test_S5248C2()
{
  extern Class_Descriptor cd_S5248C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,11)];
    init_test(&cd_S5248C2, buf);
    S5248C2 *dp, &lv = *(dp=new (buf) S5248C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,40), "sizeof(S5248C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5248C2)");
    check_base_class_offset(lv, (S5248C3*), 0, "S5248C2");
    check_field_offset(lv, s5248c2f0, ABISELECT(20,16), "S5248C2.s5248c2f0");
    check_field_offset(lv, s5248c2f1, ABISELECT(28,24), "S5248C2.s5248c2f1");
    test_class_info(&lv, &cd_S5248C2);
    dp->~S5248C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5248C2(Test_S5248C2, "S5248C2", ABISELECT(48,40));

#else // __cplusplus

extern void _ZN7S5248C2C1Ev();
extern void _ZN7S5248C2D1Ev();
Name_Map name_map_S5248C2[] = {
  NSPAIR(_ZN7S5248C2C1Ev),
  NSPAIR(_ZN7S5248C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5248C3;
extern VTBL_ENTRY _ZTI7S5248C3[];
extern  VTBL_ENTRY _ZTV7S5248C3[];
static Base_Class bases_S5248C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5248C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5248C2[];
extern void _ZN7S5248C2D1Ev();
extern void _ZN7S5248C2D0Ev();
extern void _ZN7S5248C32v5Ev();
extern void _ZN7S5248C32v6Ev();
extern void _ZN7S5248C32v7Ev();
extern void _ZN7S5248C32v8Ev();
extern void _ZN7S5248C32v9Ev();
extern void _ZN7S5248C33v10Ev();
extern void _ZN7S5248C33v11Ev();
extern void _ZN7S5248C23v12Ev();
extern void _ZN7S5248C23v13Ev();
extern void _ZN7S5248C23v14Ev();
static  VTBL_ENTRY vtc_S5248C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5248C2[0]),
  (VTBL_ENTRY)&_ZN7S5248C2D1Ev,
  (VTBL_ENTRY)&_ZN7S5248C2D0Ev,
  (VTBL_ENTRY)&_ZN7S5248C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5248C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5248C32v7Ev,
  (VTBL_ENTRY)&_ZN7S5248C32v8Ev,
  (VTBL_ENTRY)&_ZN7S5248C32v9Ev,
  (VTBL_ENTRY)&_ZN7S5248C33v10Ev,
  (VTBL_ENTRY)&_ZN7S5248C33v11Ev,
  (VTBL_ENTRY)&_ZN7S5248C23v12Ev,
  (VTBL_ENTRY)&_ZN7S5248C23v13Ev,
  (VTBL_ENTRY)&_ZN7S5248C23v14Ev,
};
extern VTBL_ENTRY _ZTI7S5248C2[];
extern  VTBL_ENTRY _ZTV7S5248C2[];
Class_Descriptor cd_S5248C2 = {  "S5248C2", // class name
  bases_S5248C2, 1,
  &(vtc_S5248C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,40), // object size
  NSPAIRA(_ZTI7S5248C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5248C2),14, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5248C6_nt  {
  int s5248c6f0[10];
};
//SIG(-1 S5248C6_nt) C1{ Fi[10]}



//skip512 S5248C6_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5248C1  : S5248C2 {
  void *s5248c1f0[3];
  ::S5248C6_nt s5248c1f1;
  int s5248c1f2;
  virtual  ~S5248C1(); // _ZN7S5248C1D1Ev
  virtual void  v1(); // _ZN7S5248C12v1Ev
  virtual void  v2(); // _ZN7S5248C12v2Ev
  virtual void  v3(); // _ZN7S5248C12v3Ev
  virtual void  v4(); // _ZN7S5248C12v4Ev
  S5248C1(); // tgen
};
//SIG(1 S5248C1) C1{ BC2{ BC3{ vd v5 v6 v7 v8 v9 v10 v11 FC4{ m Fi[2]} Fc} vd v12 v13 v14 FC4 FC5{ m Fi[4]}} vd v1 v2 v3 v4 Fp[3] FC6{ Fi[10]} Fi}


 S5248C1 ::~S5248C1(){ note_dtor("S5248C1", this);}
void  S5248C1 ::v1(){vfunc_called(this, "_ZN7S5248C12v1Ev");}
void  S5248C1 ::v2(){vfunc_called(this, "_ZN7S5248C12v2Ev");}
void  S5248C1 ::v3(){vfunc_called(this, "_ZN7S5248C12v3Ev");}
void  S5248C1 ::v4(){vfunc_called(this, "_ZN7S5248C12v4Ev");}
S5248C1 ::S5248C1(){ note_ctor("S5248C1", this);} // tgen

static void Test_S5248C1()
{
  extern Class_Descriptor cd_S5248C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,25)];
    init_test(&cd_S5248C1, buf);
    S5248C1 *dp, &lv = *(dp=new (buf) S5248C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,96), "sizeof(S5248C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5248C1)");
    check_base_class_offset(lv, (S5248C3*)(S5248C2*), 0, "S5248C1");
    check_base_class_offset(lv, (S5248C2*), 0, "S5248C1");
    check_field_offset(lv, s5248c1f0, ABISELECT(48,40), "S5248C1.s5248c1f0");
    check_field_offset(lv, s5248c1f1, ABISELECT(72,52), "S5248C1.s5248c1f1");
    check_field_offset(lv, s5248c1f2, ABISELECT(112,92), "S5248C1.s5248c1f2");
    test_class_info(&lv, &cd_S5248C1);
    dp->~S5248C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5248C1(Test_S5248C1, "S5248C1", ABISELECT(120,96));

#else // __cplusplus

extern void _ZN7S5248C1C1Ev();
extern void _ZN7S5248C1D1Ev();
Name_Map name_map_S5248C1[] = {
  NSPAIR(_ZN7S5248C1C1Ev),
  NSPAIR(_ZN7S5248C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5248C3;
extern VTBL_ENTRY _ZTI7S5248C3[];
extern  VTBL_ENTRY _ZTV7S5248C3[];
extern Class_Descriptor cd_S5248C2;
extern VTBL_ENTRY _ZTI7S5248C2[];
extern  VTBL_ENTRY _ZTV7S5248C2[];
static Base_Class bases_S5248C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5248C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S5248C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S5248C1[];
extern void _ZN7S5248C1D1Ev();
extern void _ZN7S5248C1D0Ev();
extern void _ZN7S5248C32v5Ev();
extern void _ZN7S5248C32v6Ev();
extern void _ZN7S5248C32v7Ev();
extern void _ZN7S5248C32v8Ev();
extern void _ZN7S5248C32v9Ev();
extern void _ZN7S5248C33v10Ev();
extern void _ZN7S5248C33v11Ev();
extern void _ZN7S5248C23v12Ev();
extern void _ZN7S5248C23v13Ev();
extern void _ZN7S5248C23v14Ev();
extern void _ZN7S5248C12v1Ev();
extern void _ZN7S5248C12v2Ev();
extern void _ZN7S5248C12v3Ev();
extern void _ZN7S5248C12v4Ev();
static  VTBL_ENTRY vtc_S5248C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5248C1[0]),
  (VTBL_ENTRY)&_ZN7S5248C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5248C1D0Ev,
  (VTBL_ENTRY)&_ZN7S5248C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5248C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5248C32v7Ev,
  (VTBL_ENTRY)&_ZN7S5248C32v8Ev,
  (VTBL_ENTRY)&_ZN7S5248C32v9Ev,
  (VTBL_ENTRY)&_ZN7S5248C33v10Ev,
  (VTBL_ENTRY)&_ZN7S5248C33v11Ev,
  (VTBL_ENTRY)&_ZN7S5248C23v12Ev,
  (VTBL_ENTRY)&_ZN7S5248C23v13Ev,
  (VTBL_ENTRY)&_ZN7S5248C23v14Ev,
  (VTBL_ENTRY)&_ZN7S5248C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5248C12v2Ev,
  (VTBL_ENTRY)&_ZN7S5248C12v3Ev,
  (VTBL_ENTRY)&_ZN7S5248C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S5248C1[];
extern  VTBL_ENTRY _ZTV7S5248C1[];
Class_Descriptor cd_S5248C1 = {  "S5248C1", // class name
  bases_S5248C1, 2,
  &(vtc_S5248C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,96), // object size
  NSPAIRA(_ZTI7S5248C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5248C1),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20801C3  {
  long double s20801c3f0;
  int s20801c3f1:3;
  char s20801c3f2:8;
  long double s20801c3f3[2];
  __tsi64 s20801c3f4;
  virtual void  v2(); // _ZN8S20801C32v2Ev
  ~S20801C3(); // tgen
  S20801C3(); // tgen
};
//SIG(-1 S20801C3) C1{ v1 FD Fi:3 Fc:8 FD[2] FL}


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

static void Test_S20801C3()
{
  extern Class_Descriptor cd_S20801C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(7,14)];
    init_test(&cd_S20801C3, buf);
    S20801C3 *dp, &lv = *(dp=new (buf) S20801C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,52), "sizeof(S20801C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20801C3)");
    check_field_offset(lv, s20801c3f0, ABISELECT(16,4), "S20801C3.s20801c3f0");
    set_bf_and_test(lv, s20801c3f1, ABISELECT(32,16), 0, 3, 1, "S20801C3");
    set_bf_and_test(lv, s20801c3f1, ABISELECT(32,16), 0, 3, hide_sll(1LL<<2), "S20801C3");
    set_bf_and_test(lv, s20801c3f2, ABISELECT(33,17), 0, 8, 1, "S20801C3");
    set_bf_and_test(lv, s20801c3f2, ABISELECT(33,17), 0, 8, hide_sll(1LL<<7), "S20801C3");
    check_field_offset(lv, s20801c3f3, ABISELECT(48,20), "S20801C3.s20801c3f3");
    check_field_offset(lv, s20801c3f4, ABISELECT(80,44), "S20801C3.s20801c3f4");
    test_class_info(&lv, &cd_S20801C3);
    dp->~S20801C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20801C3(Test_S20801C3, "S20801C3", ABISELECT(96,52));

#else // __cplusplus

extern void _ZN8S20801C3C1Ev();
extern void _ZN8S20801C3D1Ev();
Name_Map name_map_S20801C3[] = {
  NSPAIR(_ZN8S20801C3C1Ev),
  NSPAIR(_ZN8S20801C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20801C3[];
extern void _ZN8S20801C32v2Ev();
static  VTBL_ENTRY vtc_S20801C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20801C3[0]),
  (VTBL_ENTRY)&_ZN8S20801C32v2Ev,
};
extern VTBL_ENTRY _ZTI8S20801C3[];
extern  VTBL_ENTRY _ZTV8S20801C3[];
Class_Descriptor cd_S20801C3 = {  "S20801C3", // class name
  0,0,//no base classes
  &(vtc_S20801C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,52), // object size
  NSPAIRA(_ZTI8S20801C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20801C3),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  S20801C2  : virtual S20801C3 {
  ::S3490C4 s20801c2f0;
  __tsi64 s20801c2f1;
  ::S3490C4 s20801c2f2[7];
  void *s20801c2f3;
  __tsi64 s20801c2f4;
  ::S3490C4 s20801c2f5;
  void *s20801c2f6;
  char s20801c2f7;
  short s20801c2f8;
  int s20801c2f9;
  ::S20801C3 s20801c2f10;
  virtual void  v3(); // _ZN8S20801C22v3Ev
  ~S20801C2(); // tgen
  S20801C2(); // tgen
};
//SIG(-1 S20801C2) C1{ VBC2{ v2 FD Fi:3 Fc:8 FD[2] FL} v1 FC3{ m FL Fi Fc} FL FC3[7] Fp FL FC3 Fp Fc Fs Fi FC2}


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

static void Test_S20801C2()
{
  extern Class_Descriptor cd_S20801C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(25,72)];
    init_test(&cd_S20801C2, buf);
    S20801C2 *dp, &lv = *(dp=new (buf) S20801C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(384,284), "sizeof(S20801C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20801C2)");
    check_base_class_offset(lv, (S20801C3*), ABISELECT(288,232), "S20801C2");
    check_field_offset(lv, s20801c2f0, ABISELECT(8,4), "S20801C2.s20801c2f0");
    check_field_offset(lv, s20801c2f1, ABISELECT(24,20), "S20801C2.s20801c2f1");
    check_field_offset(lv, s20801c2f2, ABISELECT(32,28), "S20801C2.s20801c2f2");
    check_field_offset(lv, s20801c2f3, ABISELECT(144,140), "S20801C2.s20801c2f3");
    check_field_offset(lv, s20801c2f4, ABISELECT(152,144), "S20801C2.s20801c2f4");
    check_field_offset(lv, s20801c2f5, ABISELECT(160,152), "S20801C2.s20801c2f5");
    check_field_offset(lv, s20801c2f6, ABISELECT(176,168), "S20801C2.s20801c2f6");
    check_field_offset(lv, s20801c2f7, ABISELECT(184,172), "S20801C2.s20801c2f7");
    check_field_offset(lv, s20801c2f8, ABISELECT(186,174), "S20801C2.s20801c2f8");
    check_field_offset(lv, s20801c2f9, ABISELECT(188,176), "S20801C2.s20801c2f9");
    check_field_offset(lv, s20801c2f10, ABISELECT(192,180), "S20801C2.s20801c2f10");
    test_class_info(&lv, &cd_S20801C2);
    dp->~S20801C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20801C2(Test_S20801C2, "S20801C2", ABISELECT(384,284));

#else // __cplusplus

extern void _ZN8S20801C2C1Ev();
extern void _ZN8S20801C2D1Ev();
Name_Map name_map_S20801C2[] = {
  NSPAIR(_ZN8S20801C2C1Ev),
  NSPAIR(_ZN8S20801C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20801C3;
extern VTBL_ENTRY _ZTI8S20801C3[];
extern  VTBL_ENTRY _ZTV8S20801C3[];
static Base_Class bases_S20801C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20801C3,    ABISELECT(288,232), //bcp->offset
    4, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20801C2[];
extern void _ZN8S20801C22v3Ev();
extern void _ZN8S20801C32v2Ev();
static  VTBL_ENTRY vtc_S20801C2[] = {
  ABISELECT(288,232),
  0,
  (VTBL_ENTRY)&(_ZTI8S20801C2[0]),
  (VTBL_ENTRY)&_ZN8S20801C22v3Ev,
  0,
  ABISELECT(-288,-232),
  (VTBL_ENTRY)&(_ZTI8S20801C2[0]),
  (VTBL_ENTRY)&_ZN8S20801C32v2Ev,
};
extern VTBL_ENTRY _ZTV8S20801C2[];
static  VTT_ENTRY vtt_S20801C2[] = {
  {&(_ZTV8S20801C2[3]),  3,8},
  {&(_ZTV8S20801C2[7]),  7,8},
};
extern VTBL_ENTRY _ZTI8S20801C2[];
extern  VTBL_ENTRY _ZTV8S20801C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20801C2[];
Class_Descriptor cd_S20801C2 = {  "S20801C2", // class name
  bases_S20801C2, 1,
  &(vtc_S20801C2[0]), // expected_vtbl_contents
  &(vtt_S20801C2[0]), // expected_vtt_contents
  ABISELECT(384,284), // object size
  NSPAIRA(_ZTI8S20801C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20801C2),8, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20801C2),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  S20801C1  : virtual S20801C2 {
  void *s20801c1f0;
  int s20801c1f1[3];
  void *s20801c1f2;
  int s20801c1f3[4];
  short s20801c1f4;
  int s20801c1f5;
  virtual void  v1(); // _ZN8S20801C12v1Ev
  ~S20801C1(); // tgen
  S20801C1(); // tgen
};
//SIG(1 S20801C1) C1{ VBC2{ VBC3{ v2 FD Fi:3 Fc:8 FD[2] FL} v3 FC4{ m FL Fi Fc} FL FC4[7] Fp FL FC4 Fp Fc Fs Fi FC3} v1 Fp Fi[3] Fp Fi[4] Fs Fi}


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

static void Test_S20801C1()
{
  extern Class_Descriptor cd_S20801C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(29,84)];
    init_test(&cd_S20801C1, buf);
    S20801C1 *dp, &lv = *(dp=new (buf) S20801C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(448,332), "sizeof(S20801C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20801C1)");
    check_base_class_offset(lv, (S20801C3*)(S20801C2*), ABISELECT(352,280), "S20801C1");
    check_base_class_offset(lv, (S20801C2*), ABISELECT(64,48), "S20801C1");
    check_field_offset(lv, s20801c1f0, ABISELECT(8,4), "S20801C1.s20801c1f0");
    check_field_offset(lv, s20801c1f1, ABISELECT(16,8), "S20801C1.s20801c1f1");
    check_field_offset(lv, s20801c1f2, ABISELECT(32,20), "S20801C1.s20801c1f2");
    check_field_offset(lv, s20801c1f3, ABISELECT(40,24), "S20801C1.s20801c1f3");
    check_field_offset(lv, s20801c1f4, ABISELECT(56,40), "S20801C1.s20801c1f4");
    check_field_offset(lv, s20801c1f5, ABISELECT(60,44), "S20801C1.s20801c1f5");
    test_class_info(&lv, &cd_S20801C1);
    dp->~S20801C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20801C1(Test_S20801C1, "S20801C1", ABISELECT(448,332));

#else // __cplusplus

extern void _ZN8S20801C1C1Ev();
extern void _ZN8S20801C1D1Ev();
Name_Map name_map_S20801C1[] = {
  NSPAIR(_ZN8S20801C1C1Ev),
  NSPAIR(_ZN8S20801C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20801C3;
extern VTBL_ENTRY _ZTI8S20801C3[];
extern  VTBL_ENTRY _ZTV8S20801C3[];
extern Class_Descriptor cd_S20801C2;
extern VTBL_ENTRY _ZTI8S20801C2[];
extern  VTBL_ENTRY _ZTV8S20801C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20801C2[];
static Base_Class bases_S20801C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20801C3,    ABISELECT(352,280), //bcp->offset
    10, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S20801C2,    ABISELECT(64,48), //bcp->offset
    5, //bcp->virtual_function_table_offset
    4, //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 _ZTI8S20801C1[];
extern void _ZN8S20801C12v1Ev();
extern void _ZN8S20801C22v3Ev();
extern void _ZN8S20801C32v2Ev();
static  VTBL_ENTRY vtc_S20801C1[] = {
  ABISELECT(352,280),
  ABISELECT(64,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S20801C1[0]),
  (VTBL_ENTRY)&_ZN8S20801C12v1Ev,
  0,
  ABISELECT(288,232),
  ABISELECT(-64,-48),
  (VTBL_ENTRY)&(_ZTI8S20801C1[0]),
  (VTBL_ENTRY)&_ZN8S20801C22v3Ev,
  0,
  ABISELECT(-352,-280),
  (VTBL_ENTRY)&(_ZTI8S20801C1[0]),
  (VTBL_ENTRY)&_ZN8S20801C32v2Ev,
};
extern VTBL_ENTRY _ZTV8S20801C1[];
extern void _ZN8S20801C22v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20801C2__8S20801C1[] = {
  ABISELECT(288,232),
  0,
  (VTBL_ENTRY)&(_ZTI8S20801C2[0]),
  (VTBL_ENTRY)&_ZN8S20801C22v3Ev,
};
extern void _ZN8S20801C32v2Ev();
static  VTBL_ENTRY _tg__ZTV8S20801C3__8S20801C2__8S20801C1[] = {
  0,
  ABISELECT(-288,-232),
  (VTBL_ENTRY)&(_ZTI8S20801C2[0]),
  (VTBL_ENTRY)&_ZN8S20801C32v2Ev,
};
static  VTT_ENTRY vtt_S20801C1[] = {
  {&(_ZTV8S20801C1[4]),  4,14},
  {&(_ZTV8S20801C1[9]),  9,14},
  {&(_ZTV8S20801C1[13]),  13,14},
  {&(_tg__ZTV8S20801C2__8S20801C1[3]),  3,4},
  {&(_tg__ZTV8S20801C3__8S20801C2__8S20801C1[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S20801C1[];
extern  VTBL_ENTRY _ZTV8S20801C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20801C1[];
Class_Descriptor cd_S20801C1 = {  "S20801C1", // class name
  bases_S20801C1, 2,
  &(vtc_S20801C1[0]), // expected_vtbl_contents
  &(vtt_S20801C1[0]), // expected_vtt_contents
  ABISELECT(448,332), // object size
  NSPAIRA(_ZTI8S20801C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20801C1),14, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20801C1),5, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17457C2_nt  {
  void *s17457c2f0;
  int s17457c2f1;
  void  mf17457c2(); // _ZN11S17457C2_nt9mf17457c2Ev
};
//SIG(-1 S17457C2_nt) C1{ m Fp Fi}


void  S17457C2_nt ::mf17457c2(){}

//skip512 S17457C2_nt

#else // __cplusplus

Class_Descriptor cd_S17457C2_nt = {  "S17457C2_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  S17457C4  {
  void *s17457c4f0;
  int s17457c4f1;
  void  mf17457c4(); // _ZN8S17457C49mf17457c4Ev
};
//SIG(-1 S17457C4) C1{ m Fp Fi}


void  S17457C4 ::mf17457c4(){}

static void Test_S17457C4()
{
  {
    init_simple_test("S17457C4");
    S17457C4 lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S17457C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17457C4)");
    check_field_offset(lv, s17457c4f0, 0, "S17457C4.s17457c4f0");
    check_field_offset(lv, s17457c4f1, ABISELECT(8,4), "S17457C4.s17457c4f1");
  }
}
static Arrange_To_Call_Me vS17457C4(Test_S17457C4, "S17457C4", ABISELECT(16,8));

#else // __cplusplus

Class_Descriptor cd_S17457C4 = {  "S17457C4", // 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  S17457C1  {
  void *s17457c1f0;
  char s17457c1f1[1024];
  void *s17457c1f2[3];
  ::S17457C2_nt s17457c1f3;
  ::S17457C2_nt s17457c1f4;
  ::S17457C2_nt s17457c1f5;
  ::S17457C2_nt s17457c1f6;
  ::S17457C2_nt s17457c1f7;
  ::S17457C2_nt s17457c1f8;
  ::S17457C2_nt s17457c1f9;
  ::S17457C4 s17457c1f10;
  ::S17457C4 s17457c1f11;
  int s17457c1f12[2];
  long s17457c1f13;
  ::S5061C8_nt s17457c1f14;
  int s17457c1f15;
  void  mf17457c1(); // _ZN8S17457C19mf17457c1Ev
};
//SIG(1 S17457C1) C1{ m Fp Fc[1024] Fp[3] FC2{ m Fp Fi} FC2 FC2 FC2 FC2 FC2 FC2 FC3{ m Fp Fi} FC3 Fi[2] Fl FC4{ m FC5{ Fl[4]}} Fi}


void  S17457C1 ::mf17457c1(){}

static void Test_S17457C1()
{
  {
    init_simple_test("S17457C1");
    S17457C1 lv;
    check2(sizeof(lv), ABISELECT(1256,1144), "sizeof(S17457C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17457C1)");
    check_field_offset(lv, s17457c1f0, 0, "S17457C1.s17457c1f0");
    check_field_offset(lv, s17457c1f1, ABISELECT(8,4), "S17457C1.s17457c1f1");
    check_field_offset(lv, s17457c1f2, ABISELECT(1032,1028), "S17457C1.s17457c1f2");
    check_field_offset(lv, s17457c1f3, ABISELECT(1056,1040), "S17457C1.s17457c1f3");
    check_field_offset(lv, s17457c1f4, ABISELECT(1072,1048), "S17457C1.s17457c1f4");
    check_field_offset(lv, s17457c1f5, ABISELECT(1088,1056), "S17457C1.s17457c1f5");
    check_field_offset(lv, s17457c1f6, ABISELECT(1104,1064), "S17457C1.s17457c1f6");
    check_field_offset(lv, s17457c1f7, ABISELECT(1120,1072), "S17457C1.s17457c1f7");
    check_field_offset(lv, s17457c1f8, ABISELECT(1136,1080), "S17457C1.s17457c1f8");
    check_field_offset(lv, s17457c1f9, ABISELECT(1152,1088), "S17457C1.s17457c1f9");
    check_field_offset(lv, s17457c1f10, ABISELECT(1168,1096), "S17457C1.s17457c1f10");
    check_field_offset(lv, s17457c1f11, ABISELECT(1184,1104), "S17457C1.s17457c1f11");
    check_field_offset(lv, s17457c1f12, ABISELECT(1200,1112), "S17457C1.s17457c1f12");
    check_field_offset(lv, s17457c1f13, ABISELECT(1208,1120), "S17457C1.s17457c1f13");
    check_field_offset(lv, s17457c1f14, ABISELECT(1216,1124), "S17457C1.s17457c1f14");
    check_field_offset(lv, s17457c1f15, ABISELECT(1248,1140), "S17457C1.s17457c1f15");
  }
}
static Arrange_To_Call_Me vS17457C1(Test_S17457C1, "S17457C1", ABISELECT(1256,1144));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7144C2_nt  {
  virtual  ~S7144C2_nt(); // _ZN10S7144C2_ntD1Ev
  virtual void  v8(); // _ZN10S7144C2_nt2v8Ev
  virtual void  v9(); // _ZN10S7144C2_nt2v9Ev
  virtual void  v10(); // _ZN10S7144C2_nt3v10Ev
  virtual void  v11(); // _ZN10S7144C2_nt3v11Ev
  virtual void  v12(); // _ZN10S7144C2_nt3v12Ev
  virtual void  v13(); // _ZN10S7144C2_nt3v13Ev
  virtual void  v14(); // _ZN10S7144C2_nt3v14Ev
  S7144C2_nt(); // tgen
};
//SIG(-1 S7144C2_nt) C1{ vd v1 v2 v3 v4 v5 v6 v7}


 S7144C2_nt ::~S7144C2_nt(){ note_dtor("S7144C2_nt", this);}
void  S7144C2_nt ::v8(){vfunc_called(this, "_ZN10S7144C2_nt2v8Ev");}
void  S7144C2_nt ::v9(){vfunc_called(this, "_ZN10S7144C2_nt2v9Ev");}
void  S7144C2_nt ::v10(){vfunc_called(this, "_ZN10S7144C2_nt3v10Ev");}
void  S7144C2_nt ::v11(){vfunc_called(this, "_ZN10S7144C2_nt3v11Ev");}
void  S7144C2_nt ::v12(){vfunc_called(this, "_ZN10S7144C2_nt3v12Ev");}
void  S7144C2_nt ::v13(){vfunc_called(this, "_ZN10S7144C2_nt3v13Ev");}
void  S7144C2_nt ::v14(){vfunc_called(this, "_ZN10S7144C2_nt3v14Ev");}
S7144C2_nt ::S7144C2_nt(){ note_ctor("S7144C2_nt", this);} // tgen

//skip512 S7144C2_nt

#else // __cplusplus

extern void _ZN10S7144C2_ntC1Ev();
extern void _ZN10S7144C2_ntD1Ev();
Name_Map name_map_S7144C2_nt[] = {
  NSPAIR(_ZN10S7144C2_ntC1Ev),
  NSPAIR(_ZN10S7144C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S7144C2_nt[];
extern void _ZN10S7144C2_ntD1Ev();
extern void _ZN10S7144C2_ntD0Ev();
extern void _ZN10S7144C2_nt2v8Ev();
extern void _ZN10S7144C2_nt2v9Ev();
extern void _ZN10S7144C2_nt3v10Ev();
extern void _ZN10S7144C2_nt3v11Ev();
extern void _ZN10S7144C2_nt3v12Ev();
extern void _ZN10S7144C2_nt3v13Ev();
extern void _ZN10S7144C2_nt3v14Ev();
static  VTBL_ENTRY vtc_S7144C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S7144C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S7144C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S7144C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S7144C2_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S7144C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S7144C2_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S7144C2_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S7144C2_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S7144C2_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S7144C2_nt3v14Ev,
};
extern VTBL_ENTRY _ZTI10S7144C2_nt[];
VTBL_ENTRY *P__ZTI10S7144C2_nt = _ZTI10S7144C2_nt; 
extern  VTBL_ENTRY _ZTV10S7144C2_nt[];
Class_Descriptor cd_S7144C2_nt = {  "S7144C2_nt", // class name
  0,0,//no base classes
  &(vtc_S7144C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S7144C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S7144C2_nt),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7144C1  : S7144C2_nt {
  void *s7144c1f0;
  ::S5062C8_nt s7144c1f1;
  int s7144c1f2;
  char s7144c1f3;
  ::S11727C2_nt s7144c1f4;
  char s7144c1f5;
  ::S5062C9_nt s7144c1f6;
  virtual  ~S7144C1(); // _ZN7S7144C1D1Ev
  virtual void  v1(); // _ZN7S7144C12v1Ev
  virtual void  v2(); // _ZN7S7144C12v2Ev
  virtual void  v3(); // _ZN7S7144C12v3Ev
  virtual void  v4(); // _ZN7S7144C12v4Ev
  virtual void  v5(); // _ZN7S7144C12v5Ev
  virtual void  v6(); // _ZN7S7144C12v6Ev
  virtual void  v7(); // _ZN7S7144C12v7Ev
  S7144C1(); // tgen
};
//SIG(1 S7144C1) C1{ BC2{ vd v8 v9 v10 v11 v12 v13 v14} vd v1 v2 v3 v4 v5 v6 v7 Fp FC3{ m FC4{ FL[4]}} Fi Fc FC5{ FL[2]} Fc FC4}


 S7144C1 ::~S7144C1(){ note_dtor("S7144C1", this);}
void  S7144C1 ::v1(){vfunc_called(this, "_ZN7S7144C12v1Ev");}
void  S7144C1 ::v2(){vfunc_called(this, "_ZN7S7144C12v2Ev");}
void  S7144C1 ::v3(){vfunc_called(this, "_ZN7S7144C12v3Ev");}
void  S7144C1 ::v4(){vfunc_called(this, "_ZN7S7144C12v4Ev");}
void  S7144C1 ::v5(){vfunc_called(this, "_ZN7S7144C12v5Ev");}
void  S7144C1 ::v6(){vfunc_called(this, "_ZN7S7144C12v6Ev");}
void  S7144C1 ::v7(){vfunc_called(this, "_ZN7S7144C12v7Ev");}
S7144C1 ::S7144C1(){ note_ctor("S7144C1", this);} // tgen

static void Test_S7144C1()
{
  extern Class_Descriptor cd_S7144C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,26)];
    init_test(&cd_S7144C1, buf);
    S7144C1 *dp, &lv = *(dp=new (buf) S7144C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,100), "sizeof(S7144C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7144C1)");
    check_base_class_offset(lv, (S7144C2_nt*), 0, "S7144C1");
    check_field_offset(lv, s7144c1f0, ABISELECT(8,4), "S7144C1.s7144c1f0");
    check_field_offset(lv, s7144c1f1, ABISELECT(16,8), "S7144C1.s7144c1f1");
    check_field_offset(lv, s7144c1f2, ABISELECT(48,40), "S7144C1.s7144c1f2");
    check_field_offset(lv, s7144c1f3, ABISELECT(52,44), "S7144C1.s7144c1f3");
    check_field_offset(lv, s7144c1f4, ABISELECT(56,48), "S7144C1.s7144c1f4");
    check_field_offset(lv, s7144c1f5, ABISELECT(72,64), "S7144C1.s7144c1f5");
    check_field_offset(lv, s7144c1f6, ABISELECT(80,68), "S7144C1.s7144c1f6");
    test_class_info(&lv, &cd_S7144C1);
    dp->~S7144C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7144C1(Test_S7144C1, "S7144C1", ABISELECT(112,100));

#else // __cplusplus

extern void _ZN7S7144C1C1Ev();
extern void _ZN7S7144C1D1Ev();
Name_Map name_map_S7144C1[] = {
  NSPAIR(_ZN7S7144C1C1Ev),
  NSPAIR(_ZN7S7144C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7144C2_nt;
extern VTBL_ENTRY _ZTI10S7144C2_nt[];
extern  VTBL_ENTRY _ZTV10S7144C2_nt[];
static Base_Class bases_S7144C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7144C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7144C1[];
extern void _ZN7S7144C1D1Ev();
extern void _ZN7S7144C1D0Ev();
extern void _ZN10S7144C2_nt2v8Ev();
extern void _ZN10S7144C2_nt2v9Ev();
extern void _ZN10S7144C2_nt3v10Ev();
extern void _ZN10S7144C2_nt3v11Ev();
extern void _ZN10S7144C2_nt3v12Ev();
extern void _ZN10S7144C2_nt3v13Ev();
extern void _ZN10S7144C2_nt3v14Ev();
extern void _ZN7S7144C12v1Ev();
extern void _ZN7S7144C12v2Ev();
extern void _ZN7S7144C12v3Ev();
extern void _ZN7S7144C12v4Ev();
extern void _ZN7S7144C12v5Ev();
extern void _ZN7S7144C12v6Ev();
extern void _ZN7S7144C12v7Ev();
static  VTBL_ENTRY vtc_S7144C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7144C1[0]),
  (VTBL_ENTRY)&_ZN7S7144C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7144C1D0Ev,
  (VTBL_ENTRY)&_ZN10S7144C2_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S7144C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S7144C2_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S7144C2_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S7144C2_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S7144C2_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S7144C2_nt3v14Ev,
  (VTBL_ENTRY)&_ZN7S7144C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7144C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7144C12v3Ev,
  (VTBL_ENTRY)&_ZN7S7144C12v4Ev,
  (VTBL_ENTRY)&_ZN7S7144C12v5Ev,
  (VTBL_ENTRY)&_ZN7S7144C12v6Ev,
  (VTBL_ENTRY)&_ZN7S7144C12v7Ev,
};
extern VTBL_ENTRY _ZTI7S7144C1[];
extern  VTBL_ENTRY _ZTV7S7144C1[];
Class_Descriptor cd_S7144C1 = {  "S7144C1", // class name
  bases_S7144C1, 1,
  &(vtc_S7144C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,100), // object size
  NSPAIRA(_ZTI7S7144C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7144C1),18, //virtual function table var
  2, // 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  S7870C2  : virtual S8087C2_nt {
  ::S21155C5_nt s7870c2f0;
  ~S7870C2(); // tgen
  S7870C2(); // tgen
};
//SIG(-1 S7870C2) C1{ VBC2{ vd m Fi} FU3{ m}}


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

static void Test_S7870C2()
{
  extern Class_Descriptor cd_S7870C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S7870C2, buf);
    S7870C2 *dp, &lv = *(dp=new (buf) S7870C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S7870C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7870C2)");
    check_base_class_offset(lv, (S8087C2_nt*), ABISELECT(16,8), "S7870C2");
    check_field_offset(lv, s7870c2f0, ABISELECT(8,4), "S7870C2.s7870c2f0");
    test_class_info(&lv, &cd_S7870C2);
    dp->~S7870C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7870C2(Test_S7870C2, "S7870C2", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S7870C2C1Ev();
extern void _ZN7S7870C2D1Ev();
Name_Map name_map_S7870C2[] = {
  NSPAIR(_ZN7S7870C2C1Ev),
  NSPAIR(_ZN7S7870C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8087C2_nt;
extern VTBL_ENTRY _ZTI10S8087C2_nt[];
extern  VTBL_ENTRY _ZTV10S8087C2_nt[];
static Base_Class bases_S7870C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8087C2_nt,    ABISELECT(16,8), //bcp->offset
    5, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7870C2[];
extern void _ZN7S7870C2D1Ev();
extern void _ZN7S7870C2D0Ev();
extern void ABISELECT(_ZTv0_n24_N7S7870C2D1Ev,_ZTv0_n12_N7S7870C2D1Ev)();
extern void ABISELECT(_ZThn16_N7S7870C2D1Ev,_ZThn8_N7S7870C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7870C2D0Ev,_ZTv0_n12_N7S7870C2D0Ev)();
extern void ABISELECT(_ZThn16_N7S7870C2D0Ev,_ZThn8_N7S7870C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7870C2[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7870C2[0]),
  (VTBL_ENTRY)&_ZN7S7870C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7870C2D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7870C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7870C2D1Ev,_ZTv0_n12_N7S7870C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7870C2D0Ev,_ZTv0_n12_N7S7870C2D0Ev),
};
extern VTBL_ENTRY _ZTV7S7870C2[];
static  VTT_ENTRY vtt_S7870C2[] = {
  {&(_ZTV7S7870C2[3]),  3,10},
  {&(_ZTV7S7870C2[8]),  8,10},
};
extern VTBL_ENTRY _ZTI7S7870C2[];
extern  VTBL_ENTRY _ZTV7S7870C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7870C2[];
static VTBL_ENTRY alt_thunk_names49[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7870C2D0Ev,_ZTv0_n12_N7S7870C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7870C2D0Ev,_ZThn8_N7S7870C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7870C2D1Ev,_ZTv0_n12_N7S7870C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7870C2D1Ev,_ZThn8_N7S7870C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7870C2 = {  "S7870C2", // class name
  bases_S7870C2, 1,
  &(vtc_S7870C2[0]), // expected_vtbl_contents
  &(vtt_S7870C2[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S7870C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7870C2),10, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7870C2),2, //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  S7870C6  : virtual S8087C2_nt , virtual S7870C2 {
  long double s7870c6f0;
  int s7870c6f1;
  virtual  ~S7870C6(); // _ZN7S7870C6D2Ev
  S7870C6(); // tgen
};
//SIG(-1 S7870C6) C1{ VBC2{ vd m Fi} VBC3{ VBC2 FU4{ m}} vd FD Fi}


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

static void Test_S7870C6()
{
  extern Class_Descriptor cd_S7870C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(6,10)];
    init_test(&cd_S7870C6, buf);
    S7870C6 *dp, &lv = *(dp=new (buf) S7870C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,36), "sizeof(S7870C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7870C6)");
    check_base_class_offset(lv, (S8087C2_nt*), ABISELECT(40,20), "S7870C6");
    check_base_class_offset(lv, (S8087C2_nt*)(S7870C2*), ABISELECT(40,20), "S7870C6");
    check_base_class_offset(lv, (S7870C2*), ABISELECT(56,28), "S7870C6");
    check_field_offset(lv, s7870c6f0, ABISELECT(16,4), "S7870C6.s7870c6f0");
    check_field_offset(lv, s7870c6f1, ABISELECT(32,16), "S7870C6.s7870c6f1");
    test_class_info(&lv, &cd_S7870C6);
    dp->~S7870C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7870C6(Test_S7870C6, "S7870C6", ABISELECT(80,36));

#else // __cplusplus

extern void _ZN7S7870C6C1Ev();
extern void _ZN7S7870C6D2Ev();
Name_Map name_map_S7870C6[] = {
  NSPAIR(_ZN7S7870C6C1Ev),
  NSPAIR(_ZN7S7870C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S8087C2_nt;
extern VTBL_ENTRY _ZTI10S8087C2_nt[];
extern  VTBL_ENTRY _ZTV10S8087C2_nt[];
extern Class_Descriptor cd_S7870C2;
extern VTBL_ENTRY _ZTI7S7870C2[];
extern  VTBL_ENTRY _ZTV7S7870C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7870C2[];
static Base_Class bases_S7870C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8087C2_nt,    ABISELECT(40,20), //bcp->offset
    6, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7870C2,    ABISELECT(56,28), //bcp->offset
    11, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7870C6[];
extern void _ZN7S7870C6D1Ev();
extern void _ZN7S7870C6D0Ev();
extern void ABISELECT(_ZTv0_n24_N7S7870C6D1Ev,_ZTv0_n12_N7S7870C6D1Ev)();
extern void ABISELECT(_ZThn40_N7S7870C6D1Ev,_ZThn20_N7S7870C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7870C6D0Ev,_ZTv0_n12_N7S7870C6D0Ev)();
extern void ABISELECT(_ZThn40_N7S7870C6D0Ev,_ZThn20_N7S7870C6D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7870C6D1Ev,_ZTv0_n16_N7S7870C6D1Ev)();
extern void ABISELECT(_ZThn56_N7S7870C6D1Ev,_ZThn28_N7S7870C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7870C6D0Ev,_ZTv0_n16_N7S7870C6D0Ev)();
extern void ABISELECT(_ZThn56_N7S7870C6D0Ev,_ZThn28_N7S7870C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7870C6[] = {
  ABISELECT(56,28),
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI7S7870C6[0]),
  (VTBL_ENTRY)&_ZN7S7870C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7870C6D0Ev,
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S7870C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7870C6D1Ev,_ZTv0_n12_N7S7870C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7870C6D0Ev,_ZTv0_n12_N7S7870C6D0Ev),
  ABISELECT(-56,-28),
  ABISELECT(-16,-8),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI7S7870C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7870C6D1Ev,_ZTv0_n16_N7S7870C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7870C6D0Ev,_ZTv0_n16_N7S7870C6D0Ev),
};
extern VTBL_ENTRY _ZTV7S7870C6[];
extern void _ZN7S7870C2D1Ev();
extern void _ZN7S7870C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7870C2__7S7870C6[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7870C2[0]),
  (VTBL_ENTRY)&_ZN7S7870C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7870C2D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7870C2D1Ev,_ZTv0_n12_N7S7870C2D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7870C2D0Ev,_ZTv0_n12_N7S7870C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S8087C2_nt__7S7870C2__7S7870C6[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI7S7870C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7870C2D1Ev,_ZTv0_n12_N7S7870C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7870C2D0Ev,_ZTv0_n12_N7S7870C2D0Ev),
};
static  VTT_ENTRY vtt_S7870C6[] = {
  {&(_ZTV7S7870C6[4]),  4,17},
  {&(_ZTV7S7870C6[9]),  9,17},
  {&(_ZTV7S7870C6[15]),  15,17},
  {&(_tg__ZTV7S7870C2__7S7870C6[3]),  3,5},
  {&(_tg__ZTV10S8087C2_nt__7S7870C2__7S7870C6[3]),  3,5},
};
extern VTBL_ENTRY _ZTI7S7870C6[];
extern  VTBL_ENTRY _ZTV7S7870C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7870C6[];
static VTBL_ENTRY alt_thunk_names50[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7870C6D0Ev,_ZTv0_n16_N7S7870C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N7S7870C6D0Ev,_ZThn28_N7S7870C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7870C6D1Ev,_ZTv0_n16_N7S7870C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N7S7870C6D1Ev,_ZThn28_N7S7870C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7870C6D0Ev,_ZTv0_n12_N7S7870C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S7870C6D0Ev,_ZThn20_N7S7870C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7870C6D1Ev,_ZTv0_n12_N7S7870C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S7870C6D1Ev,_ZThn20_N7S7870C6D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7870C6 = {  "S7870C6", // class name
  bases_S7870C6, 2,
  &(vtc_S7870C6[0]), // expected_vtbl_contents
  &(vtt_S7870C6[0]), // expected_vtt_contents
  ABISELECT(80,36), // object size
  NSPAIRA(_ZTI7S7870C6),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7870C6),17, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7870C6),5, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names50,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7870C5  : virtual S7870C6 {
  void *s7870c5f0;
  char s7870c5f1;
  virtual  ~S7870C5(); // _ZN7S7870C5D2Ev
  S7870C5(); // tgen
};
//SIG(-1 S7870C5) C1{ VBC2{ VBC3{ vd m Fi} VBC4{ VBC3 FU5{ m}} vd FD Fi} vd Fp Fc}


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

static void Test_S7870C5()
{
  extern Class_Descriptor cd_S7870C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(8,13)];
    init_test(&cd_S7870C5, buf);
    S7870C5 *dp, &lv = *(dp=new (buf) S7870C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,48), "sizeof(S7870C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7870C5)");
    check_base_class_offset(lv, (S8087C2_nt*)(S7870C6*), ABISELECT(72,32), "S7870C5");
    check_base_class_offset(lv, (S8087C2_nt*)(S7870C2*), ABISELECT(72,32), "S7870C5");
    check_base_class_offset(lv, (S7870C2*)(S7870C6*), ABISELECT(88,40), "S7870C5");
    check_base_class_offset(lv, (S7870C6*), ABISELECT(32,12), "S7870C5");
    check_field_offset(lv, s7870c5f0, ABISELECT(8,4), "S7870C5.s7870c5f0");
    check_field_offset(lv, s7870c5f1, ABISELECT(16,8), "S7870C5.s7870c5f1");
    test_class_info(&lv, &cd_S7870C5);
    dp->~S7870C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7870C5(Test_S7870C5, "S7870C5", ABISELECT(112,48));

#else // __cplusplus

extern void _ZN7S7870C5C1Ev();
extern void _ZN7S7870C5D2Ev();
Name_Map name_map_S7870C5[] = {
  NSPAIR(_ZN7S7870C5C1Ev),
  NSPAIR(_ZN7S7870C5D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S8087C2_nt;
extern VTBL_ENTRY _ZTI10S8087C2_nt[];
extern  VTBL_ENTRY _ZTV10S8087C2_nt[];
extern Class_Descriptor cd_S7870C2;
extern VTBL_ENTRY _ZTI7S7870C2[];
extern  VTBL_ENTRY _ZTV7S7870C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7870C2[];
extern Class_Descriptor cd_S7870C6;
extern VTBL_ENTRY _ZTI7S7870C6[];
extern  VTBL_ENTRY _ZTV7S7870C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7870C6[];
static Base_Class bases_S7870C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8087C2_nt,    ABISELECT(72,32), //bcp->offset
    14, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7870C2,    ABISELECT(88,40), //bcp->offset
    19, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7870C6,    ABISELECT(32,12), //bcp->offset
    7, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7870C5[];
extern void _ZN7S7870C5D1Ev();
extern void _ZN7S7870C5D0Ev();
extern void ABISELECT(_ZTv0_n40_N7S7870C5D1Ev,_ZTv0_n20_N7S7870C5D1Ev)();
extern void ABISELECT(_ZThn32_N7S7870C5D1Ev,_ZThn12_N7S7870C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7870C5D0Ev,_ZTv0_n20_N7S7870C5D0Ev)();
extern void ABISELECT(_ZThn32_N7S7870C5D0Ev,_ZThn12_N7S7870C5D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7870C5D1Ev,_ZTv0_n12_N7S7870C5D1Ev)();
extern void ABISELECT(_ZThn72_N7S7870C5D1Ev,_ZThn32_N7S7870C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7870C5D0Ev,_ZTv0_n12_N7S7870C5D0Ev)();
extern void ABISELECT(_ZThn72_N7S7870C5D0Ev,_ZThn32_N7S7870C5D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7870C5D1Ev,_ZTv0_n16_N7S7870C5D1Ev)();
extern void ABISELECT(_ZThn88_N7S7870C5D1Ev,_ZThn40_N7S7870C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7870C5D0Ev,_ZTv0_n16_N7S7870C5D0Ev)();
extern void ABISELECT(_ZThn88_N7S7870C5D0Ev,_ZThn40_N7S7870C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7870C5[] = {
  ABISELECT(88,40),
  ABISELECT(72,32),
  ABISELECT(32,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7870C5[0]),
  (VTBL_ENTRY)&_ZN7S7870C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7870C5D0Ev,
  ABISELECT(-32,-12),
  ABISELECT(56,28),
  ABISELECT(40,20),
  ABISELECT(-32,-12),
  (VTBL_ENTRY)&(_ZTI7S7870C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7870C5D1Ev,_ZTv0_n20_N7S7870C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7870C5D0Ev,_ZTv0_n20_N7S7870C5D0Ev),
  ABISELECT(-72,-32),
  ABISELECT(-72,-32),
  (VTBL_ENTRY)&(_ZTI7S7870C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7870C5D1Ev,_ZTv0_n12_N7S7870C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7870C5D0Ev,_ZTv0_n12_N7S7870C5D0Ev),
  ABISELECT(-88,-40),
  ABISELECT(-16,-8),
  ABISELECT(-88,-40),
  (VTBL_ENTRY)&(_ZTI7S7870C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7870C5D1Ev,_ZTv0_n16_N7S7870C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7870C5D0Ev,_ZTv0_n16_N7S7870C5D0Ev),
};
extern VTBL_ENTRY _ZTV7S7870C5[];
extern void _ZN7S7870C6D1Ev();
extern void _ZN7S7870C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7870C6__7S7870C5[] = {
  ABISELECT(56,28),
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI7S7870C6[0]),
  (VTBL_ENTRY)&_ZN7S7870C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7870C6D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7870C6D1Ev,_ZTv0_n12_N7S7870C6D1Ev)();
extern void ABISELECT(_ZThn40_N7S7870C6D1Ev,_ZThn20_N7S7870C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7870C6D0Ev,_ZTv0_n12_N7S7870C6D0Ev)();
extern void ABISELECT(_ZThn40_N7S7870C6D0Ev,_ZThn20_N7S7870C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S8087C2_nt__7S7870C6__7S7870C5[] = {
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S7870C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7870C6D1Ev,_ZTv0_n12_N7S7870C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7870C6D0Ev,_ZTv0_n12_N7S7870C6D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N7S7870C6D1Ev,_ZTv0_n16_N7S7870C6D1Ev)();
extern void ABISELECT(_ZThn56_N7S7870C6D1Ev,_ZThn28_N7S7870C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7870C6D0Ev,_ZTv0_n16_N7S7870C6D0Ev)();
extern void ABISELECT(_ZThn56_N7S7870C6D0Ev,_ZThn28_N7S7870C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7870C2__7S7870C6__7S7870C5[] = {
  ABISELECT(-56,-28),
  ABISELECT(-16,-8),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI7S7870C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7870C6D1Ev,_ZTv0_n16_N7S7870C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7870C6D0Ev,_ZTv0_n16_N7S7870C6D0Ev),
};
extern void _ZN7S7870C2D1Ev();
extern void _ZN7S7870C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7870C2__7S7870C5[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7870C2[0]),
  (VTBL_ENTRY)&_ZN7S7870C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7870C2D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7870C2D1Ev,_ZTv0_n12_N7S7870C2D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7870C2D0Ev,_ZTv0_n12_N7S7870C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S8087C2_nt__7S7870C2__7S7870C5[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI7S7870C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7870C2D1Ev,_ZTv0_n12_N7S7870C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7870C2D0Ev,_ZTv0_n12_N7S7870C2D0Ev),
};
static  VTT_ENTRY vtt_S7870C5[] = {
  {&(_ZTV7S7870C5[5]),  5,25},
  {&(_ZTV7S7870C5[12]),  12,25},
  {&(_ZTV7S7870C5[17]),  17,25},
  {&(_ZTV7S7870C5[23]),  23,25},
  {&(_tg__ZTV7S7870C6__7S7870C5[4]),  4,6},
  {&(_tg__ZTV10S8087C2_nt__7S7870C6__7S7870C5[3]),  3,5},
  {&(_tg__ZTV7S7870C2__7S7870C6__7S7870C5[4]),  4,6},
  {&(_tg__ZTV7S7870C2__7S7870C5[3]),  3,5},
  {&(_tg__ZTV10S8087C2_nt__7S7870C2__7S7870C5[3]),  3,5},
};
extern VTBL_ENTRY _ZTI7S7870C5[];
extern  VTBL_ENTRY _ZTV7S7870C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7870C5[];
static VTBL_ENTRY alt_thunk_names51[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7870C6D0Ev,_ZTv0_n16_N7S7870C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N7S7870C6D0Ev,_ZThn28_N7S7870C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7870C6D1Ev,_ZTv0_n16_N7S7870C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N7S7870C6D1Ev,_ZThn28_N7S7870C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7870C6D0Ev,_ZTv0_n12_N7S7870C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S7870C6D0Ev,_ZThn20_N7S7870C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7870C6D1Ev,_ZTv0_n12_N7S7870C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S7870C6D1Ev,_ZThn20_N7S7870C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7870C5D0Ev,_ZTv0_n16_N7S7870C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N7S7870C5D0Ev,_ZThn40_N7S7870C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7870C5D1Ev,_ZTv0_n16_N7S7870C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N7S7870C5D1Ev,_ZThn40_N7S7870C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7870C5D0Ev,_ZTv0_n12_N7S7870C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N7S7870C5D0Ev,_ZThn32_N7S7870C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7870C5D1Ev,_ZTv0_n12_N7S7870C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N7S7870C5D1Ev,_ZThn32_N7S7870C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7870C5D0Ev,_ZTv0_n20_N7S7870C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7870C5D0Ev,_ZThn12_N7S7870C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7870C5D1Ev,_ZTv0_n20_N7S7870C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7870C5D1Ev,_ZThn12_N7S7870C5D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7870C5 = {  "S7870C5", // class name
  bases_S7870C5, 3,
  &(vtc_S7870C5[0]), // expected_vtbl_contents
  &(vtt_S7870C5[0]), // expected_vtt_contents
  ABISELECT(112,48), // object size
  NSPAIRA(_ZTI7S7870C5),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7870C5),25, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7870C5),9, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names51,
};
#endif // __cplusplus

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

#ifdef __cplusplus

union  S7870C9_nt  {
  void  mf7870c9(); // _ZN10S7870C9_nt8mf7870c9Ev
};
//SIG(1 S7870C9_nt) U1{ m}

#endif // __cplusplus
#ifdef __cplusplus

struct  S7870C8  : S8087C2_nt , S7870C2 {
  ::S7870C9_nt s7870c8f0[10];
  ~S7870C8(); // tgen
  S7870C8(); // tgen
};
//SIG(-1 S7870C8) C1{ BC2{ vd m Fi} BC3{ VBC2 FU4{ m}} FU5{ m}[10]}


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

static void Test_S7870C8()
{
  extern Class_Descriptor cd_S7870C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,9)];
    init_test(&cd_S7870C8, buf);
    S7870C8 *dp, &lv = *(dp=new (buf) S7870C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,32), "sizeof(S7870C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7870C8)");
    /*is_ambiguous_... S7870C8::S8087C2_nt */ AMB_check_base_class_offset(lv, (S8087C2_nt*), 0, "S7870C8");
    check_base_class_offset(lv, (S8087C2_nt*)(S7870C2*), ABISELECT(40,24), "S7870C8");
    check_base_class_offset(lv, (S7870C2*), ABISELECT(16,8), "S7870C8");
    check_field_offset(lv, s7870c8f0, ABISELECT(25,13), "S7870C8.s7870c8f0");
    test_class_info(&lv, &cd_S7870C8);
    dp->~S7870C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7870C8(Test_S7870C8, "S7870C8", ABISELECT(56,32));

#else // __cplusplus

extern void _ZN7S7870C8C1Ev();
extern void _ZN7S7870C8D1Ev();
Name_Map name_map_S7870C8[] = {
  NSPAIR(_ZN7S7870C8C1Ev),
  NSPAIR(_ZN7S7870C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8087C2_nt;
extern VTBL_ENTRY _ZTI10S8087C2_nt[];
extern  VTBL_ENTRY _ZTV10S8087C2_nt[];
extern Class_Descriptor cd_S8087C2_nt;
extern VTBL_ENTRY _ZTI10S8087C2_nt[];
extern  VTBL_ENTRY _ZTV10S8087C2_nt[];
extern Class_Descriptor cd_S7870C2;
extern VTBL_ENTRY _ZTI7S7870C2[];
extern  VTBL_ENTRY _ZTV7S7870C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7870C2[];
static Base_Class bases_S7870C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8087C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S8087C2_nt,    ABISELECT(40,24), //bcp->offset
    10, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7870C2,    ABISELECT(16,8), //bcp->offset
    5, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7870C8[];
extern void _ZN7S7870C8D1Ev();
extern void _ZN7S7870C8D0Ev();
extern void ABISELECT(_ZThn16_N7S7870C8D1Ev,_ZThn8_N7S7870C8D1Ev)();
extern void ABISELECT(_ZThn16_N7S7870C8D0Ev,_ZThn8_N7S7870C8D0Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7870C8D1Ev,_ZTv0_n12_N7S7870C8D1Ev)();
extern void ABISELECT(_ZThn40_N7S7870C8D1Ev,_ZThn24_N7S7870C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7870C8D0Ev,_ZTv0_n12_N7S7870C8D0Ev)();
extern void ABISELECT(_ZThn40_N7S7870C8D0Ev,_ZThn24_N7S7870C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7870C8[] = {
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI7S7870C8[0]),
  (VTBL_ENTRY)&_ZN7S7870C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7870C8D0Ev,
  ABISELECT(24,16),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7870C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S7870C8D1Ev,_ZThn8_N7S7870C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S7870C8D0Ev,_ZThn8_N7S7870C8D0Ev),
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S7870C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7870C8D1Ev,_ZTv0_n12_N7S7870C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7870C8D0Ev,_ZTv0_n12_N7S7870C8D0Ev),
};
extern VTBL_ENTRY _ZTV7S7870C8[];
extern void _ZN7S7870C2D1Ev();
extern void _ZN7S7870C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7870C2__7S7870C8[] = {
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7870C2[0]),
  (VTBL_ENTRY)&_ZN7S7870C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7870C2D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7870C2D1Ev,_ZTv0_n12_N7S7870C2D1Ev)();
extern void ABISELECT(_ZThn24_N7S7870C2D1Ev,_ZThn16_N7S7870C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7870C2D0Ev,_ZTv0_n12_N7S7870C2D0Ev)();
extern void ABISELECT(_ZThn24_N7S7870C2D0Ev,_ZThn16_N7S7870C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S8087C2_nt__7S7870C2__7S7870C8[] = {
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI7S7870C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7870C2D1Ev,_ZTv0_n12_N7S7870C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7870C2D0Ev,_ZTv0_n12_N7S7870C2D0Ev),
};
static  VTT_ENTRY vtt_S7870C8[] = {
  {&(_ZTV7S7870C8[3]),  3,15},
  {&(_tg__ZTV7S7870C2__7S7870C8[3]),  3,5},
  {&(_tg__ZTV10S8087C2_nt__7S7870C2__7S7870C8[3]),  3,5},
  {&(_ZTV7S7870C8[8]),  8,15},
  {&(_ZTV7S7870C8[13]),  13,15},
};
extern VTBL_ENTRY _ZTI7S7870C8[];
extern  VTBL_ENTRY _ZTV7S7870C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7870C8[];
static VTBL_ENTRY alt_thunk_names52[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7870C2D0Ev,_ZTv0_n12_N7S7870C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7870C2D0Ev,_ZThn16_N7S7870C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7870C2D1Ev,_ZTv0_n12_N7S7870C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7870C2D1Ev,_ZThn16_N7S7870C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7870C8D0Ev,_ZTv0_n12_N7S7870C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S7870C8D0Ev,_ZThn24_N7S7870C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7870C8D1Ev,_ZTv0_n12_N7S7870C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S7870C8D1Ev,_ZThn24_N7S7870C8D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7870C8 = {  "S7870C8", // class name
  bases_S7870C8, 3,
  &(vtc_S7870C8[0]), // expected_vtbl_contents
  &(vtt_S7870C8[0]), // expected_vtt_contents
  ABISELECT(56,32), // object size
  NSPAIRA(_ZTI7S7870C8),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7870C8),15, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7870C8),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names52,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7870C1  : S7870C2 , S7870C5 , S21155C6 , S7870C8 {
  ::S8087C2_nt s7870c1f0[9];
  ~S7870C1(); // tgen
  S7870C1(); // tgen
};
//SIG(1 S7870C1) C1{ BC2{ VBC3{ vd m Fi} FU4{ m}} BC5{ VBC6{ VBC3 VBC2 vd FD Fi} vd Fp Fc} BC7{ m FD Fp FD} BC8{ BC3 BC2 FU9{ m}[10]} FC3[9]}


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

static void Test_S7870C1()
{
  extern Class_Descriptor cd_S7870C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(24,46)];
    init_test(&cd_S7870C1, buf);
    S7870C1 *dp, &lv = *(dp=new (buf) S7870C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(368,180), "sizeof(S7870C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7870C1)");
    /*is_ambiguous_... S7870C1::S7870C2 */ AMB_check_base_class_offset(lv, (S8087C2_nt*)(S7870C2*), ABISELECT(280,144), "S7870C1");
    check_base_class_offset(lv, (S8087C2_nt*)(S7870C6*), ABISELECT(280,144), "S7870C1");
    /*is_ambiguous_... S7870C1::S7870C2 */ AMB_check_base_class_offset(lv, (S8087C2_nt*)(S7870C2*), ABISELECT(280,144), "S7870C1");
    check_base_class_offset(lv, (S8087C2_nt*)(S7870C2*)(S7870C8*), ABISELECT(280,144), "S7870C1");
    /*is_ambiguous_... S7870C1::S7870C2 */ AMB_check_base_class_offset(lv, (S7870C2*), 0, "S7870C1");
    check_base_class_offset(lv, (S7870C2*)(S7870C6*), ABISELECT(344,172), "S7870C1");
    check_base_class_offset(lv, (S7870C6*)(S7870C5*), ABISELECT(304,152), "S7870C1");
    check_base_class_offset(lv, (S7870C5*), ABISELECT(16,8), "S7870C1");
    check_base_class_offset(lv, (S21155C6*), ABISELECT(48,20), "S7870C1");
    /*is_ambiguous_... S7870C8::S8087C2_nt */ AMB_check_base_class_offset(lv, (S8087C2_nt*)(S7870C8*), ABISELECT(96,48), "S7870C1");
    check_base_class_offset(lv, (S7870C2*)(S7870C8*), ABISELECT(112,56), "S7870C1");
    check_base_class_offset(lv, (S7870C8*), ABISELECT(96,48), "S7870C1");
    check_field_offset(lv, s7870c1f0, ABISELECT(136,72), "S7870C1.s7870c1f0");
    test_class_info(&lv, &cd_S7870C1);
    dp->~S7870C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7870C1(Test_S7870C1, "S7870C1", ABISELECT(368,180));

#else // __cplusplus

extern void _ZN7S7870C1C1Ev();
extern void _ZN7S7870C1D1Ev();
Name_Map name_map_S7870C1[] = {
  NSPAIR(_ZN7S7870C1C1Ev),
  NSPAIR(_ZN7S7870C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8087C2_nt;
extern VTBL_ENTRY _ZTI10S8087C2_nt[];
extern  VTBL_ENTRY _ZTV10S8087C2_nt[];
extern Class_Descriptor cd_S7870C2;
extern VTBL_ENTRY _ZTI7S7870C2[];
extern  VTBL_ENTRY _ZTV7S7870C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7870C2[];
extern Class_Descriptor cd_S7870C2;
extern VTBL_ENTRY _ZTI7S7870C2[];
extern  VTBL_ENTRY _ZTV7S7870C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7870C2[];
extern Class_Descriptor cd_S7870C6;
extern VTBL_ENTRY _ZTI7S7870C6[];
extern  VTBL_ENTRY _ZTV7S7870C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7870C6[];
extern Class_Descriptor cd_S7870C5;
extern VTBL_ENTRY _ZTI7S7870C5[];
extern  VTBL_ENTRY _ZTV7S7870C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7870C5[];
extern Class_Descriptor cd_S21155C6;
extern VTBL_ENTRY _ZTI8S21155C6[];
extern Class_Descriptor cd_S8087C2_nt;
extern VTBL_ENTRY _ZTI10S8087C2_nt[];
extern  VTBL_ENTRY _ZTV10S8087C2_nt[];
extern Class_Descriptor cd_S7870C2;
extern VTBL_ENTRY _ZTI7S7870C2[];
extern  VTBL_ENTRY _ZTV7S7870C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7870C2[];
extern Class_Descriptor cd_S7870C8;
extern VTBL_ENTRY _ZTI7S7870C8[];
extern  VTBL_ENTRY _ZTV7S7870C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7870C8[];
static Base_Class bases_S7870C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8087C2_nt,    ABISELECT(280,144), //bcp->offset
    24, //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
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S7870C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7870C2,    ABISELECT(344,172), //bcp->offset
    36, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7870C6,    ABISELECT(304,152), //bcp->offset
    29, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7870C5,    ABISELECT(16,8), //bcp->offset
    7, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S21155C6,    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
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S8087C2_nt,    ABISELECT(96,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7870C2,    ABISELECT(112,56), //bcp->offset
    19, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7870C8,    ABISELECT(96,48), //bcp->offset
    14, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7870C1[];
extern void _ZN7S7870C1D1Ev();
extern void _ZN7S7870C1D0Ev();
extern void ABISELECT(_ZThn16_N7S7870C1D1Ev,_ZThn8_N7S7870C1D1Ev)();
extern void ABISELECT(_ZThn16_N7S7870C1D0Ev,_ZThn8_N7S7870C1D0Ev)();
extern void ABISELECT(_ZThn96_N7S7870C1D1Ev,_ZThn48_N7S7870C1D1Ev)();
extern void ABISELECT(_ZThn96_N7S7870C1D0Ev,_ZThn48_N7S7870C1D0Ev)();
extern void ABISELECT(_ZThn112_N7S7870C1D1Ev,_ZThn56_N7S7870C1D1Ev)();
extern void ABISELECT(_ZThn112_N7S7870C1D0Ev,_ZThn56_N7S7870C1D0Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7870C1D1Ev,_ZTv0_n12_N7S7870C1D1Ev)();
extern void ABISELECT(_ZThn280_N7S7870C1D1Ev,_ZThn144_N7S7870C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7870C1D0Ev,_ZTv0_n12_N7S7870C1D0Ev)();
extern void ABISELECT(_ZThn280_N7S7870C1D0Ev,_ZThn144_N7S7870C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7870C1D1Ev,_ZTv0_n20_N7S7870C1D1Ev)();
extern void ABISELECT(_ZThn304_N7S7870C1D1Ev,_ZThn152_N7S7870C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7870C1D0Ev,_ZTv0_n20_N7S7870C1D0Ev)();
extern void ABISELECT(_ZThn304_N7S7870C1D0Ev,_ZThn152_N7S7870C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7870C1D1Ev,_ZTv0_n16_N7S7870C1D1Ev)();
extern void ABISELECT(_ZThn344_N7S7870C1D1Ev,_ZThn172_N7S7870C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7870C1D0Ev,_ZTv0_n16_N7S7870C1D0Ev)();
extern void ABISELECT(_ZThn344_N7S7870C1D0Ev,_ZThn172_N7S7870C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7870C1[] = {
  ABISELECT(344,172),
  ABISELECT(304,152),
  ABISELECT(280,144),
  0,
  (VTBL_ENTRY)&(_ZTI7S7870C1[0]),
  (VTBL_ENTRY)&_ZN7S7870C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7870C1D0Ev,
  ABISELECT(328,164),
  ABISELECT(264,136),
  ABISELECT(288,144),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7870C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S7870C1D1Ev,_ZThn8_N7S7870C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S7870C1D0Ev,_ZThn8_N7S7870C1D0Ev),
  ABISELECT(184,96),
  ABISELECT(-96,-48),
  (VTBL_ENTRY)&(_ZTI7S7870C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N7S7870C1D1Ev,_ZThn48_N7S7870C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn96_N7S7870C1D0Ev,_ZThn48_N7S7870C1D0Ev),
  ABISELECT(168,88),
  ABISELECT(-112,-56),
  (VTBL_ENTRY)&(_ZTI7S7870C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn112_N7S7870C1D1Ev,_ZThn56_N7S7870C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn112_N7S7870C1D0Ev,_ZThn56_N7S7870C1D0Ev),
  ABISELECT(-280,-144),
  ABISELECT(-280,-144),
  (VTBL_ENTRY)&(_ZTI7S7870C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7870C1D1Ev,_ZTv0_n12_N7S7870C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7870C1D0Ev,_ZTv0_n12_N7S7870C1D0Ev),
  ABISELECT(-304,-152),
  ABISELECT(40,20),
  ABISELECT(-24,-8),
  ABISELECT(-304,-152),
  (VTBL_ENTRY)&(_ZTI7S7870C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7870C1D1Ev,_ZTv0_n20_N7S7870C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7870C1D0Ev,_ZTv0_n20_N7S7870C1D0Ev),
  ABISELECT(-344,-172),
  ABISELECT(-64,-28),
  ABISELECT(-344,-172),
  (VTBL_ENTRY)&(_ZTI7S7870C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7870C1D1Ev,_ZTv0_n16_N7S7870C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7870C1D0Ev,_ZTv0_n16_N7S7870C1D0Ev),
};
extern VTBL_ENTRY _ZTV7S7870C1[];
extern void _ZN7S7870C2D1Ev();
extern void _ZN7S7870C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7870C2__A__7S7870C1[] = {
  ABISELECT(280,144),
  0,
  (VTBL_ENTRY)&(_ZTI7S7870C2[0]),
  (VTBL_ENTRY)&_ZN7S7870C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7870C2D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7870C2D1Ev,_ZTv0_n12_N7S7870C2D1Ev)();
extern void ABISELECT(_ZThn280_N7S7870C2D1Ev,_ZThn144_N7S7870C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7870C2D0Ev,_ZTv0_n12_N7S7870C2D0Ev)();
extern void ABISELECT(_ZThn280_N7S7870C2D0Ev,_ZThn144_N7S7870C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S8087C2_nt__7S7870C2__A__7S7870C1[] = {
  ABISELECT(-280,-144),
  ABISELECT(-280,-144),
  (VTBL_ENTRY)&(_ZTI7S7870C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7870C2D1Ev,_ZTv0_n12_N7S7870C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7870C2D0Ev,_ZTv0_n12_N7S7870C2D0Ev),
};
extern void _ZN7S7870C5D1Ev();
extern void _ZN7S7870C5D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7870C5__7S7870C1[] = {
  ABISELECT(328,164),
  ABISELECT(264,136),
  ABISELECT(288,144),
  0,
  (VTBL_ENTRY)&(_ZTI7S7870C5[0]),
  (VTBL_ENTRY)&_ZN7S7870C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7870C5D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S7870C5D1Ev,_ZTv0_n20_N7S7870C5D1Ev)();
extern void ABISELECT(_ZThn288_N7S7870C5D1Ev,_ZThn144_N7S7870C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7870C5D0Ev,_ZTv0_n20_N7S7870C5D0Ev)();
extern void ABISELECT(_ZThn288_N7S7870C5D0Ev,_ZThn144_N7S7870C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7870C6__7S7870C5__7S7870C1[] = {
  ABISELECT(-288,-144),
  ABISELECT(40,20),
  ABISELECT(-24,-8),
  ABISELECT(-288,-144),
  (VTBL_ENTRY)&(_ZTI7S7870C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7870C5D1Ev,_ZTv0_n20_N7S7870C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7870C5D0Ev,_ZTv0_n20_N7S7870C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7870C5D1Ev,_ZTv0_n12_N7S7870C5D1Ev)();
extern void ABISELECT(_ZThn264_N7S7870C5D1Ev,_ZThn136_N7S7870C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7870C5D0Ev,_ZTv0_n12_N7S7870C5D0Ev)();
extern void ABISELECT(_ZThn264_N7S7870C5D0Ev,_ZThn136_N7S7870C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S8087C2_nt__7S7870C5__7S7870C1[] = {
  ABISELECT(-264,-136),
  ABISELECT(-264,-136),
  (VTBL_ENTRY)&(_ZTI7S7870C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7870C5D1Ev,_ZTv0_n12_N7S7870C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7870C5D0Ev,_ZTv0_n12_N7S7870C5D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N7S7870C5D1Ev,_ZTv0_n16_N7S7870C5D1Ev)();
extern void ABISELECT(_ZThn328_N7S7870C5D1Ev,_ZThn164_N7S7870C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7870C5D0Ev,_ZTv0_n16_N7S7870C5D0Ev)();
extern void ABISELECT(_ZThn328_N7S7870C5D0Ev,_ZThn164_N7S7870C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7870C2__7S7870C5__7S7870C1[] = {
  ABISELECT(-328,-164),
  ABISELECT(-64,-28),
  ABISELECT(-328,-164),
  (VTBL_ENTRY)&(_ZTI7S7870C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7870C5D1Ev,_ZTv0_n16_N7S7870C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7870C5D0Ev,_ZTv0_n16_N7S7870C5D0Ev),
};
extern void _ZN7S7870C8D1Ev();
extern void _ZN7S7870C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7870C8__7S7870C1[] = {
  ABISELECT(184,96),
  0,
  (VTBL_ENTRY)&(_ZTI7S7870C8[0]),
  (VTBL_ENTRY)&_ZN7S7870C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7870C8D0Ev,
};
extern void _ZN7S7870C2D1Ev();
extern void _ZN7S7870C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7870C27S7870C8__A2__7S7870C1[] = {
  ABISELECT(168,88),
  0,
  (VTBL_ENTRY)&(_ZTI7S7870C2[0]),
  (VTBL_ENTRY)&_ZN7S7870C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7870C2D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7870C2D1Ev,_ZTv0_n12_N7S7870C2D1Ev)();
extern void ABISELECT(_ZThn168_N7S7870C2D1Ev,_ZThn88_N7S7870C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7870C2D0Ev,_ZTv0_n12_N7S7870C2D0Ev)();
extern void ABISELECT(_ZThn168_N7S7870C2D0Ev,_ZThn88_N7S7870C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S8087C2_nt__7S7870C27S7870C8__A2__7S7870C1[] = {
  ABISELECT(-168,-88),
  ABISELECT(-168,-88),
  (VTBL_ENTRY)&(_ZTI7S7870C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7870C2D1Ev,_ZTv0_n12_N7S7870C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7870C2D0Ev,_ZTv0_n12_N7S7870C2D0Ev),
};
extern void ABISELECT(_ZThn16_N7S7870C8D1Ev,_ZThn8_N7S7870C8D1Ev)();
extern void ABISELECT(_ZThn16_N7S7870C8D0Ev,_ZThn8_N7S7870C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7870C2__7S7870C8__7S7870C1[] = {
  ABISELECT(168,88),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7870C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S7870C8D1Ev,_ZThn8_N7S7870C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S7870C8D0Ev,_ZThn8_N7S7870C8D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7870C8D1Ev,_ZTv0_n12_N7S7870C8D1Ev)();
extern void ABISELECT(_ZThn184_N7S7870C8D1Ev,_ZThn96_N7S7870C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7870C8D0Ev,_ZTv0_n12_N7S7870C8D0Ev)();
extern void ABISELECT(_ZThn184_N7S7870C8D0Ev,_ZThn96_N7S7870C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S8087C2_nt__A1__7S7870C8__7S7870C1[] = {
  ABISELECT(-184,-96),
  ABISELECT(-184,-96),
  (VTBL_ENTRY)&(_ZTI7S7870C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7870C8D1Ev,_ZTv0_n12_N7S7870C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7870C8D0Ev,_ZTv0_n12_N7S7870C8D0Ev),
};
extern void _ZN7S7870C6D1Ev();
extern void _ZN7S7870C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7870C6__7S7870C1[] = {
  ABISELECT(40,20),
  ABISELECT(-24,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7870C6[0]),
  (VTBL_ENTRY)&_ZN7S7870C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7870C6D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7870C6D1Ev,_ZTv0_n12_N7S7870C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7870C6D0Ev,_ZTv0_n12_N7S7870C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S8087C2_nt__7S7870C6__7S7870C1[] = {
  ABISELECT(24,8),
  ABISELECT(24,8),
  (VTBL_ENTRY)&(_ZTI7S7870C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7870C6D1Ev,_ZTv0_n12_N7S7870C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7870C6D0Ev,_ZTv0_n12_N7S7870C6D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N7S7870C6D1Ev,_ZTv0_n16_N7S7870C6D1Ev)();
extern void ABISELECT(_ZThn40_N7S7870C6D1Ev,_ZThn20_N7S7870C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7870C6D0Ev,_ZTv0_n16_N7S7870C6D0Ev)();
extern void ABISELECT(_ZThn40_N7S7870C6D0Ev,_ZThn20_N7S7870C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7870C2__7S7870C6__7S7870C1[] = {
  ABISELECT(-40,-20),
  ABISELECT(-64,-28),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S7870C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7870C6D1Ev,_ZTv0_n16_N7S7870C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7870C6D0Ev,_ZTv0_n16_N7S7870C6D0Ev),
};
extern void _ZN7S7870C2D1Ev();
extern void _ZN7S7870C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7870C2__A1__7S7870C1[] = {
  ABISELECT(-64,-28),
  0,
  (VTBL_ENTRY)&(_ZTI7S7870C2[0]),
  (VTBL_ENTRY)&_ZN7S7870C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7870C2D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7870C2D1Ev,_ZTv0_n12_N7S7870C2D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7870C2D0Ev,_ZTv0_n12_N7S7870C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S8087C2_nt__7S7870C2__A1__7S7870C1[] = {
  ABISELECT(64,28),
  ABISELECT(64,28),
  (VTBL_ENTRY)&(_ZTI7S7870C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7870C2D1Ev,_ZTv0_n12_N7S7870C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7870C2D0Ev,_ZTv0_n12_N7S7870C2D0Ev),
};
static  VTT_ENTRY vtt_S7870C1[] = {
  {&(_ZTV7S7870C1[5]),  5,42},
  {&(_tg__ZTV7S7870C2__A__7S7870C1[3]),  3,5},
  {&(_tg__ZTV10S8087C2_nt__7S7870C2__A__7S7870C1[3]),  3,5},
  {&(_tg__ZTV7S7870C5__7S7870C1[5]),  5,7},
  {&(_tg__ZTV7S7870C6__7S7870C5__7S7870C1[5]),  5,7},
  {&(_tg__ZTV10S8087C2_nt__7S7870C5__7S7870C1[3]),  3,5},
  {&(_tg__ZTV7S7870C2__7S7870C5__7S7870C1[4]),  4,6},
  {&(_tg__ZTV7S7870C8__7S7870C1[3]),  3,5},
  {&(_tg__ZTV7S7870C27S7870C8__A2__7S7870C1[3]),  3,5},
  {&(_tg__ZTV10S8087C2_nt__7S7870C27S7870C8__A2__7S7870C1[3]),  3,5},
  {&(_tg__ZTV7S7870C2__7S7870C8__7S7870C1[3]),  3,5},
  {&(_tg__ZTV10S8087C2_nt__A1__7S7870C8__7S7870C1[3]),  3,5},
  {&(_ZTV7S7870C1[27]),  27,42},
  {&(_ZTV7S7870C1[12]),  12,42},
  {&(_ZTV7S7870C1[34]),  34,42},
  {&(_ZTV7S7870C1[40]),  40,42},
  {&(_ZTV7S7870C1[17]),  17,42},
  {&(_ZTV7S7870C1[22]),  22,42},
  {&(_tg__ZTV7S7870C6__7S7870C1[4]),  4,6},
  {&(_tg__ZTV10S8087C2_nt__7S7870C6__7S7870C1[3]),  3,5},
  {&(_tg__ZTV7S7870C2__7S7870C6__7S7870C1[4]),  4,6},
  {&(_tg__ZTV7S7870C2__A1__7S7870C1[3]),  3,5},
  {&(_tg__ZTV10S8087C2_nt__7S7870C2__A1__7S7870C1[3]),  3,5},
};
extern VTBL_ENTRY _ZTI7S7870C1[];
extern  VTBL_ENTRY _ZTV7S7870C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7870C1[];
static VTBL_ENTRY alt_thunk_names53[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7870C6D0Ev,_ZTv0_n16_N7S7870C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S7870C6D0Ev,_ZThn20_N7S7870C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7870C6D1Ev,_ZTv0_n16_N7S7870C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S7870C6D1Ev,_ZThn20_N7S7870C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7870C8D0Ev,_ZTv0_n12_N7S7870C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N7S7870C8D0Ev,_ZThn96_N7S7870C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7870C8D1Ev,_ZTv0_n12_N7S7870C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N7S7870C8D1Ev,_ZThn96_N7S7870C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7870C5D0Ev,_ZTv0_n16_N7S7870C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn328_N7S7870C5D0Ev,_ZThn164_N7S7870C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7870C5D1Ev,_ZTv0_n16_N7S7870C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn328_N7S7870C5D1Ev,_ZThn164_N7S7870C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7870C5D0Ev,_ZTv0_n12_N7S7870C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn264_N7S7870C5D0Ev,_ZThn136_N7S7870C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7870C5D1Ev,_ZTv0_n12_N7S7870C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn264_N7S7870C5D1Ev,_ZThn136_N7S7870C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7870C5D0Ev,_ZTv0_n20_N7S7870C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N7S7870C5D0Ev,_ZThn144_N7S7870C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7870C5D1Ev,_ZTv0_n20_N7S7870C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N7S7870C5D1Ev,_ZThn144_N7S7870C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7870C2D0Ev,_ZTv0_n12_N7S7870C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn168_N7S7870C2D0Ev,_ZThn88_N7S7870C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn280_N7S7870C2D0Ev,_ZThn144_N7S7870C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7870C2D1Ev,_ZTv0_n12_N7S7870C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn168_N7S7870C2D1Ev,_ZThn88_N7S7870C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn280_N7S7870C2D1Ev,_ZThn144_N7S7870C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7870C1D0Ev,_ZTv0_n16_N7S7870C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn344_N7S7870C1D0Ev,_ZThn172_N7S7870C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7870C1D1Ev,_ZTv0_n16_N7S7870C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn344_N7S7870C1D1Ev,_ZThn172_N7S7870C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7870C1D0Ev,_ZTv0_n20_N7S7870C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S7870C1D0Ev,_ZThn152_N7S7870C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7870C1D1Ev,_ZTv0_n20_N7S7870C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N7S7870C1D1Ev,_ZThn152_N7S7870C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7870C1D0Ev,_ZTv0_n12_N7S7870C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn280_N7S7870C1D0Ev,_ZThn144_N7S7870C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7870C1D1Ev,_ZTv0_n12_N7S7870C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn280_N7S7870C1D1Ev,_ZThn144_N7S7870C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7870C1 = {  "S7870C1", // class name
  bases_S7870C1, 9,
  &(vtc_S7870C1[0]), // expected_vtbl_contents
  &(vtt_S7870C1[0]), // expected_vtt_contents
  ABISELECT(368,180), // object size
  NSPAIRA(_ZTI7S7870C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S7870C1),42, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7870C1),23, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names53,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7869C5  : virtual S8087C2_nt {
  ::S21155C5_nt s7869c5f0;
  ~S7869C5(); // tgen
  S7869C5(); // tgen
};
//SIG(-1 S7869C5) C1{ VBC2{ vd m Fi} FU3{ m}}


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

static void Test_S7869C5()
{
  extern Class_Descriptor cd_S7869C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S7869C5, buf);
    S7869C5 *dp, &lv = *(dp=new (buf) S7869C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S7869C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7869C5)");
    check_base_class_offset(lv, (S8087C2_nt*), ABISELECT(16,8), "S7869C5");
    check_field_offset(lv, s7869c5f0, ABISELECT(8,4), "S7869C5.s7869c5f0");
    test_class_info(&lv, &cd_S7869C5);
    dp->~S7869C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7869C5(Test_S7869C5, "S7869C5", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S7869C5C1Ev();
extern void _ZN7S7869C5D1Ev();
Name_Map name_map_S7869C5[] = {
  NSPAIR(_ZN7S7869C5C1Ev),
  NSPAIR(_ZN7S7869C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8087C2_nt;
extern VTBL_ENTRY _ZTI10S8087C2_nt[];
extern  VTBL_ENTRY _ZTV10S8087C2_nt[];
static Base_Class bases_S7869C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8087C2_nt,    ABISELECT(16,8), //bcp->offset
    5, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7869C5[];
extern void _ZN7S7869C5D1Ev();
extern void _ZN7S7869C5D0Ev();
extern void ABISELECT(_ZTv0_n24_N7S7869C5D1Ev,_ZTv0_n12_N7S7869C5D1Ev)();
extern void ABISELECT(_ZThn16_N7S7869C5D1Ev,_ZThn8_N7S7869C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7869C5D0Ev,_ZTv0_n12_N7S7869C5D0Ev)();
extern void ABISELECT(_ZThn16_N7S7869C5D0Ev,_ZThn8_N7S7869C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7869C5[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7869C5[0]),
  (VTBL_ENTRY)&_ZN7S7869C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7869C5D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7869C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7869C5D1Ev,_ZTv0_n12_N7S7869C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7869C5D0Ev,_ZTv0_n12_N7S7869C5D0Ev),
};
extern VTBL_ENTRY _ZTV7S7869C5[];
static  VTT_ENTRY vtt_S7869C5[] = {
  {&(_ZTV7S7869C5[3]),  3,10},
  {&(_ZTV7S7869C5[8]),  8,10},
};
extern VTBL_ENTRY _ZTI7S7869C5[];
extern  VTBL_ENTRY _ZTV7S7869C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7869C5[];
static VTBL_ENTRY alt_thunk_names54[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7869C5D0Ev,_ZTv0_n12_N7S7869C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7869C5D0Ev,_ZThn8_N7S7869C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7869C5D1Ev,_ZTv0_n12_N7S7869C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7869C5D1Ev,_ZThn8_N7S7869C5D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7869C5 = {  "S7869C5", // class name
  bases_S7869C5, 1,
  &(vtc_S7869C5[0]), // expected_vtbl_contents
  &(vtt_S7869C5[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S7869C5),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7869C5),10, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7869C5),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names54,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7869C4  : S8087C2_nt , S7869C5 {
  ::S7870C9_nt s7869c4f0[10];
  ~S7869C4(); // tgen
  S7869C4(); // tgen
};
//SIG(-1 S7869C4) C1{ BC2{ vd m Fi} BC3{ VBC2 FU4{ m}} FU5{ m}[10]}


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

static void Test_S7869C4()
{
  extern Class_Descriptor cd_S7869C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,9)];
    init_test(&cd_S7869C4, buf);
    S7869C4 *dp, &lv = *(dp=new (buf) S7869C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,32), "sizeof(S7869C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7869C4)");
    /*is_ambiguous_... S7869C4::S8087C2_nt */ AMB_check_base_class_offset(lv, (S8087C2_nt*), 0, "S7869C4");
    check_base_class_offset(lv, (S8087C2_nt*)(S7869C5*), ABISELECT(40,24), "S7869C4");
    check_base_class_offset(lv, (S7869C5*), ABISELECT(16,8), "S7869C4");
    check_field_offset(lv, s7869c4f0, ABISELECT(25,13), "S7869C4.s7869c4f0");
    test_class_info(&lv, &cd_S7869C4);
    dp->~S7869C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7869C4(Test_S7869C4, "S7869C4", ABISELECT(56,32));

#else // __cplusplus

extern void _ZN7S7869C4C1Ev();
extern void _ZN7S7869C4D1Ev();
Name_Map name_map_S7869C4[] = {
  NSPAIR(_ZN7S7869C4C1Ev),
  NSPAIR(_ZN7S7869C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8087C2_nt;
extern VTBL_ENTRY _ZTI10S8087C2_nt[];
extern  VTBL_ENTRY _ZTV10S8087C2_nt[];
extern Class_Descriptor cd_S8087C2_nt;
extern VTBL_ENTRY _ZTI10S8087C2_nt[];
extern  VTBL_ENTRY _ZTV10S8087C2_nt[];
extern Class_Descriptor cd_S7869C5;
extern VTBL_ENTRY _ZTI7S7869C5[];
extern  VTBL_ENTRY _ZTV7S7869C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7869C5[];
static Base_Class bases_S7869C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8087C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S8087C2_nt,    ABISELECT(40,24), //bcp->offset
    10, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7869C5,    ABISELECT(16,8), //bcp->offset
    5, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7869C4[];
extern void _ZN7S7869C4D1Ev();
extern void _ZN7S7869C4D0Ev();
extern void ABISELECT(_ZThn16_N7S7869C4D1Ev,_ZThn8_N7S7869C4D1Ev)();
extern void ABISELECT(_ZThn16_N7S7869C4D0Ev,_ZThn8_N7S7869C4D0Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7869C4D1Ev,_ZTv0_n12_N7S7869C4D1Ev)();
extern void ABISELECT(_ZThn40_N7S7869C4D1Ev,_ZThn24_N7S7869C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7869C4D0Ev,_ZTv0_n12_N7S7869C4D0Ev)();
extern void ABISELECT(_ZThn40_N7S7869C4D0Ev,_ZThn24_N7S7869C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7869C4[] = {
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI7S7869C4[0]),
  (VTBL_ENTRY)&_ZN7S7869C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7869C4D0Ev,
  ABISELECT(24,16),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7869C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S7869C4D1Ev,_ZThn8_N7S7869C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S7869C4D0Ev,_ZThn8_N7S7869C4D0Ev),
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S7869C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7869C4D1Ev,_ZTv0_n12_N7S7869C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7869C4D0Ev,_ZTv0_n12_N7S7869C4D0Ev),
};
extern VTBL_ENTRY _ZTV7S7869C4[];
extern void _ZN7S7869C5D1Ev();
extern void _ZN7S7869C5D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7869C5__7S7869C4[] = {
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7869C5[0]),
  (VTBL_ENTRY)&_ZN7S7869C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7869C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7869C5D1Ev,_ZTv0_n12_N7S7869C5D1Ev)();
extern void ABISELECT(_ZThn24_N7S7869C5D1Ev,_ZThn16_N7S7869C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7869C5D0Ev,_ZTv0_n12_N7S7869C5D0Ev)();
extern void ABISELECT(_ZThn24_N7S7869C5D0Ev,_ZThn16_N7S7869C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S8087C2_nt__7S7869C5__7S7869C4[] = {
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI7S7869C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7869C5D1Ev,_ZTv0_n12_N7S7869C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7869C5D0Ev,_ZTv0_n12_N7S7869C5D0Ev),
};
static  VTT_ENTRY vtt_S7869C4[] = {
  {&(_ZTV7S7869C4[3]),  3,15},
  {&(_tg__ZTV7S7869C5__7S7869C4[3]),  3,5},
  {&(_tg__ZTV10S8087C2_nt__7S7869C5__7S7869C4[3]),  3,5},
  {&(_ZTV7S7869C4[8]),  8,15},
  {&(_ZTV7S7869C4[13]),  13,15},
};
extern VTBL_ENTRY _ZTI7S7869C4[];
extern  VTBL_ENTRY _ZTV7S7869C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7869C4[];
static VTBL_ENTRY alt_thunk_names55[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7869C5D0Ev,_ZTv0_n12_N7S7869C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7869C5D0Ev,_ZThn16_N7S7869C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7869C5D1Ev,_ZTv0_n12_N7S7869C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7869C5D1Ev,_ZThn16_N7S7869C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7869C4D0Ev,_ZTv0_n12_N7S7869C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S7869C4D0Ev,_ZThn24_N7S7869C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7869C4D1Ev,_ZTv0_n12_N7S7869C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S7869C4D1Ev,_ZThn24_N7S7869C4D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7869C4 = {  "S7869C4", // class name
  bases_S7869C4, 3,
  &(vtc_S7869C4[0]), // expected_vtbl_contents
  &(vtt_S7869C4[0]), // expected_vtt_contents
  ABISELECT(56,32), // object size
  NSPAIRA(_ZTI7S7869C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7869C4),15, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7869C4),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names55,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7869C9  : virtual S8087C2_nt , S7869C5 {
  virtual  ~S7869C9(); // _ZN7S7869C9D2Ev
  S7869C9(); // tgen
};
//SIG(-1 S7869C9) C1{ VBC2{ vd m Fi} BC3{ VBC2 FU4{ m}} vd}


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

static void Test_S7869C9()
{
  extern Class_Descriptor cd_S7869C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S7869C9, buf);
    S7869C9 *dp, &lv = *(dp=new (buf) S7869C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S7869C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7869C9)");
    check_base_class_offset(lv, (S8087C2_nt*), ABISELECT(16,8), "S7869C9");
    check_base_class_offset(lv, (S8087C2_nt*)(S7869C5*), ABISELECT(16,8), "S7869C9");
    check_base_class_offset(lv, (S7869C5*), 0, "S7869C9");
    test_class_info(&lv, &cd_S7869C9);
    dp->~S7869C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7869C9(Test_S7869C9, "S7869C9", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S7869C9C1Ev();
extern void _ZN7S7869C9D2Ev();
Name_Map name_map_S7869C9[] = {
  NSPAIR(_ZN7S7869C9C1Ev),
  NSPAIR(_ZN7S7869C9D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S8087C2_nt;
extern VTBL_ENTRY _ZTI10S8087C2_nt[];
extern  VTBL_ENTRY _ZTV10S8087C2_nt[];
extern Class_Descriptor cd_S7869C5;
extern VTBL_ENTRY _ZTI7S7869C5[];
extern  VTBL_ENTRY _ZTV7S7869C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7869C5[];
static Base_Class bases_S7869C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8087C2_nt,    ABISELECT(16,8), //bcp->offset
    5, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7869C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7869C9[];
extern void _ZN7S7869C9D1Ev();
extern void _ZN7S7869C9D0Ev();
extern void ABISELECT(_ZTv0_n24_N7S7869C9D1Ev,_ZTv0_n12_N7S7869C9D1Ev)();
extern void ABISELECT(_ZThn16_N7S7869C9D1Ev,_ZThn8_N7S7869C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7869C9D0Ev,_ZTv0_n12_N7S7869C9D0Ev)();
extern void ABISELECT(_ZThn16_N7S7869C9D0Ev,_ZThn8_N7S7869C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7869C9[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7869C9[0]),
  (VTBL_ENTRY)&_ZN7S7869C9D1Ev,
  (VTBL_ENTRY)&_ZN7S7869C9D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7869C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7869C9D1Ev,_ZTv0_n12_N7S7869C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7869C9D0Ev,_ZTv0_n12_N7S7869C9D0Ev),
};
extern VTBL_ENTRY _ZTV7S7869C9[];
extern void _ZN7S7869C5D1Ev();
extern void _ZN7S7869C5D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7869C5__7S7869C9[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7869C5[0]),
  (VTBL_ENTRY)&_ZN7S7869C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7869C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7869C5D1Ev,_ZTv0_n12_N7S7869C5D1Ev)();
extern void ABISELECT(_ZThn16_N7S7869C5D1Ev,_ZThn8_N7S7869C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7869C5D0Ev,_ZTv0_n12_N7S7869C5D0Ev)();
extern void ABISELECT(_ZThn16_N7S7869C5D0Ev,_ZThn8_N7S7869C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S8087C2_nt__7S7869C5__7S7869C9[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7869C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7869C5D1Ev,_ZTv0_n12_N7S7869C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7869C5D0Ev,_ZTv0_n12_N7S7869C5D0Ev),
};
static  VTT_ENTRY vtt_S7869C9[] = {
  {&(_ZTV7S7869C9[3]),  3,10},
  {&(_tg__ZTV7S7869C5__7S7869C9[3]),  3,5},
  {&(_tg__ZTV10S8087C2_nt__7S7869C5__7S7869C9[3]),  3,5},
  {&(_ZTV7S7869C9[8]),  8,10},
};
extern VTBL_ENTRY _ZTI7S7869C9[];
extern  VTBL_ENTRY _ZTV7S7869C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7869C9[];
static VTBL_ENTRY alt_thunk_names56[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7869C5D0Ev,_ZTv0_n12_N7S7869C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7869C5D0Ev,_ZThn8_N7S7869C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7869C5D1Ev,_ZTv0_n12_N7S7869C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7869C5D1Ev,_ZThn8_N7S7869C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7869C9D0Ev,_ZTv0_n12_N7S7869C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7869C9D0Ev,_ZThn8_N7S7869C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7869C9D1Ev,_ZTv0_n12_N7S7869C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7869C9D1Ev,_ZThn8_N7S7869C9D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7869C9 = {  "S7869C9", // class name
  bases_S7869C9, 2,
  &(vtc_S7869C9[0]), // expected_vtbl_contents
  &(vtt_S7869C9[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S7869C9),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7869C9),10, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7869C9),4, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names56,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7869C2  : virtual S8087C2_nt , S7869C4 , virtual S3352C8_nt , S7869C9 {
  ~S7869C2(); // tgen
  S7869C2(); // tgen
};
//SIG(-1 S7869C2) C1{ VBC2{ vd m Fi} BC3{ BC2 BC4{ VBC2 FU5{ m}} FU6{ m}[10]} VBC7{ m Fi} BC8{ VBC2 BC4 vd}}


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

static void Test_S7869C2()
{
  extern Class_Descriptor cd_S7869C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,12)];
    init_test(&cd_S7869C2, buf);
    S7869C2 *dp, &lv = *(dp=new (buf) S7869C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,44), "sizeof(S7869C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7869C2)");
    /*is_ambiguous_... S7869C2::S8087C2_nt */ AMB_check_base_class_offset(lv, (S8087C2_nt*), ABISELECT(56,32), "S7869C2");
    check_base_class_offset(lv, (S8087C2_nt*)(S7869C5*)(S7869C4*), ABISELECT(56,32), "S7869C2");
    check_base_class_offset(lv, (S8087C2_nt*)(S7869C9*), ABISELECT(56,32), "S7869C2");
    check_base_class_offset(lv, (S8087C2_nt*)(S7869C5*)(S7869C9*), ABISELECT(56,32), "S7869C2");
    /*is_ambiguous_... S7869C4::S8087C2_nt */ AMB_check_base_class_offset(lv, (S8087C2_nt*)(S7869C4*), 0, "S7869C2");
    check_base_class_offset(lv, (S7869C5*)(S7869C4*), ABISELECT(16,8), "S7869C2");
    check_base_class_offset(lv, (S7869C4*), 0, "S7869C2");
    check_base_class_offset(lv, (S3352C8_nt*), ABISELECT(68,40), "S7869C2");
    check_base_class_offset(lv, (S7869C5*)(S7869C9*), ABISELECT(40,24), "S7869C2");
    check_base_class_offset(lv, (S7869C9*), ABISELECT(40,24), "S7869C2");
    test_class_info(&lv, &cd_S7869C2);
    dp->~S7869C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7869C2(Test_S7869C2, "S7869C2", ABISELECT(72,44));

#else // __cplusplus

extern void _ZN7S7869C2C1Ev();
extern void _ZN7S7869C2D1Ev();
Name_Map name_map_S7869C2[] = {
  NSPAIR(_ZN7S7869C2C1Ev),
  NSPAIR(_ZN7S7869C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8087C2_nt;
extern VTBL_ENTRY _ZTI10S8087C2_nt[];
extern  VTBL_ENTRY _ZTV10S8087C2_nt[];
extern Class_Descriptor cd_S8087C2_nt;
extern VTBL_ENTRY _ZTI10S8087C2_nt[];
extern  VTBL_ENTRY _ZTV10S8087C2_nt[];
extern Class_Descriptor cd_S7869C5;
extern VTBL_ENTRY _ZTI7S7869C5[];
extern  VTBL_ENTRY _ZTV7S7869C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7869C5[];
extern Class_Descriptor cd_S7869C4;
extern VTBL_ENTRY _ZTI7S7869C4[];
extern  VTBL_ENTRY _ZTV7S7869C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7869C4[];
extern Class_Descriptor cd_S3352C8_nt;
extern VTBL_ENTRY _ZTI10S3352C8_nt[];
extern Class_Descriptor cd_S7869C5;
extern VTBL_ENTRY _ZTI7S7869C5[];
extern  VTBL_ENTRY _ZTV7S7869C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7869C5[];
extern Class_Descriptor cd_S7869C9;
extern VTBL_ENTRY _ZTI7S7869C9[];
extern  VTBL_ENTRY _ZTV7S7869C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7869C9[];
static Base_Class bases_S7869C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8087C2_nt,    ABISELECT(56,32), //bcp->offset
    16, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S8087C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7869C5,    ABISELECT(16,8), //bcp->offset
    6, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7869C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3352C8_nt,    ABISELECT(68,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
    -1, //immediately_derived
  1, 1},
  {&cd_S7869C5,    ABISELECT(40,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7869C9,    ABISELECT(40,24), //bcp->offset
    11, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7869C2[];
extern void _ZN7S7869C2D1Ev();
extern void _ZN7S7869C2D0Ev();
extern void ABISELECT(_ZThn16_N7S7869C2D1Ev,_ZThn8_N7S7869C2D1Ev)();
extern void ABISELECT(_ZThn16_N7S7869C2D0Ev,_ZThn8_N7S7869C2D0Ev)();
extern void ABISELECT(_ZThn40_N7S7869C2D1Ev,_ZThn24_N7S7869C2D1Ev)();
extern void ABISELECT(_ZThn40_N7S7869C2D0Ev,_ZThn24_N7S7869C2D0Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7869C2D1Ev,_ZTv0_n12_N7S7869C2D1Ev)();
extern void ABISELECT(_ZThn56_N7S7869C2D1Ev,_ZThn32_N7S7869C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7869C2D0Ev,_ZTv0_n12_N7S7869C2D0Ev)();
extern void ABISELECT(_ZThn56_N7S7869C2D0Ev,_ZThn32_N7S7869C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7869C2[] = {
  ABISELECT(68,40),
  ABISELECT(56,32),
  0,
  (VTBL_ENTRY)&(_ZTI7S7869C2[0]),
  (VTBL_ENTRY)&_ZN7S7869C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7869C2D0Ev,
  ABISELECT(40,24),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7869C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S7869C2D1Ev,_ZThn8_N7S7869C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S7869C2D0Ev,_ZThn8_N7S7869C2D0Ev),
  ABISELECT(16,8),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S7869C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S7869C2D1Ev,_ZThn24_N7S7869C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S7869C2D0Ev,_ZThn24_N7S7869C2D0Ev),
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI7S7869C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7869C2D1Ev,_ZTv0_n12_N7S7869C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7869C2D0Ev,_ZTv0_n12_N7S7869C2D0Ev),
};
extern VTBL_ENTRY _ZTV7S7869C2[];
extern void _ZN7S7869C4D1Ev();
extern void _ZN7S7869C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7869C4__7S7869C2[] = {
  ABISELECT(56,32),
  0,
  (VTBL_ENTRY)&(_ZTI7S7869C4[0]),
  (VTBL_ENTRY)&_ZN7S7869C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7869C4D0Ev,
};
extern void _ZN7S7869C5D1Ev();
extern void _ZN7S7869C5D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7869C57S7869C4__7S7869C2[] = {
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI7S7869C5[0]),
  (VTBL_ENTRY)&_ZN7S7869C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7869C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7869C5D1Ev,_ZTv0_n12_N7S7869C5D1Ev)();
extern void ABISELECT(_ZThn40_N7S7869C5D1Ev,_ZThn24_N7S7869C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7869C5D0Ev,_ZTv0_n12_N7S7869C5D0Ev)();
extern void ABISELECT(_ZThn40_N7S7869C5D0Ev,_ZThn24_N7S7869C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S8087C2_nt__7S7869C57S7869C4__7S7869C2[] = {
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S7869C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7869C5D1Ev,_ZTv0_n12_N7S7869C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7869C5D0Ev,_ZTv0_n12_N7S7869C5D0Ev),
};
extern void ABISELECT(_ZThn16_N7S7869C4D1Ev,_ZThn8_N7S7869C4D1Ev)();
extern void ABISELECT(_ZThn16_N7S7869C4D0Ev,_ZThn8_N7S7869C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7869C5__7S7869C4__7S7869C2[] = {
  ABISELECT(40,24),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7869C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S7869C4D1Ev,_ZThn8_N7S7869C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S7869C4D0Ev,_ZThn8_N7S7869C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7869C4D1Ev,_ZTv0_n12_N7S7869C4D1Ev)();
extern void ABISELECT(_ZThn56_N7S7869C4D1Ev,_ZThn32_N7S7869C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7869C4D0Ev,_ZTv0_n12_N7S7869C4D0Ev)();
extern void ABISELECT(_ZThn56_N7S7869C4D0Ev,_ZThn32_N7S7869C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S8087C2_nt__A1__7S7869C4__7S7869C2[] = {
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI7S7869C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7869C4D1Ev,_ZTv0_n12_N7S7869C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7869C4D0Ev,_ZTv0_n12_N7S7869C4D0Ev),
};
extern void _ZN7S7869C9D1Ev();
extern void _ZN7S7869C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7869C9__7S7869C2[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7869C9[0]),
  (VTBL_ENTRY)&_ZN7S7869C9D1Ev,
  (VTBL_ENTRY)&_ZN7S7869C9D0Ev,
};
extern void _ZN7S7869C5D1Ev();
extern void _ZN7S7869C5D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7869C57S7869C9__A1__7S7869C2[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7869C5[0]),
  (VTBL_ENTRY)&_ZN7S7869C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7869C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7869C5D1Ev,_ZTv0_n12_N7S7869C5D1Ev)();
extern void ABISELECT(_ZThn16_N7S7869C5D1Ev,_ZThn8_N7S7869C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7869C5D0Ev,_ZTv0_n12_N7S7869C5D0Ev)();
extern void ABISELECT(_ZThn16_N7S7869C5D0Ev,_ZThn8_N7S7869C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S8087C2_nt__7S7869C57S7869C9__A1__7S7869C2[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7869C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7869C5D1Ev,_ZTv0_n12_N7S7869C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7869C5D0Ev,_ZTv0_n12_N7S7869C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7869C9D1Ev,_ZTv0_n12_N7S7869C9D1Ev)();
extern void ABISELECT(_ZThn16_N7S7869C9D1Ev,_ZThn8_N7S7869C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7869C9D0Ev,_ZTv0_n12_N7S7869C9D0Ev)();
extern void ABISELECT(_ZThn16_N7S7869C9D0Ev,_ZThn8_N7S7869C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S8087C2_nt__7S7869C9__7S7869C2[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7869C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7869C9D1Ev,_ZTv0_n12_N7S7869C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7869C9D0Ev,_ZTv0_n12_N7S7869C9D0Ev),
};
static  VTT_ENTRY vtt_S7869C2[] = {
  {&(_ZTV7S7869C2[4]),  4,21},
  {&(_tg__ZTV7S7869C4__7S7869C2[3]),  3,5},
  {&(_tg__ZTV7S7869C57S7869C4__7S7869C2[3]),  3,5},
  {&(_tg__ZTV10S8087C2_nt__7S7869C57S7869C4__7S7869C2[3]),  3,5},
  {&(_tg__ZTV7S7869C5__7S7869C4__7S7869C2[3]),  3,5},
  {&(_tg__ZTV10S8087C2_nt__A1__7S7869C4__7S7869C2[3]),  3,5},
  {&(_tg__ZTV7S7869C9__7S7869C2[3]),  3,5},
  {&(_tg__ZTV7S7869C57S7869C9__A1__7S7869C2[3]),  3,5},
  {&(_tg__ZTV10S8087C2_nt__7S7869C57S7869C9__A1__7S7869C2[3]),  3,5},
  {&(_tg__ZTV10S8087C2_nt__7S7869C9__7S7869C2[3]),  3,5},
  {&(_ZTV7S7869C2[19]),  19,21},
  {&(_ZTV7S7869C2[9]),  9,21},
  {&(_ZTV7S7869C2[14]),  14,21},
};
extern VTBL_ENTRY _ZTI7S7869C2[];
extern  VTBL_ENTRY _ZTV7S7869C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7869C2[];
static VTBL_ENTRY alt_thunk_names57[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7869C9D0Ev,_ZTv0_n12_N7S7869C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7869C9D0Ev,_ZThn8_N7S7869C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7869C9D1Ev,_ZTv0_n12_N7S7869C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7869C9D1Ev,_ZThn8_N7S7869C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7869C4D0Ev,_ZTv0_n12_N7S7869C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N7S7869C4D0Ev,_ZThn32_N7S7869C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7869C4D1Ev,_ZTv0_n12_N7S7869C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N7S7869C4D1Ev,_ZThn32_N7S7869C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7869C5D0Ev,_ZTv0_n12_N7S7869C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7869C5D0Ev,_ZThn8_N7S7869C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S7869C5D0Ev,_ZThn24_N7S7869C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7869C5D1Ev,_ZTv0_n12_N7S7869C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7869C5D1Ev,_ZThn8_N7S7869C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn40_N7S7869C5D1Ev,_ZThn24_N7S7869C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7869C2D0Ev,_ZTv0_n12_N7S7869C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N7S7869C2D0Ev,_ZThn32_N7S7869C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7869C2D1Ev,_ZTv0_n12_N7S7869C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N7S7869C2D1Ev,_ZThn32_N7S7869C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7869C2 = {  "S7869C2", // class name
  bases_S7869C2, 7,
  &(vtc_S7869C2[0]), // expected_vtbl_contents
  &(vtt_S7869C2[0]), // expected_vtt_contents
  ABISELECT(72,44), // object size
  NSPAIRA(_ZTI7S7869C2),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S7869C2),21, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7869C2),13, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names57,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7869C1  : S7869C2 , S7869C9 {
  long double s7869c1f0;
  ::S21155C13 s7869c1f1;
  int s7869c1f2;
  virtual  ~S7869C1(); // _ZN7S7869C1D2Ev
  S7869C1(); // tgen
};
//SIG(1 S7869C1) C1{ BC2{ VBC3{ vd m Fi} BC4{ BC3 BC5{ VBC3 FU6{ m}} FU7{ m}[10]} VBC8{ m Fi} BC9{ VBC3 BC5 vd}} BC9 vd FD FC10{ VBC11{ BC3 BC12{ VBC3 FU6} FU6[10]} vd} Fi}


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

static void Test_S7869C1()
{
  extern Class_Descriptor cd_S7869C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(13,27)];
    init_test(&cd_S7869C1, buf);
    S7869C1 *dp, &lv = *(dp=new (buf) S7869C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,104), "sizeof(S7869C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7869C1)");
    /*is_ambiguous_... S7869C2::S8087C2_nt */ AMB_check_base_class_offset(lv, (S8087C2_nt*)(S7869C2*), ABISELECT(168,92), "S7869C1");
    check_base_class_offset(lv, (S8087C2_nt*)(S7869C5*)(S7869C4*)(S7869C2*), ABISELECT(168,92), "S7869C1");
    check_base_class_offset(lv, (S8087C2_nt*)(S7869C9*)(S7869C2*), ABISELECT(168,92), "S7869C1");
    check_base_class_offset(lv, (S8087C2_nt*)(S7869C5*)(S7869C9*)(S7869C2*), ABISELECT(168,92), "S7869C1");
    /*is_ambiguous_... S7869C1::S7869C9 */ AMB_check_base_class_offset(lv, (S8087C2_nt*)(S7869C9*), ABISELECT(168,92), "S7869C1");
    /*is_ambiguous_... S7869C1::S7869C9 */ AMB_check_base_class_offset(lv, (S8087C2_nt*)(S7869C5*)(S7869C9*), ABISELECT(168,92), "S7869C1");
    /*is_ambiguous_... S7869C4::S8087C2_nt */ AMB_check_base_class_offset(lv, (S8087C2_nt*)(S7869C4*)(S7869C2*), 0, "S7869C1");
    check_base_class_offset(lv, (S7869C5*)(S7869C4*)(S7869C2*), ABISELECT(16,8), "S7869C1");
    check_base_class_offset(lv, (S7869C4*)(S7869C2*), 0, "S7869C1");
    check_base_class_offset(lv, (S3352C8_nt*)(S7869C2*), ABISELECT(180,100), "S7869C1");
    check_base_class_offset(lv, (S7869C5*)(S7869C9*)(S7869C2*), ABISELECT(40,24), "S7869C1");
    check_base_class_offset(lv, (S7869C9*)(S7869C2*), ABISELECT(40,24), "S7869C1");
    check_base_class_offset(lv, (S7869C2*), 0, "S7869C1");
    /*is_ambiguous_... S7869C1::S7869C9 */ AMB_check_base_class_offset(lv, (S7869C5*)(S7869C9*), ABISELECT(56,32), "S7869C1");
    /*is_ambiguous_... S7869C1::S7869C9 */ AMB_check_base_class_offset(lv, (S7869C9*), ABISELECT(56,32), "S7869C1");
    check_field_offset(lv, s7869c1f0, ABISELECT(80,40), "S7869C1.s7869c1f0");
    check_field_offset(lv, s7869c1f1, ABISELECT(96,52), "S7869C1.s7869c1f1");
    check_field_offset(lv, s7869c1f2, ABISELECT(160,88), "S7869C1.s7869c1f2");
    test_class_info(&lv, &cd_S7869C1);
    dp->~S7869C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7869C1(Test_S7869C1, "S7869C1", ABISELECT(192,104));

#else // __cplusplus

extern void _ZN7S7869C1C1Ev();
extern void _ZN7S7869C1D2Ev();
Name_Map name_map_S7869C1[] = {
  NSPAIR(_ZN7S7869C1C1Ev),
  NSPAIR(_ZN7S7869C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S8087C2_nt;
extern VTBL_ENTRY _ZTI10S8087C2_nt[];
extern  VTBL_ENTRY _ZTV10S8087C2_nt[];
extern Class_Descriptor cd_S8087C2_nt;
extern VTBL_ENTRY _ZTI10S8087C2_nt[];
extern  VTBL_ENTRY _ZTV10S8087C2_nt[];
extern Class_Descriptor cd_S7869C5;
extern VTBL_ENTRY _ZTI7S7869C5[];
extern  VTBL_ENTRY _ZTV7S7869C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7869C5[];
extern Class_Descriptor cd_S7869C4;
extern VTBL_ENTRY _ZTI7S7869C4[];
extern  VTBL_ENTRY _ZTV7S7869C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7869C4[];
extern Class_Descriptor cd_S3352C8_nt;
extern VTBL_ENTRY _ZTI10S3352C8_nt[];
extern Class_Descriptor cd_S7869C5;
extern VTBL_ENTRY _ZTI7S7869C5[];
extern  VTBL_ENTRY _ZTV7S7869C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7869C5[];
extern Class_Descriptor cd_S7869C9;
extern VTBL_ENTRY _ZTI7S7869C9[];
extern  VTBL_ENTRY _ZTV7S7869C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7869C9[];
extern Class_Descriptor cd_S7869C2;
extern VTBL_ENTRY _ZTI7S7869C2[];
extern  VTBL_ENTRY _ZTV7S7869C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7869C2[];
extern Class_Descriptor cd_S7869C5;
extern VTBL_ENTRY _ZTI7S7869C5[];
extern  VTBL_ENTRY _ZTV7S7869C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7869C5[];
extern Class_Descriptor cd_S7869C9;
extern VTBL_ENTRY _ZTI7S7869C9[];
extern  VTBL_ENTRY _ZTV7S7869C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7869C9[];
static Base_Class bases_S7869C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8087C2_nt,    ABISELECT(168,92), //bcp->offset
    21, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S8087C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7869C5,    ABISELECT(16,8), //bcp->offset
    6, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7869C4,    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
    4, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S3352C8_nt,    ABISELECT(180,100), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7869C5,    ABISELECT(40,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7869C9,    ABISELECT(40,24), //bcp->offset
    11, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7869C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7869C5,    ABISELECT(56,32), //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
    8, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7869C9,    ABISELECT(56,32), //bcp->offset
    16, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7869C1[];
extern void _ZN7S7869C1D1Ev();
extern void _ZN7S7869C1D0Ev();
extern void ABISELECT(_ZThn16_N7S7869C1D1Ev,_ZThn8_N7S7869C1D1Ev)();
extern void ABISELECT(_ZThn16_N7S7869C1D0Ev,_ZThn8_N7S7869C1D0Ev)();
extern void ABISELECT(_ZThn40_N7S7869C1D1Ev,_ZThn24_N7S7869C1D1Ev)();
extern void ABISELECT(_ZThn40_N7S7869C1D0Ev,_ZThn24_N7S7869C1D0Ev)();
extern void ABISELECT(_ZThn56_N7S7869C1D1Ev,_ZThn32_N7S7869C1D1Ev)();
extern void ABISELECT(_ZThn56_N7S7869C1D0Ev,_ZThn32_N7S7869C1D0Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7869C1D1Ev,_ZTv0_n12_N7S7869C1D1Ev)();
extern void ABISELECT(_ZThn168_N7S7869C1D1Ev,_ZThn92_N7S7869C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7869C1D0Ev,_ZTv0_n12_N7S7869C1D0Ev)();
extern void ABISELECT(_ZThn168_N7S7869C1D0Ev,_ZThn92_N7S7869C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7869C1[] = {
  ABISELECT(180,100),
  ABISELECT(168,92),
  0,
  (VTBL_ENTRY)&(_ZTI7S7869C1[0]),
  (VTBL_ENTRY)&_ZN7S7869C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7869C1D0Ev,
  ABISELECT(152,84),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7869C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S7869C1D1Ev,_ZThn8_N7S7869C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S7869C1D0Ev,_ZThn8_N7S7869C1D0Ev),
  ABISELECT(128,68),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S7869C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S7869C1D1Ev,_ZThn24_N7S7869C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S7869C1D0Ev,_ZThn24_N7S7869C1D0Ev),
  ABISELECT(112,60),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI7S7869C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N7S7869C1D1Ev,_ZThn32_N7S7869C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N7S7869C1D0Ev,_ZThn32_N7S7869C1D0Ev),
  ABISELECT(-168,-92),
  ABISELECT(-168,-92),
  (VTBL_ENTRY)&(_ZTI7S7869C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7869C1D1Ev,_ZTv0_n12_N7S7869C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7869C1D0Ev,_ZTv0_n12_N7S7869C1D0Ev),
};
extern VTBL_ENTRY _ZTV7S7869C1[];
extern void _ZN7S7869C2D1Ev();
extern void _ZN7S7869C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7869C2__7S7869C1[] = {
  ABISELECT(180,100),
  ABISELECT(168,92),
  0,
  (VTBL_ENTRY)&(_ZTI7S7869C2[0]),
  (VTBL_ENTRY)&_ZN7S7869C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7869C2D0Ev,
};
extern void _ZN7S7869C4D1Ev();
extern void _ZN7S7869C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7869C47S7869C2__7S7869C1[] = {
  ABISELECT(168,92),
  0,
  (VTBL_ENTRY)&(_ZTI7S7869C4[0]),
  (VTBL_ENTRY)&_ZN7S7869C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7869C4D0Ev,
};
extern void _ZN7S7869C5D1Ev();
extern void _ZN7S7869C5D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7869C57S7869C47S7869C2__7S7869C1[] = {
  ABISELECT(152,84),
  0,
  (VTBL_ENTRY)&(_ZTI7S7869C5[0]),
  (VTBL_ENTRY)&_ZN7S7869C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7869C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7869C5D1Ev,_ZTv0_n12_N7S7869C5D1Ev)();
extern void ABISELECT(_ZThn152_N7S7869C5D1Ev,_ZThn84_N7S7869C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7869C5D0Ev,_ZTv0_n12_N7S7869C5D0Ev)();
extern void ABISELECT(_ZThn152_N7S7869C5D0Ev,_ZThn84_N7S7869C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S8087C2_nt__7S7869C57S7869C47S7869C2__7S7869C1[] = {
  ABISELECT(-152,-84),
  ABISELECT(-152,-84),
  (VTBL_ENTRY)&(_ZTI7S7869C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7869C5D1Ev,_ZTv0_n12_N7S7869C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7869C5D0Ev,_ZTv0_n12_N7S7869C5D0Ev),
};
extern void ABISELECT(_ZThn16_N7S7869C4D1Ev,_ZThn8_N7S7869C4D1Ev)();
extern void ABISELECT(_ZThn16_N7S7869C4D0Ev,_ZThn8_N7S7869C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7869C5__7S7869C47S7869C2__7S7869C1[] = {
  ABISELECT(152,84),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7869C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S7869C4D1Ev,_ZThn8_N7S7869C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S7869C4D0Ev,_ZThn8_N7S7869C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7869C4D1Ev,_ZTv0_n12_N7S7869C4D1Ev)();
extern void ABISELECT(_ZThn168_N7S7869C4D1Ev,_ZThn92_N7S7869C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7869C4D0Ev,_ZTv0_n12_N7S7869C4D0Ev)();
extern void ABISELECT(_ZThn168_N7S7869C4D0Ev,_ZThn92_N7S7869C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S8087C2_nt__A1__7S7869C47S7869C2__7S7869C1[] = {
  ABISELECT(-168,-92),
  ABISELECT(-168,-92),
  (VTBL_ENTRY)&(_ZTI7S7869C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7869C4D1Ev,_ZTv0_n12_N7S7869C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7869C4D0Ev,_ZTv0_n12_N7S7869C4D0Ev),
};
extern void _ZN7S7869C9D1Ev();
extern void _ZN7S7869C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7869C97S7869C2__7S7869C1[] = {
  ABISELECT(128,68),
  0,
  (VTBL_ENTRY)&(_ZTI7S7869C9[0]),
  (VTBL_ENTRY)&_ZN7S7869C9D1Ev,
  (VTBL_ENTRY)&_ZN7S7869C9D0Ev,
};
extern void _ZN7S7869C5D1Ev();
extern void _ZN7S7869C5D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7869C57S7869C97S7869C2__A1__7S7869C1[] = {
  ABISELECT(128,68),
  0,
  (VTBL_ENTRY)&(_ZTI7S7869C5[0]),
  (VTBL_ENTRY)&_ZN7S7869C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7869C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7869C5D1Ev,_ZTv0_n12_N7S7869C5D1Ev)();
extern void ABISELECT(_ZThn128_N7S7869C5D1Ev,_ZThn68_N7S7869C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7869C5D0Ev,_ZTv0_n12_N7S7869C5D0Ev)();
extern void ABISELECT(_ZThn128_N7S7869C5D0Ev,_ZThn68_N7S7869C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S8087C2_nt__7S7869C57S7869C97S7869C2__A1__7S7869C1[] = {
  ABISELECT(-128,-68),
  ABISELECT(-128,-68),
  (VTBL_ENTRY)&(_ZTI7S7869C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7869C5D1Ev,_ZTv0_n12_N7S7869C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7869C5D0Ev,_ZTv0_n12_N7S7869C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7869C9D1Ev,_ZTv0_n12_N7S7869C9D1Ev)();
extern void ABISELECT(_ZThn128_N7S7869C9D1Ev,_ZThn68_N7S7869C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7869C9D0Ev,_ZTv0_n12_N7S7869C9D0Ev)();
extern void ABISELECT(_ZThn128_N7S7869C9D0Ev,_ZThn68_N7S7869C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S8087C2_nt__7S7869C97S7869C2__7S7869C1[] = {
  ABISELECT(-128,-68),
  ABISELECT(-128,-68),
  (VTBL_ENTRY)&(_ZTI7S7869C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7869C9D1Ev,_ZTv0_n12_N7S7869C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7869C9D0Ev,_ZTv0_n12_N7S7869C9D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7869C2D1Ev,_ZTv0_n12_N7S7869C2D1Ev)();
extern void ABISELECT(_ZThn168_N7S7869C2D1Ev,_ZThn92_N7S7869C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7869C2D0Ev,_ZTv0_n12_N7S7869C2D0Ev)();
extern void ABISELECT(_ZThn168_N7S7869C2D0Ev,_ZThn92_N7S7869C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S8087C2_nt__7S7869C2__7S7869C1[] = {
  ABISELECT(-168,-92),
  ABISELECT(-168,-92),
  (VTBL_ENTRY)&(_ZTI7S7869C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7869C2D1Ev,_ZTv0_n12_N7S7869C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7869C2D0Ev,_ZTv0_n12_N7S7869C2D0Ev),
};
extern void ABISELECT(_ZThn16_N7S7869C2D1Ev,_ZThn8_N7S7869C2D1Ev)();
extern void ABISELECT(_ZThn16_N7S7869C2D0Ev,_ZThn8_N7S7869C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7869C57S7869C4__7S7869C2__7S7869C1[] = {
  ABISELECT(152,84),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7869C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S7869C2D1Ev,_ZThn8_N7S7869C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S7869C2D0Ev,_ZThn8_N7S7869C2D0Ev),
};
extern void ABISELECT(_ZThn40_N7S7869C2D1Ev,_ZThn24_N7S7869C2D1Ev)();
extern void ABISELECT(_ZThn40_N7S7869C2D0Ev,_ZThn24_N7S7869C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7869C9__7S7869C2__7S7869C1[] = {
  ABISELECT(128,68),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S7869C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S7869C2D1Ev,_ZThn24_N7S7869C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S7869C2D0Ev,_ZThn24_N7S7869C2D0Ev),
};
extern void _ZN7S7869C9D1Ev();
extern void _ZN7S7869C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7869C9__A1__7S7869C1[] = {
  ABISELECT(112,60),
  0,
  (VTBL_ENTRY)&(_ZTI7S7869C9[0]),
  (VTBL_ENTRY)&_ZN7S7869C9D1Ev,
  (VTBL_ENTRY)&_ZN7S7869C9D0Ev,
};
extern void _ZN7S7869C5D1Ev();
extern void _ZN7S7869C5D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7869C57S7869C9__A2__7S7869C1[] = {
  ABISELECT(112,60),
  0,
  (VTBL_ENTRY)&(_ZTI7S7869C5[0]),
  (VTBL_ENTRY)&_ZN7S7869C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7869C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7869C5D1Ev,_ZTv0_n12_N7S7869C5D1Ev)();
extern void ABISELECT(_ZThn112_N7S7869C5D1Ev,_ZThn60_N7S7869C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7869C5D0Ev,_ZTv0_n12_N7S7869C5D0Ev)();
extern void ABISELECT(_ZThn112_N7S7869C5D0Ev,_ZThn60_N7S7869C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S8087C2_nt__7S7869C57S7869C9__A2__7S7869C1[] = {
  ABISELECT(-112,-60),
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI7S7869C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7869C5D1Ev,_ZTv0_n12_N7S7869C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7869C5D0Ev,_ZTv0_n12_N7S7869C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S7869C9D1Ev,_ZTv0_n12_N7S7869C9D1Ev)();
extern void ABISELECT(_ZThn112_N7S7869C9D1Ev,_ZThn60_N7S7869C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7869C9D0Ev,_ZTv0_n12_N7S7869C9D0Ev)();
extern void ABISELECT(_ZThn112_N7S7869C9D0Ev,_ZThn60_N7S7869C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S8087C2_nt__7S7869C9__A1__7S7869C1[] = {
  ABISELECT(-112,-60),
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI7S7869C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7869C9D1Ev,_ZTv0_n12_N7S7869C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7869C9D0Ev,_ZTv0_n12_N7S7869C9D0Ev),
};
static  VTT_ENTRY vtt_S7869C1[] = {
  {&(_ZTV7S7869C1[4]),  4,26},
  {&(_tg__ZTV7S7869C2__7S7869C1[4]),  4,6},
  {&(_tg__ZTV7S7869C47S7869C2__7S7869C1[3]),  3,5},
  {&(_tg__ZTV7S7869C57S7869C47S7869C2__7S7869C1[3]),  3,5},
  {&(_tg__ZTV10S8087C2_nt__7S7869C57S7869C47S7869C2__7S7869C1[3]),  3,5},
  {&(_tg__ZTV7S7869C5__7S7869C47S7869C2__7S7869C1[3]),  3,5},
  {&(_tg__ZTV10S8087C2_nt__A1__7S7869C47S7869C2__7S7869C1[3]),  3,5},
  {&(_tg__ZTV7S7869C97S7869C2__7S7869C1[3]),  3,5},
  {&(_tg__ZTV7S7869C57S7869C97S7869C2__A1__7S7869C1[3]),  3,5},
  {&(_tg__ZTV10S8087C2_nt__7S7869C57S7869C97S7869C2__A1__7S7869C1[3]),  3,5},
  {&(_tg__ZTV10S8087C2_nt__7S7869C97S7869C2__7S7869C1[3]),  3,5},
  {&(_tg__ZTV10S8087C2_nt__7S7869C2__7S7869C1[3]),  3,5},
  {&(_tg__ZTV7S7869C57S7869C4__7S7869C2__7S7869C1[3]),  3,5},
  {&(_tg__ZTV7S7869C9__7S7869C2__7S7869C1[3]),  3,5},
  {&(_tg__ZTV7S7869C9__A1__7S7869C1[3]),  3,5},
  {&(_tg__ZTV7S7869C57S7869C9__A2__7S7869C1[3]),  3,5},
  {&(_tg__ZTV10S8087C2_nt__7S7869C57S7869C9__A2__7S7869C1[3]),  3,5},
  {&(_tg__ZTV10S8087C2_nt__7S7869C9__A1__7S7869C1[3]),  3,5},
  {&(_ZTV7S7869C1[24]),  24,26},
  {&(_ZTV7S7869C1[9]),  9,26},
  {&(_ZTV7S7869C1[14]),  14,26},
  {&(_ZTV7S7869C1[19]),  19,26},
};
extern VTBL_ENTRY _ZTI7S7869C1[];
extern  VTBL_ENTRY _ZTV7S7869C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7869C1[];
static VTBL_ENTRY alt_thunk_names58[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7869C2D0Ev,_ZTv0_n12_N7S7869C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn168_N7S7869C2D0Ev,_ZThn92_N7S7869C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7869C2D1Ev,_ZTv0_n12_N7S7869C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn168_N7S7869C2D1Ev,_ZThn92_N7S7869C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7869C9D0Ev,_ZTv0_n12_N7S7869C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7869C9D0Ev,_ZThn60_N7S7869C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N7S7869C9D0Ev,_ZThn68_N7S7869C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7869C9D1Ev,_ZTv0_n12_N7S7869C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7869C9D1Ev,_ZThn60_N7S7869C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N7S7869C9D1Ev,_ZThn68_N7S7869C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7869C4D0Ev,_ZTv0_n12_N7S7869C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn168_N7S7869C4D0Ev,_ZThn92_N7S7869C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7869C4D1Ev,_ZTv0_n12_N7S7869C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn168_N7S7869C4D1Ev,_ZThn92_N7S7869C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7869C5D0Ev,_ZTv0_n12_N7S7869C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7869C5D0Ev,_ZThn60_N7S7869C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N7S7869C5D0Ev,_ZThn68_N7S7869C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn152_N7S7869C5D0Ev,_ZThn84_N7S7869C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7869C5D1Ev,_ZTv0_n12_N7S7869C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S7869C5D1Ev,_ZThn60_N7S7869C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn128_N7S7869C5D1Ev,_ZThn68_N7S7869C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn152_N7S7869C5D1Ev,_ZThn84_N7S7869C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7869C1D0Ev,_ZTv0_n12_N7S7869C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn168_N7S7869C1D0Ev,_ZThn92_N7S7869C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7869C1D1Ev,_ZTv0_n12_N7S7869C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn168_N7S7869C1D1Ev,_ZThn92_N7S7869C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7869C1 = {  "S7869C1", // class name
  bases_S7869C1, 10,
  &(vtc_S7869C1[0]), // expected_vtbl_contents
  &(vtt_S7869C1[0]), // expected_vtt_contents
  ABISELECT(192,104), // object size
  NSPAIRA(_ZTI7S7869C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7869C1),26, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7869C1),22, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names58,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11711C2  {
  long s11711c2f0;
  short s11711c2f1[2];
  long s11711c2f2[2];
  short s11711c2f3;
  char s11711c2f4[32];
  short s11711c2f5;
};
//SIG(-1 S11711C2) C1{ Fl Fs[2] Fl[2] Fs Fc[32] Fs}



static void Test_S11711C2()
{
  {
    init_simple_test("S11711C2");
    S11711C2 lv;
    check2(sizeof(lv), ABISELECT(72,52), "sizeof(S11711C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11711C2)");
    check_field_offset(lv, s11711c2f0, 0, "S11711C2.s11711c2f0");
    check_field_offset(lv, s11711c2f1, ABISELECT(8,4), "S11711C2.s11711c2f1");
    check_field_offset(lv, s11711c2f2, ABISELECT(16,8), "S11711C2.s11711c2f2");
    check_field_offset(lv, s11711c2f3, ABISELECT(32,16), "S11711C2.s11711c2f3");
    check_field_offset(lv, s11711c2f4, ABISELECT(34,18), "S11711C2.s11711c2f4");
    check_field_offset(lv, s11711c2f5, ABISELECT(66,50), "S11711C2.s11711c2f5");
  }
}
static Arrange_To_Call_Me vS11711C2(Test_S11711C2, "S11711C2", ABISELECT(72,52));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11711C1  {
  ::S11711C2 s11711c1f0;
  long s11711c1f1;
  ::S12626C5 s11711c1f2;
  void *s11711c1f3;
  void *s11711c1f4;
  void *s11711c1f5;
};
//SIG(1 S11711C1) C1{ FC2{ Fl Fs[2] Fl[2] Fs Fc[32] Fs} Fl FU3{ FC4{ FC5{ Fp FL} Fp FC5} FC6{ Fc Fc Fc Fc Fc FC7{ Fp Fp} FC7}} Fp Fp Fp}



static void Test_S11711C1()
{
  {
    init_simple_test("S11711C1");
    S11711C1 lv;
    check2(sizeof(lv), ABISELECT(144,96), "sizeof(S11711C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11711C1)");
    check_field_offset(lv, s11711c1f0, 0, "S11711C1.s11711c1f0");
    check_field_offset(lv, s11711c1f1, ABISELECT(72,52), "S11711C1.s11711c1f1");
    check_field_offset(lv, s11711c1f2, ABISELECT(80,56), "S11711C1.s11711c1f2");
    check_field_offset(lv, s11711c1f3, ABISELECT(120,84), "S11711C1.s11711c1f3");
    check_field_offset(lv, s11711c1f4, ABISELECT(128,88), "S11711C1.s11711c1f4");
    check_field_offset(lv, s11711c1f5, ABISELECT(136,92), "S11711C1.s11711c1f5");
  }
}
static Arrange_To_Call_Me vS11711C1(Test_S11711C1, "S11711C1", ABISELECT(144,96));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15144C3  : S17457C4 {
  ::S5062C9_nt s15144c3f0;
};
//SIG(-1 S15144C3) C1{ BC2{ m Fp Fi} FC3{ FL[4]}}



static void Test_S15144C3()
{
  extern Class_Descriptor cd_S15144C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,11)];
    init_test(&cd_S15144C3, buf);
    S15144C3 &lv = *(new (buf) S15144C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,40), "sizeof(S15144C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15144C3)");
    check_base_class_offset(lv, (S17457C4*), 0, "S15144C3");
    check_field_offset(lv, s15144c3f0, ABISELECT(16,8), "S15144C3.s15144c3f0");
    test_class_info(&lv, &cd_S15144C3);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS15144C3(Test_S15144C3, "S15144C3", ABISELECT(48,40));

#else // __cplusplus

extern Class_Descriptor cd_S17457C4;
static Base_Class bases_S15144C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S17457C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S15144C3 = {  "S15144C3", // class name
  bases_S15144C3, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(48,40), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15144C2  {
  int s15144c2f0;
  ::S15144C3 s15144c2f1;
  void  mf15144c2(); // _ZN8S15144C29mf15144c2Ev
};
//SIG(-1 S15144C2) C1{ m Fi FC2{ BC3{ m Fp Fi} FC4{ FL[4]}}}


void  S15144C2 ::mf15144c2(){}

static void Test_S15144C2()
{
  {
    init_simple_test("S15144C2");
    S15144C2 lv;
    check2(sizeof(lv), ABISELECT(56,44), "sizeof(S15144C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15144C2)");
    check_field_offset(lv, s15144c2f0, 0, "S15144C2.s15144c2f0");
    check_field_offset(lv, s15144c2f1, ABISELECT(8,4), "S15144C2.s15144c2f1");
  }
}
static Arrange_To_Call_Me vS15144C2(Test_S15144C2, "S15144C2", ABISELECT(56,44));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15144C7_nt  : S17457C2_nt {
};
//SIG(-1 S15144C7_nt) C1{ BC2{ m Fp Fi}}



//skip512 S15144C7_nt

#else // __cplusplus

extern Class_Descriptor cd_S17457C2_nt;
static Base_Class bases_S15144C7_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S17457C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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  S15144C6_nt  {
  int s15144c6f0;
  ::S15144C7_nt s15144c6f1;
  void  mf15144c6(); // _ZN11S15144C6_nt9mf15144c6Ev
};
//SIG(-1 S15144C6_nt) C1{ m Fi FC2{ BC3{ m Fp Fi}}}


void  S15144C6_nt ::mf15144c6(){}

//skip512 S15144C6_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15144C1  {
  unsigned char s15144c1f0:1;
  unsigned char s15144c1f1:1;
  unsigned char s15144c1f2:1;
  unsigned char s15144c1f3:1;
  int s15144c1f4[2];
  void *s15144c1f5;
  ::S15144C2 s15144c1f6;
  ::S15144C6_nt s15144c1f7;
  void *s15144c1f8[7];
  void  mf15144c1(); // _ZN8S15144C19mf15144c1Ev
};
//SIG(1 S15144C1) C1{ m Fc:1 Fc:1 Fc:1 Fc:1 Fi[2] Fp FC2{ m Fi FC3{ BC4{ m Fp Fi} FC5{ FL[4]}}} FC6{ m Fi FC7{ BC8{ m Fp Fi}}} Fp[7]}


void  S15144C1 ::mf15144c1(){}

static void Test_S15144C1()
{
  {
    init_simple_test("S15144C1");
    static S15144C1 lv;
    check2(sizeof(lv), ABISELECT(160,100), "sizeof(S15144C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15144C1)");
    set_bf_and_test(lv, s15144c1f0, 0, 0, 1, 1, "S15144C1");
    set_bf_and_test(lv, s15144c1f1, 0, 1, 1, 1, "S15144C1");
    set_bf_and_test(lv, s15144c1f2, 0, 2, 1, 1, "S15144C1");
    set_bf_and_test(lv, s15144c1f3, 0, 3, 1, 1, "S15144C1");
    check_field_offset(lv, s15144c1f4, 4, "S15144C1.s15144c1f4");
    check_field_offset(lv, s15144c1f5, ABISELECT(16,12), "S15144C1.s15144c1f5");
    check_field_offset(lv, s15144c1f6, ABISELECT(24,16), "S15144C1.s15144c1f6");
    check_field_offset(lv, s15144c1f7, ABISELECT(80,60), "S15144C1.s15144c1f7");
    check_field_offset(lv, s15144c1f8, ABISELECT(104,72), "S15144C1.s15144c1f8");
  }
}
static Arrange_To_Call_Me vS15144C1(Test_S15144C1, "S15144C1", ABISELECT(160,100));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16584C1  {
  int s16584c1f0;
  char s16584c1f1[2];
  void *s16584c1f2[2];
  ::S2120C37 s16584c1f3;
  ::S4761C8_nt s16584c1f4;
  __tsi64 s16584c1f5;
  void *s16584c1f6[3];
  int s16584c1f7;
  void  mf16584c1(); // _ZN8S16584C19mf16584c1Ev
};
//SIG(1 S16584C1) C1{ m Fi Fc[2] Fp[2] FC2{ m Fp Fi[2] FC3{ m}} FC4{ FC5{ FC6{ Fc[20]} Fc[16]} Fl[3] Fi[2] FC7{ Fi[4]}} FL Fp[3] Fi}


void  S16584C1 ::mf16584c1(){}

static void Test_S16584C1()
{
  {
    init_simple_test("S16584C1");
    S16584C1 lv;
    check2(sizeof(lv), ABISELECT(176,128), "sizeof(S16584C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16584C1)");
    check_field_offset(lv, s16584c1f0, 0, "S16584C1.s16584c1f0");
    check_field_offset(lv, s16584c1f1, 4, "S16584C1.s16584c1f1");
    check_field_offset(lv, s16584c1f2, 8, "S16584C1.s16584c1f2");
    check_field_offset(lv, s16584c1f3, ABISELECT(24,16), "S16584C1.s16584c1f3");
    check_field_offset(lv, s16584c1f4, ABISELECT(48,32), "S16584C1.s16584c1f4");
    check_field_offset(lv, s16584c1f5, ABISELECT(136,104), "S16584C1.s16584c1f5");
    check_field_offset(lv, s16584c1f6, ABISELECT(144,112), "S16584C1.s16584c1f6");
    check_field_offset(lv, s16584c1f7, ABISELECT(168,124), "S16584C1.s16584c1f7");
  }
}
static Arrange_To_Call_Me vS16584C1(Test_S16584C1, "S16584C1", ABISELECT(176,128));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8509C2_nt  {
  void *s8509c2f0[4];
  virtual  ~S8509C2_nt(); // _ZN10S8509C2_ntD1Ev
  virtual void  v10(); // _ZN10S8509C2_nt3v10Ev
  virtual void  v11(); // _ZN10S8509C2_nt3v11Ev
  virtual void  v12(); // _ZN10S8509C2_nt3v12Ev
  virtual void  v13(); // _ZN10S8509C2_nt3v13Ev
  S8509C2_nt(); // tgen
};
//SIG(-1 S8509C2_nt) C1{ vd v1 v2 v3 v4 Fp[4]}


 S8509C2_nt ::~S8509C2_nt(){ note_dtor("S8509C2_nt", this);}
void  S8509C2_nt ::v10(){vfunc_called(this, "_ZN10S8509C2_nt3v10Ev");}
void  S8509C2_nt ::v11(){vfunc_called(this, "_ZN10S8509C2_nt3v11Ev");}
void  S8509C2_nt ::v12(){vfunc_called(this, "_ZN10S8509C2_nt3v12Ev");}
void  S8509C2_nt ::v13(){vfunc_called(this, "_ZN10S8509C2_nt3v13Ev");}
S8509C2_nt ::S8509C2_nt(){ note_ctor("S8509C2_nt", this);} // tgen

//skip512 S8509C2_nt

#else // __cplusplus

extern void _ZN10S8509C2_ntC1Ev();
extern void _ZN10S8509C2_ntD1Ev();
Name_Map name_map_S8509C2_nt[] = {
  NSPAIR(_ZN10S8509C2_ntC1Ev),
  NSPAIR(_ZN10S8509C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S8509C2_nt[];
extern void _ZN10S8509C2_ntD1Ev();
extern void _ZN10S8509C2_ntD0Ev();
extern void _ZN10S8509C2_nt3v10Ev();
extern void _ZN10S8509C2_nt3v11Ev();
extern void _ZN10S8509C2_nt3v12Ev();
extern void _ZN10S8509C2_nt3v13Ev();
static  VTBL_ENTRY vtc_S8509C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S8509C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S8509C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S8509C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S8509C2_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S8509C2_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S8509C2_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S8509C2_nt3v13Ev,
};
extern VTBL_ENTRY _ZTI10S8509C2_nt[];
VTBL_ENTRY *P__ZTI10S8509C2_nt = _ZTI10S8509C2_nt; 
extern  VTBL_ENTRY _ZTV10S8509C2_nt[];
Class_Descriptor cd_S8509C2_nt = {  "S8509C2_nt", // class name
  0,0,//no base classes
  &(vtc_S8509C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI10S8509C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S8509C2_nt),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8509C3  {
  virtual  ~S8509C3(); // _ZN7S8509C3D1Ev
  virtual void  v14(); // _ZN7S8509C33v14Ev
  S8509C3(); // tgen
};
//SIG(-1 S8509C3) C1{ vd v1}


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

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

#else // __cplusplus

extern void _ZN7S8509C3C1Ev();
extern void _ZN7S8509C3D1Ev();
Name_Map name_map_S8509C3[] = {
  NSPAIR(_ZN7S8509C3C1Ev),
  NSPAIR(_ZN7S8509C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S8509C3[];
extern void _ZN7S8509C3D1Ev();
extern void _ZN7S8509C3D0Ev();
extern void _ZN7S8509C33v14Ev();
static  VTBL_ENTRY vtc_S8509C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8509C3[0]),
  (VTBL_ENTRY)&_ZN7S8509C3D1Ev,
  (VTBL_ENTRY)&_ZN7S8509C3D0Ev,
  (VTBL_ENTRY)&_ZN7S8509C33v14Ev,
};
extern VTBL_ENTRY _ZTI7S8509C3[];
extern  VTBL_ENTRY _ZTV7S8509C3[];
Class_Descriptor cd_S8509C3 = {  "S8509C3", // class name
  0,0,//no base classes
  &(vtc_S8509C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S8509C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S8509C3),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  S8509C4  {
  virtual  ~S8509C4(); // _ZN7S8509C4D1Ev
  virtual void  v15(); // _ZN7S8509C43v15Ev
  virtual void  v16(); // _ZN7S8509C43v16Ev
  S8509C4(); // tgen
};
//SIG(-1 S8509C4) C1{ vd v1 v2}


 S8509C4 ::~S8509C4(){ note_dtor("S8509C4", this);}
void  S8509C4 ::v15(){vfunc_called(this, "_ZN7S8509C43v15Ev");}
void  S8509C4 ::v16(){vfunc_called(this, "_ZN7S8509C43v16Ev");}
S8509C4 ::S8509C4(){ note_ctor("S8509C4", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S8509C4C1Ev();
extern void _ZN7S8509C4D1Ev();
Name_Map name_map_S8509C4[] = {
  NSPAIR(_ZN7S8509C4C1Ev),
  NSPAIR(_ZN7S8509C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S8509C4[];
extern void _ZN7S8509C4D1Ev();
extern void _ZN7S8509C4D0Ev();
extern void _ZN7S8509C43v15Ev();
extern void _ZN7S8509C43v16Ev();
static  VTBL_ENTRY vtc_S8509C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8509C4[0]),
  (VTBL_ENTRY)&_ZN7S8509C4D1Ev,
  (VTBL_ENTRY)&_ZN7S8509C4D0Ev,
  (VTBL_ENTRY)&_ZN7S8509C43v15Ev,
  (VTBL_ENTRY)&_ZN7S8509C43v16Ev,
};
extern VTBL_ENTRY _ZTI7S8509C4[];
extern  VTBL_ENTRY _ZTV7S8509C4[];
Class_Descriptor cd_S8509C4 = {  "S8509C4", // class name
  0,0,//no base classes
  &(vtc_S8509C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S8509C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S8509C4),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  S8509C5  {
  virtual  ~S8509C5(); // _ZN7S8509C5D1Ev
  virtual void  v17(); // _ZN7S8509C53v17Ev
  virtual void  v18(); // _ZN7S8509C53v18Ev
  S8509C5(); // tgen
};
//SIG(-1 S8509C5) C1{ vd v1 v2}


 S8509C5 ::~S8509C5(){ note_dtor("S8509C5", this);}
void  S8509C5 ::v17(){vfunc_called(this, "_ZN7S8509C53v17Ev");}
void  S8509C5 ::v18(){vfunc_called(this, "_ZN7S8509C53v18Ev");}
S8509C5 ::S8509C5(){ note_ctor("S8509C5", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S8509C5C1Ev();
extern void _ZN7S8509C5D1Ev();
Name_Map name_map_S8509C5[] = {
  NSPAIR(_ZN7S8509C5C1Ev),
  NSPAIR(_ZN7S8509C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S8509C5[];
extern void _ZN7S8509C5D1Ev();
extern void _ZN7S8509C5D0Ev();
extern void _ZN7S8509C53v17Ev();
extern void _ZN7S8509C53v18Ev();
static  VTBL_ENTRY vtc_S8509C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8509C5[0]),
  (VTBL_ENTRY)&_ZN7S8509C5D1Ev,
  (VTBL_ENTRY)&_ZN7S8509C5D0Ev,
  (VTBL_ENTRY)&_ZN7S8509C53v17Ev,
  (VTBL_ENTRY)&_ZN7S8509C53v18Ev,
};
extern VTBL_ENTRY _ZTI7S8509C5[];
extern  VTBL_ENTRY _ZTV7S8509C5[];
Class_Descriptor cd_S8509C5 = {  "S8509C5", // class name
  0,0,//no base classes
  &(vtc_S8509C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S8509C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S8509C5),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  S8509C1  : S8509C2_nt , S8509C3 , S8509C4 , S8509C5 {
  virtual void  v1(); // _ZN7S8509C12v1Ev
  virtual void  v2(); // _ZN7S8509C12v2Ev
  virtual void  v3(); // _ZN7S8509C12v3Ev
  virtual void  v4(); // _ZN7S8509C12v4Ev
  virtual void  v5(); // _ZN7S8509C12v5Ev
  virtual void  v6(); // _ZN7S8509C12v6Ev
  virtual void  v7(); // _ZN7S8509C12v7Ev
  virtual void  v8(); // _ZN7S8509C12v8Ev
  virtual void  v9(); // _ZN7S8509C12v9Ev
  ~S8509C1(); // tgen
  S8509C1(); // tgen
};
//SIG(1 S8509C1) C1{ BC2{ vd v10 v11 v12 v13 Fp[4]} BC3{ vd v14} BC4{ vd v15 v16} BC5{ vd v17 v18} v1 v2 v3 v4 v5 v6 v7 v8 v9}


void  S8509C1 ::v1(){vfunc_called(this, "_ZN7S8509C12v1Ev");}
void  S8509C1 ::v2(){vfunc_called(this, "_ZN7S8509C12v2Ev");}
void  S8509C1 ::v3(){vfunc_called(this, "_ZN7S8509C12v3Ev");}
void  S8509C1 ::v4(){vfunc_called(this, "_ZN7S8509C12v4Ev");}
void  S8509C1 ::v5(){vfunc_called(this, "_ZN7S8509C12v5Ev");}
void  S8509C1 ::v6(){vfunc_called(this, "_ZN7S8509C12v6Ev");}
void  S8509C1 ::v7(){vfunc_called(this, "_ZN7S8509C12v7Ev");}
void  S8509C1 ::v8(){vfunc_called(this, "_ZN7S8509C12v8Ev");}
void  S8509C1 ::v9(){vfunc_called(this, "_ZN7S8509C12v9Ev");}
S8509C1 ::~S8509C1(){ note_dtor("S8509C1", this);} // tgen
S8509C1 ::S8509C1(){ note_ctor("S8509C1", this);} // tgen

static void Test_S8509C1()
{
  extern Class_Descriptor cd_S8509C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[9];
    init_test(&cd_S8509C1, buf);
    S8509C1 *dp, &lv = *(dp=new (buf) S8509C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S8509C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8509C1)");
    check_base_class_offset(lv, (S8509C2_nt*), 0, "S8509C1");
    check_base_class_offset(lv, (S8509C3*), ABISELECT(40,20), "S8509C1");
    check_base_class_offset(lv, (S8509C4*), ABISELECT(48,24), "S8509C1");
    check_base_class_offset(lv, (S8509C5*), ABISELECT(56,28), "S8509C1");
    test_class_info(&lv, &cd_S8509C1);
    dp->~S8509C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8509C1(Test_S8509C1, "S8509C1", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN7S8509C1C1Ev();
extern void _ZN7S8509C1D1Ev();
Name_Map name_map_S8509C1[] = {
  NSPAIR(_ZN7S8509C1C1Ev),
  NSPAIR(_ZN7S8509C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8509C2_nt;
extern VTBL_ENTRY _ZTI10S8509C2_nt[];
extern  VTBL_ENTRY _ZTV10S8509C2_nt[];
extern Class_Descriptor cd_S8509C3;
extern VTBL_ENTRY _ZTI7S8509C3[];
extern  VTBL_ENTRY _ZTV7S8509C3[];
extern Class_Descriptor cd_S8509C4;
extern VTBL_ENTRY _ZTI7S8509C4[];
extern  VTBL_ENTRY _ZTV7S8509C4[];
extern Class_Descriptor cd_S8509C5;
extern VTBL_ENTRY _ZTI7S8509C5[];
extern  VTBL_ENTRY _ZTV7S8509C5[];
static Base_Class bases_S8509C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8509C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S8509C3,    ABISELECT(40,20), //bcp->offset
    17, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S8509C4,    ABISELECT(48,24), //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
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S8509C5,    ABISELECT(56,28), //bcp->offset
    28, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8509C1[];
extern void _ZN7S8509C1D1Ev();
extern void _ZN7S8509C1D0Ev();
extern void _ZN10S8509C2_nt3v10Ev();
extern void _ZN10S8509C2_nt3v11Ev();
extern void _ZN10S8509C2_nt3v12Ev();
extern void _ZN10S8509C2_nt3v13Ev();
extern void _ZN7S8509C12v1Ev();
extern void _ZN7S8509C12v2Ev();
extern void _ZN7S8509C12v3Ev();
extern void _ZN7S8509C12v4Ev();
extern void _ZN7S8509C12v5Ev();
extern void _ZN7S8509C12v6Ev();
extern void _ZN7S8509C12v7Ev();
extern void _ZN7S8509C12v8Ev();
extern void _ZN7S8509C12v9Ev();
extern void ABISELECT(_ZThn40_N7S8509C1D1Ev,_ZThn20_N7S8509C1D1Ev)();
extern void ABISELECT(_ZThn40_N7S8509C1D0Ev,_ZThn20_N7S8509C1D0Ev)();
extern void _ZN7S8509C33v14Ev();
extern void ABISELECT(_ZThn48_N7S8509C1D1Ev,_ZThn24_N7S8509C1D1Ev)();
extern void ABISELECT(_ZThn48_N7S8509C1D0Ev,_ZThn24_N7S8509C1D0Ev)();
extern void _ZN7S8509C43v15Ev();
extern void _ZN7S8509C43v16Ev();
extern void ABISELECT(_ZThn56_N7S8509C1D1Ev,_ZThn28_N7S8509C1D1Ev)();
extern void ABISELECT(_ZThn56_N7S8509C1D0Ev,_ZThn28_N7S8509C1D0Ev)();
extern void _ZN7S8509C53v17Ev();
extern void _ZN7S8509C53v18Ev();
static  VTBL_ENTRY vtc_S8509C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8509C1[0]),
  (VTBL_ENTRY)&_ZN7S8509C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8509C1D0Ev,
  (VTBL_ENTRY)&_ZN10S8509C2_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S8509C2_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S8509C2_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S8509C2_nt3v13Ev,
  (VTBL_ENTRY)&_ZN7S8509C12v1Ev,
  (VTBL_ENTRY)&_ZN7S8509C12v2Ev,
  (VTBL_ENTRY)&_ZN7S8509C12v3Ev,
  (VTBL_ENTRY)&_ZN7S8509C12v4Ev,
  (VTBL_ENTRY)&_ZN7S8509C12v5Ev,
  (VTBL_ENTRY)&_ZN7S8509C12v6Ev,
  (VTBL_ENTRY)&_ZN7S8509C12v7Ev,
  (VTBL_ENTRY)&_ZN7S8509C12v8Ev,
  (VTBL_ENTRY)&_ZN7S8509C12v9Ev,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S8509C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S8509C1D1Ev,_ZThn20_N7S8509C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S8509C1D0Ev,_ZThn20_N7S8509C1D0Ev),
  (VTBL_ENTRY)&_ZN7S8509C33v14Ev,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S8509C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N7S8509C1D1Ev,_ZThn24_N7S8509C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N7S8509C1D0Ev,_ZThn24_N7S8509C1D0Ev),
  (VTBL_ENTRY)&_ZN7S8509C43v15Ev,
  (VTBL_ENTRY)&_ZN7S8509C43v16Ev,
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI7S8509C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N7S8509C1D1Ev,_ZThn28_N7S8509C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N7S8509C1D0Ev,_ZThn28_N7S8509C1D0Ev),
  (VTBL_ENTRY)&_ZN7S8509C53v17Ev,
  (VTBL_ENTRY)&_ZN7S8509C53v18Ev,
};
extern VTBL_ENTRY _ZTI7S8509C1[];
extern  VTBL_ENTRY _ZTV7S8509C1[];
Class_Descriptor cd_S8509C1 = {  "S8509C1", // class name
  bases_S8509C1, 4,
  &(vtc_S8509C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI7S8509C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S8509C1),34, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

union  S18460C2  {
  int s18460c2f0;
  short s18460c2f1;
};
//SIG(1 S18460C2) U1{ Fi Fs}

#endif // __cplusplus
#ifdef __cplusplus

struct  S18460C3  {
  int s18460c3f0;
  int s18460c3f1;
  ::S3421C12_nt s18460c3f2[16];
  void  mf18460c3(); // _ZN8S18460C39mf18460c3Ev
};
//SIG(-1 S18460C3) C1{ m Fi[2] FC2{ m Fi[2]}[16]}


void  S18460C3 ::mf18460c3(){}

static void Test_S18460C3()
{
  {
    init_simple_test("S18460C3");
    S18460C3 lv;
    check2(sizeof(lv), 136, "sizeof(S18460C3)");
    check2(__alignof__(lv), 4, "__alignof__(S18460C3)");
    check_field_offset(lv, s18460c3f0, 0, "S18460C3.s18460c3f0");
    check_field_offset(lv, s18460c3f1, 4, "S18460C3.s18460c3f1");
    check_field_offset(lv, s18460c3f2, 8, "S18460C3.s18460c3f2");
  }
}
static Arrange_To_Call_Me vS18460C3(Test_S18460C3, "S18460C3", 136);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18460C5  {
  int s18460c5f0[2];
  int s18460c5f1[2];
};
//SIG(1 S18460C5) C1{ Fi[4]}



static void Test_S18460C5()
{
  {
    init_simple_test("S18460C5");
    S18460C5 lv;
    check2(sizeof(lv), 16, "sizeof(S18460C5)");
    check2(__alignof__(lv), 4, "__alignof__(S18460C5)");
    check_field_offset(lv, s18460c5f0, 0, "S18460C5.s18460c5f0");
    check_field_offset(lv, s18460c5f1, 8, "S18460C5.s18460c5f1");
  }
}
static Arrange_To_Call_Me vS18460C5(Test_S18460C5, "S18460C5", 16);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18460C1  {
  ::S18460C2 s18460c1f0;
  int s18460c1f1;
  int s18460c1f2;
  ::S18460C3 s18460c1f3;
  ::S18460C3 s18460c1f4;
  ::S18460C5 s18460c1f5[19];
  ::S18460C5 s18460c1f6[8];
  int s18460c1f7;
  int s18460c1f8;
  int s18460c1f9[4];
  int s18460c1f10[4];
  void  mf18460c1(); // _ZN8S18460C19mf18460c1Ev
};
//SIG(1 S18460C1) C1{ m FU2{ Fi Fs} Fi Fi FC3{ m Fi Fi FC4{ m Fi Fi}[16]} FC3 FC5{ Fi[2] Fi[2]}[19] FC5[8] Fi Fi Fi[4] Fi[4]}


void  S18460C1 ::mf18460c1(){}

static void Test_S18460C1()
{
  {
    init_simple_test("S18460C1");
    S18460C1 lv;
    check2(sizeof(lv), 756, "sizeof(S18460C1)");
    check2(__alignof__(lv), 4, "__alignof__(S18460C1)");
    check_field_offset(lv, s18460c1f0, 0, "S18460C1.s18460c1f0");
    check_field_offset(lv, s18460c1f1, 4, "S18460C1.s18460c1f1");
    check_field_offset(lv, s18460c1f2, 8, "S18460C1.s18460c1f2");
    check_field_offset(lv, s18460c1f3, 12, "S18460C1.s18460c1f3");
    check_field_offset(lv, s18460c1f4, 148, "S18460C1.s18460c1f4");
    check_field_offset(lv, s18460c1f5, 284, "S18460C1.s18460c1f5");
    check_field_offset(lv, s18460c1f6, 588, "S18460C1.s18460c1f6");
    check_field_offset(lv, s18460c1f7, 716, "S18460C1.s18460c1f7");
    check_field_offset(lv, s18460c1f8, 720, "S18460C1.s18460c1f8");
    check_field_offset(lv, s18460c1f9, 724, "S18460C1.s18460c1f9");
    check_field_offset(lv, s18460c1f10, 740, "S18460C1.s18460c1f10");
  }
}
static Arrange_To_Call_Me vS18460C1(Test_S18460C1, "S18460C1", 756);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11365C3_nt  {
  void *s11365c3f0[3];
  char s11365c3f1[60];
  int s11365c3f2;
};
//SIG(-1 S11365C3_nt) C1{ Fp[3] Fc[60] Fi}



//skip512 S11365C3_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11365C2  {
  int s11365c2f0;
  ::S11365C3_nt s11365c2f1;
  int s11365c2f2[2];
  char s11365c2f3[128];
};
//SIG(-1 S11365C2) C1{ Fi FC2{ Fp[3] Fc[60] Fi} Fi[2] Fc[128]}



static void Test_S11365C2()
{
  {
    init_simple_test("S11365C2");
    S11365C2 lv;
    check2(sizeof(lv), ABISELECT(232,216), "sizeof(S11365C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11365C2)");
    check_field_offset(lv, s11365c2f0, 0, "S11365C2.s11365c2f0");
    check_field_offset(lv, s11365c2f1, ABISELECT(8,4), "S11365C2.s11365c2f1");
    check_field_offset(lv, s11365c2f2, ABISELECT(96,80), "S11365C2.s11365c2f2");
    check_field_offset(lv, s11365c2f3, ABISELECT(104,88), "S11365C2.s11365c2f3");
  }
}
static Arrange_To_Call_Me vS11365C2(Test_S11365C2, "S11365C2", ABISELECT(232,216));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11365C4  {
  int s11365c4f0;
  char s11365c4f1[128];
};
//SIG(-1 S11365C4) C1{ Fi Fc[128]}



static void Test_S11365C4()
{
  {
    init_simple_test("S11365C4");
    S11365C4 lv;
    check2(sizeof(lv), 132, "sizeof(S11365C4)");
    check2(__alignof__(lv), 4, "__alignof__(S11365C4)");
    check_field_offset(lv, s11365c4f0, 0, "S11365C4.s11365c4f0");
    check_field_offset(lv, s11365c4f1, 4, "S11365C4.s11365c4f1");
  }
}
static Arrange_To_Call_Me vS11365C4(Test_S11365C4, "S11365C4", 132);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11365C5_nt  {
  int s11365c5f0[3];
  char s11365c5f1[32];
};
//SIG(-1 S11365C5_nt) C1{ Fi[3] Fc[32]}



//skip512 S11365C5_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11365C6_nt  {
  char s11365c6f0[4];
};
//SIG(-1 S11365C6_nt) C1{ Fc[4]}



//skip512 S11365C6_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11365C1  {
  ::S11365C2 s11365c1f0;
  ::S11365C4 s11365c1f1;
  ::S11365C5_nt s11365c1f2;
  ::S11365C6_nt s11365c1f3;
  ::S11365C6_nt s11365c1f4;
  char s11365c1f5[64];
};
//SIG(1 S11365C1) C1{ FC2{ Fi FC3{ Fp[3] Fc[60] Fi} Fi[2] Fc[128]} FC4{ Fi Fc[128]} FC5{ Fi[3] Fc[32]} FC6{ Fc[4]} FC6 Fc[64]}



static void Test_S11365C1()
{
  {
    init_simple_test("S11365C1");
    S11365C1 lv;
    check2(sizeof(lv), ABISELECT(480,464), "sizeof(S11365C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11365C1)");
    check_field_offset(lv, s11365c1f0, 0, "S11365C1.s11365c1f0");
    check_field_offset(lv, s11365c1f1, ABISELECT(232,216), "S11365C1.s11365c1f1");
    check_field_offset(lv, s11365c1f2, ABISELECT(364,348), "S11365C1.s11365c1f2");
    check_field_offset(lv, s11365c1f3, ABISELECT(408,392), "S11365C1.s11365c1f3");
    check_field_offset(lv, s11365c1f4, ABISELECT(412,396), "S11365C1.s11365c1f4");
    check_field_offset(lv, s11365c1f5, ABISELECT(416,400), "S11365C1.s11365c1f5");
  }
}
static Arrange_To_Call_Me vS11365C1(Test_S11365C1, "S11365C1", ABISELECT(480,464));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5324C3  {
  ::S3352C4_nt s5324c3f0;
  char s5324c3f1;
  virtual  ~S5324C3(); // _ZN7S5324C3D1Ev
  virtual void  v6(); // _ZN7S5324C32v6Ev
  virtual void  v7(); // _ZN7S5324C32v7Ev
  virtual void  v8(); // _ZN7S5324C32v8Ev
  virtual void  v9(); // _ZN7S5324C32v9Ev
  virtual void  v10(); // _ZN7S5324C33v10Ev
  virtual void  v11(); // _ZN7S5324C33v11Ev
  virtual void  v12(); // _ZN7S5324C33v12Ev
  S5324C3(); // tgen
};
//SIG(-1 S5324C3) C1{ vd v1 v2 v3 v4 v5 v6 v7 FC2{ m Fi[2]} Fc}


 S5324C3 ::~S5324C3(){ note_dtor("S5324C3", this);}
void  S5324C3 ::v6(){vfunc_called(this, "_ZN7S5324C32v6Ev");}
void  S5324C3 ::v7(){vfunc_called(this, "_ZN7S5324C32v7Ev");}
void  S5324C3 ::v8(){vfunc_called(this, "_ZN7S5324C32v8Ev");}
void  S5324C3 ::v9(){vfunc_called(this, "_ZN7S5324C32v9Ev");}
void  S5324C3 ::v10(){vfunc_called(this, "_ZN7S5324C33v10Ev");}
void  S5324C3 ::v11(){vfunc_called(this, "_ZN7S5324C33v11Ev");}
void  S5324C3 ::v12(){vfunc_called(this, "_ZN7S5324C33v12Ev");}
S5324C3 ::S5324C3(){ note_ctor("S5324C3", this);} // tgen

static void Test_S5324C3()
{
  extern Class_Descriptor cd_S5324C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S5324C3, buf);
    S5324C3 *dp, &lv = *(dp=new (buf) S5324C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S5324C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5324C3)");
    check_field_offset(lv, s5324c3f0, ABISELECT(8,4), "S5324C3.s5324c3f0");
    check_field_offset(lv, s5324c3f1, ABISELECT(16,12), "S5324C3.s5324c3f1");
    test_class_info(&lv, &cd_S5324C3);
    dp->~S5324C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5324C3(Test_S5324C3, "S5324C3", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S5324C3C1Ev();
extern void _ZN7S5324C3D1Ev();
Name_Map name_map_S5324C3[] = {
  NSPAIR(_ZN7S5324C3C1Ev),
  NSPAIR(_ZN7S5324C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5324C3[];
extern void _ZN7S5324C3D1Ev();
extern void _ZN7S5324C3D0Ev();
extern void _ZN7S5324C32v6Ev();
extern void _ZN7S5324C32v7Ev();
extern void _ZN7S5324C32v8Ev();
extern void _ZN7S5324C32v9Ev();
extern void _ZN7S5324C33v10Ev();
extern void _ZN7S5324C33v11Ev();
extern void _ZN7S5324C33v12Ev();
static  VTBL_ENTRY vtc_S5324C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5324C3[0]),
  (VTBL_ENTRY)&_ZN7S5324C3D1Ev,
  (VTBL_ENTRY)&_ZN7S5324C3D0Ev,
  (VTBL_ENTRY)&_ZN7S5324C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5324C32v7Ev,
  (VTBL_ENTRY)&_ZN7S5324C32v8Ev,
  (VTBL_ENTRY)&_ZN7S5324C32v9Ev,
  (VTBL_ENTRY)&_ZN7S5324C33v10Ev,
  (VTBL_ENTRY)&_ZN7S5324C33v11Ev,
  (VTBL_ENTRY)&_ZN7S5324C33v12Ev,
};
extern VTBL_ENTRY _ZTI7S5324C3[];
extern  VTBL_ENTRY _ZTV7S5324C3[];
Class_Descriptor cd_S5324C3 = {  "S5324C3", // class name
  0,0,//no base classes
  &(vtc_S5324C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S5324C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5324C3),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5324C2  : S5324C3 {
  int s5324c2f0[4];
  void *s5324c2f1;
  virtual  ~S5324C2(); // _ZN7S5324C2D1Ev
  virtual void  v13(); // _ZN7S5324C23v13Ev
  virtual void  v14(); // _ZN7S5324C23v14Ev
  S5324C2(); // tgen
};
//SIG(-1 S5324C2) C1{ BC2{ vd v3 v4 v5 v6 v7 v8 v9 FC3{ m Fi[2]} Fc} vd v1 v2 Fi[4] Fp}


 S5324C2 ::~S5324C2(){ note_dtor("S5324C2", this);}
void  S5324C2 ::v13(){vfunc_called(this, "_ZN7S5324C23v13Ev");}
void  S5324C2 ::v14(){vfunc_called(this, "_ZN7S5324C23v14Ev");}
S5324C2 ::S5324C2(){ note_ctor("S5324C2", this);} // tgen

static void Test_S5324C2()
{
  extern Class_Descriptor cd_S5324C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,10)];
    init_test(&cd_S5324C2, buf);
    S5324C2 *dp, &lv = *(dp=new (buf) S5324C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,36), "sizeof(S5324C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5324C2)");
    check_base_class_offset(lv, (S5324C3*), 0, "S5324C2");
    check_field_offset(lv, s5324c2f0, ABISELECT(20,16), "S5324C2.s5324c2f0");
    check_field_offset(lv, s5324c2f1, ABISELECT(40,32), "S5324C2.s5324c2f1");
    test_class_info(&lv, &cd_S5324C2);
    dp->~S5324C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5324C2(Test_S5324C2, "S5324C2", ABISELECT(48,36));

#else // __cplusplus

extern void _ZN7S5324C2C1Ev();
extern void _ZN7S5324C2D1Ev();
Name_Map name_map_S5324C2[] = {
  NSPAIR(_ZN7S5324C2C1Ev),
  NSPAIR(_ZN7S5324C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5324C3;
extern VTBL_ENTRY _ZTI7S5324C3[];
extern  VTBL_ENTRY _ZTV7S5324C3[];
static Base_Class bases_S5324C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5324C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5324C2[];
extern void _ZN7S5324C2D1Ev();
extern void _ZN7S5324C2D0Ev();
extern void _ZN7S5324C32v6Ev();
extern void _ZN7S5324C32v7Ev();
extern void _ZN7S5324C32v8Ev();
extern void _ZN7S5324C32v9Ev();
extern void _ZN7S5324C33v10Ev();
extern void _ZN7S5324C33v11Ev();
extern void _ZN7S5324C33v12Ev();
extern void _ZN7S5324C23v13Ev();
extern void _ZN7S5324C23v14Ev();
static  VTBL_ENTRY vtc_S5324C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5324C2[0]),
  (VTBL_ENTRY)&_ZN7S5324C2D1Ev,
  (VTBL_ENTRY)&_ZN7S5324C2D0Ev,
  (VTBL_ENTRY)&_ZN7S5324C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5324C32v7Ev,
  (VTBL_ENTRY)&_ZN7S5324C32v8Ev,
  (VTBL_ENTRY)&_ZN7S5324C32v9Ev,
  (VTBL_ENTRY)&_ZN7S5324C33v10Ev,
  (VTBL_ENTRY)&_ZN7S5324C33v11Ev,
  (VTBL_ENTRY)&_ZN7S5324C33v12Ev,
  (VTBL_ENTRY)&_ZN7S5324C23v13Ev,
  (VTBL_ENTRY)&_ZN7S5324C23v14Ev,
};
extern VTBL_ENTRY _ZTI7S5324C2[];
extern  VTBL_ENTRY _ZTV7S5324C2[];
Class_Descriptor cd_S5324C2 = {  "S5324C2", // class name
  bases_S5324C2, 1,
  &(vtc_S5324C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,36), // object size
  NSPAIRA(_ZTI7S5324C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5324C2),13, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5324C1  : S5324C2 {
  int s5324c1f0[2];
  virtual  ~S5324C1(); // _ZN7S5324C1D1Ev
  virtual void  v1(); // _ZN7S5324C12v1Ev
  virtual void  v2(); // _ZN7S5324C12v2Ev
  virtual void  v3(); // _ZN7S5324C12v3Ev
  virtual void  v4(); // _ZN7S5324C12v4Ev
  virtual void  v5(); // _ZN7S5324C12v5Ev
  S5324C1(); // tgen
};
//SIG(1 S5324C1) C1{ BC2{ BC3{ vd v6 v7 v8 v9 v10 v11 v12 FC4{ m Fi[2]} Fc} vd v13 v14 Fi[4] Fp} vd v1 v2 v3 v4 v5 Fi[2]}


 S5324C1 ::~S5324C1(){ note_dtor("S5324C1", this);}
void  S5324C1 ::v1(){vfunc_called(this, "_ZN7S5324C12v1Ev");}
void  S5324C1 ::v2(){vfunc_called(this, "_ZN7S5324C12v2Ev");}
void  S5324C1 ::v3(){vfunc_called(this, "_ZN7S5324C12v3Ev");}
void  S5324C1 ::v4(){vfunc_called(this, "_ZN7S5324C12v4Ev");}
void  S5324C1 ::v5(){vfunc_called(this, "_ZN7S5324C12v5Ev");}
S5324C1 ::S5324C1(){ note_ctor("S5324C1", this);} // tgen

static void Test_S5324C1()
{
  extern Class_Descriptor cd_S5324C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,12)];
    init_test(&cd_S5324C1, buf);
    S5324C1 *dp, &lv = *(dp=new (buf) S5324C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,44), "sizeof(S5324C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5324C1)");
    check_base_class_offset(lv, (S5324C3*)(S5324C2*), 0, "S5324C1");
    check_base_class_offset(lv, (S5324C2*), 0, "S5324C1");
    check_field_offset(lv, s5324c1f0, ABISELECT(48,36), "S5324C1.s5324c1f0");
    test_class_info(&lv, &cd_S5324C1);
    dp->~S5324C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5324C1(Test_S5324C1, "S5324C1", ABISELECT(56,44));

#else // __cplusplus

extern void _ZN7S5324C1C1Ev();
extern void _ZN7S5324C1D1Ev();
Name_Map name_map_S5324C1[] = {
  NSPAIR(_ZN7S5324C1C1Ev),
  NSPAIR(_ZN7S5324C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5324C3;
extern VTBL_ENTRY _ZTI7S5324C3[];
extern  VTBL_ENTRY _ZTV7S5324C3[];
extern Class_Descriptor cd_S5324C2;
extern VTBL_ENTRY _ZTI7S5324C2[];
extern  VTBL_ENTRY _ZTV7S5324C2[];
static Base_Class bases_S5324C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5324C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S5324C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S5324C1[];
extern void _ZN7S5324C1D1Ev();
extern void _ZN7S5324C1D0Ev();
extern void _ZN7S5324C32v6Ev();
extern void _ZN7S5324C32v7Ev();
extern void _ZN7S5324C32v8Ev();
extern void _ZN7S5324C32v9Ev();
extern void _ZN7S5324C33v10Ev();
extern void _ZN7S5324C33v11Ev();
extern void _ZN7S5324C33v12Ev();
extern void _ZN7S5324C23v13Ev();
extern void _ZN7S5324C23v14Ev();
extern void _ZN7S5324C12v1Ev();
extern void _ZN7S5324C12v2Ev();
extern void _ZN7S5324C12v3Ev();
extern void _ZN7S5324C12v4Ev();
extern void _ZN7S5324C12v5Ev();
static  VTBL_ENTRY vtc_S5324C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5324C1[0]),
  (VTBL_ENTRY)&_ZN7S5324C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5324C1D0Ev,
  (VTBL_ENTRY)&_ZN7S5324C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5324C32v7Ev,
  (VTBL_ENTRY)&_ZN7S5324C32v8Ev,
  (VTBL_ENTRY)&_ZN7S5324C32v9Ev,
  (VTBL_ENTRY)&_ZN7S5324C33v10Ev,
  (VTBL_ENTRY)&_ZN7S5324C33v11Ev,
  (VTBL_ENTRY)&_ZN7S5324C33v12Ev,
  (VTBL_ENTRY)&_ZN7S5324C23v13Ev,
  (VTBL_ENTRY)&_ZN7S5324C23v14Ev,
  (VTBL_ENTRY)&_ZN7S5324C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5324C12v2Ev,
  (VTBL_ENTRY)&_ZN7S5324C12v3Ev,
  (VTBL_ENTRY)&_ZN7S5324C12v4Ev,
  (VTBL_ENTRY)&_ZN7S5324C12v5Ev,
};
extern VTBL_ENTRY _ZTI7S5324C1[];
extern  VTBL_ENTRY _ZTV7S5324C1[];
Class_Descriptor cd_S5324C1 = {  "S5324C1", // class name
  bases_S5324C1, 2,
  &(vtc_S5324C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,44), // object size
  NSPAIRA(_ZTI7S5324C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5324C1),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21829C3  {
  int s21829c3f0[2];
  void *s21829c3f1[3];
  int s21829c3f2;
  void *s21829c3f3;
  int s21829c3f4[3];
  void  mf21829c3(); // _ZN8S21829C39mf21829c3Ev
};
//SIG(-1 S21829C3) C1{ m Fi[2] Fp[3] Fi Fp Fi[3]}


void  S21829C3 ::mf21829c3(){}

static void Test_S21829C3()
{
  {
    init_simple_test("S21829C3");
    S21829C3 lv;
    check2(sizeof(lv), ABISELECT(64,40), "sizeof(S21829C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21829C3)");
    check_field_offset(lv, s21829c3f0, 0, "S21829C3.s21829c3f0");
    check_field_offset(lv, s21829c3f1, 8, "S21829C3.s21829c3f1");
    check_field_offset(lv, s21829c3f2, ABISELECT(32,20), "S21829C3.s21829c3f2");
    check_field_offset(lv, s21829c3f3, ABISELECT(40,24), "S21829C3.s21829c3f3");
    check_field_offset(lv, s21829c3f4, ABISELECT(48,28), "S21829C3.s21829c3f4");
  }
}
static Arrange_To_Call_Me vS21829C3(Test_S21829C3, "S21829C3", ABISELECT(64,40));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21829C1  {
  void *s21829c1f0[3];
  ::S21830C2 s21829c1f1;
  void *s21829c1f2[2];
  __tsi64 s21829c1f3[3];
  long s21829c1f4[4];
  ::S21829C3 s21829c1f5;
  ::S21829C3 s21829c1f6;
  int s21829c1f7;
  ::S5062C9_nt s21829c1f8;
  int s21829c1f9[2];
  void  mf21829c1(); // _ZN8S21829C19mf21829c1Ev
  virtual  ~S21829C1(); // _ZN8S21829C1D1Ev
  S21829C1(); // tgen
};
//SIG(1 S21829C1) C1{ vd m Fp[3] FC2{ Fp[14]} Fp[2] FL[3] Fl[4] FC3{ m Fi[2] Fp[3] Fi Fp Fi[3]} FC3 Fi FC4{ FL[4]} Fi[2]}


void  S21829C1 ::mf21829c1(){}
 S21829C1 ::~S21829C1(){ note_dtor("S21829C1", this);}
S21829C1 ::S21829C1(){ note_ctor("S21829C1", this);} // tgen

static void Test_S21829C1()
{
  extern Class_Descriptor cd_S21829C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(50,62)];
    init_test(&cd_S21829C1, buf);
    S21829C1 *dp, &lv = *(dp=new (buf) S21829C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(392,244), "sizeof(S21829C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21829C1)");
    check_field_offset(lv, s21829c1f0, ABISELECT(8,4), "S21829C1.s21829c1f0");
    check_field_offset(lv, s21829c1f1, ABISELECT(32,16), "S21829C1.s21829c1f1");
    check_field_offset(lv, s21829c1f2, ABISELECT(144,72), "S21829C1.s21829c1f2");
    check_field_offset(lv, s21829c1f3, ABISELECT(160,80), "S21829C1.s21829c1f3");
    check_field_offset(lv, s21829c1f4, ABISELECT(184,104), "S21829C1.s21829c1f4");
    check_field_offset(lv, s21829c1f5, ABISELECT(216,120), "S21829C1.s21829c1f5");
    check_field_offset(lv, s21829c1f6, ABISELECT(280,160), "S21829C1.s21829c1f6");
    check_field_offset(lv, s21829c1f7, ABISELECT(344,200), "S21829C1.s21829c1f7");
    check_field_offset(lv, s21829c1f8, ABISELECT(352,204), "S21829C1.s21829c1f8");
    check_field_offset(lv, s21829c1f9, ABISELECT(384,236), "S21829C1.s21829c1f9");
    test_class_info(&lv, &cd_S21829C1);
    dp->~S21829C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21829C1(Test_S21829C1, "S21829C1", ABISELECT(392,244));

#else // __cplusplus

extern void _ZN8S21829C1C1Ev();
extern void _ZN8S21829C1D1Ev();
Name_Map name_map_S21829C1[] = {
  NSPAIR(_ZN8S21829C1C1Ev),
  NSPAIR(_ZN8S21829C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21829C1[];
extern void _ZN8S21829C1D1Ev();
extern void _ZN8S21829C1D0Ev();
static  VTBL_ENTRY vtc_S21829C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21829C1[0]),
  (VTBL_ENTRY)&_ZN8S21829C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21829C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21829C1[];
extern  VTBL_ENTRY _ZTV8S21829C1[];
Class_Descriptor cd_S21829C1 = {  "S21829C1", // class name
  0,0,//no base classes
  &(vtc_S21829C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(392,244), // object size
  NSPAIRA(_ZTI8S21829C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21829C1),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  S21828C1  {
  void *s21828c1f0[3];
  ::S21830C2 s21828c1f1;
  void *s21828c1f2[2];
  __tsi64 s21828c1f3[3];
  long s21828c1f4[4];
  ::S21829C3 s21828c1f5;
  ::S21829C3 s21828c1f6;
  int s21828c1f7;
  ::S5061C9_nt s21828c1f8;
  int s21828c1f9[2];
  void  mf21828c1(); // _ZN8S21828C19mf21828c1Ev
  virtual  ~S21828C1(); // _ZN8S21828C1D1Ev
  S21828C1(); // tgen
};
//SIG(1 S21828C1) C1{ vd m Fp[3] FC2{ Fp[14]} Fp[2] FL[3] Fl[4] FC3{ m Fi[2] Fp[3] Fi Fp Fi[3]} FC3 Fi FC4{ Fl[4]} Fi[2]}


void  S21828C1 ::mf21828c1(){}
 S21828C1 ::~S21828C1(){ note_dtor("S21828C1", this);}
S21828C1 ::S21828C1(){ note_ctor("S21828C1", this);} // tgen

static void Test_S21828C1()
{
  extern Class_Descriptor cd_S21828C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(50,58)];
    init_test(&cd_S21828C1, buf);
    S21828C1 *dp, &lv = *(dp=new (buf) S21828C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(392,228), "sizeof(S21828C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21828C1)");
    check_field_offset(lv, s21828c1f0, ABISELECT(8,4), "S21828C1.s21828c1f0");
    check_field_offset(lv, s21828c1f1, ABISELECT(32,16), "S21828C1.s21828c1f1");
    check_field_offset(lv, s21828c1f2, ABISELECT(144,72), "S21828C1.s21828c1f2");
    check_field_offset(lv, s21828c1f3, ABISELECT(160,80), "S21828C1.s21828c1f3");
    check_field_offset(lv, s21828c1f4, ABISELECT(184,104), "S21828C1.s21828c1f4");
    check_field_offset(lv, s21828c1f5, ABISELECT(216,120), "S21828C1.s21828c1f5");
    check_field_offset(lv, s21828c1f6, ABISELECT(280,160), "S21828C1.s21828c1f6");
    check_field_offset(lv, s21828c1f7, ABISELECT(344,200), "S21828C1.s21828c1f7");
    check_field_offset(lv, s21828c1f8, ABISELECT(352,204), "S21828C1.s21828c1f8");
    check_field_offset(lv, s21828c1f9, ABISELECT(384,220), "S21828C1.s21828c1f9");
    test_class_info(&lv, &cd_S21828C1);
    dp->~S21828C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21828C1(Test_S21828C1, "S21828C1", ABISELECT(392,228));

#else // __cplusplus

extern void _ZN8S21828C1C1Ev();
extern void _ZN8S21828C1D1Ev();
Name_Map name_map_S21828C1[] = {
  NSPAIR(_ZN8S21828C1C1Ev),
  NSPAIR(_ZN8S21828C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21828C1[];
extern void _ZN8S21828C1D1Ev();
extern void _ZN8S21828C1D0Ev();
static  VTBL_ENTRY vtc_S21828C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21828C1[0]),
  (VTBL_ENTRY)&_ZN8S21828C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21828C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21828C1[];
extern  VTBL_ENTRY _ZTV8S21828C1[];
Class_Descriptor cd_S21828C1 = {  "S21828C1", // class name
  0,0,//no base classes
  &(vtc_S21828C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(392,228), // object size
  NSPAIRA(_ZTI8S21828C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21828C1),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

union  S12892C2  {
  void *s12892c2f0;
  void *s12892c2f1;
  void *s12892c2f2;
  void *s12892c2f3;
  void *s12892c2f4;
  void *s12892c2f5;
  void *s12892c2f6;
  void *s12892c2f7;
  void *s12892c2f8;
  void *s12892c2f9;
  void *s12892c2f10;
  void *s12892c2f11;
  ::S11720C18 s12892c2f12;
  int s12892c2f13;
  void *s12892c2f14;
  ::S11720C12_nt s12892c2f15;
  void *s12892c2f16;
  void *s12892c2f17;
  void *s12892c2f18;
  int s12892c2f19;
  void *s12892c2f20;
  void *s12892c2f21;
  void *s12892c2f22;
};
//SIG(1 S12892C2) U1{ Fp Fp Fp Fp Fp Fp Fp Fp Fp Fp Fp Fp FC2{ Fp Fp} Fi Fp FC3{ Fp Fp} Fp Fp Fp Fi Fp Fp Fp}

#endif // __cplusplus
#ifdef __cplusplus

struct  S12892C1  {
  int s12892c1f0;
  ::S12892C2 s12892c1f1;
};
//SIG(1 S12892C1) C1{ Fi FU2{ Fp Fp Fp Fp Fp Fp Fp Fp Fp Fp Fp Fp FC3{ Fp Fp} Fi Fp FC4{ Fp Fp} Fp Fp Fp Fi Fp Fp Fp}}



static void Test_S12892C1()
{
  {
    init_simple_test("S12892C1");
    S12892C1 lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S12892C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12892C1)");
    check_field_offset(lv, s12892c1f0, 0, "S12892C1.s12892c1f0");
    check_field_offset(lv, s12892c1f1, ABISELECT(8,4), "S12892C1.s12892c1f1");
  }
}
static Arrange_To_Call_Me vS12892C1(Test_S12892C1, "S12892C1", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4848C3  {
  ::S2120C20_nt s4848c3f0;
  int s4848c3f1[2];
  char s4848c3f2;
  virtual  ~S4848C3(); // _ZN7S4848C3D1Ev
  virtual void  v3(); // _ZN7S4848C32v3Ev
  virtual void  v4(); // _ZN7S4848C32v4Ev
  virtual void  v5(); // _ZN7S4848C32v5Ev
  S4848C3(); // tgen
};
//SIG(-1 S4848C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4848C3 ::~S4848C3(){ note_dtor("S4848C3", this);}
void  S4848C3 ::v3(){vfunc_called(this, "_ZN7S4848C32v3Ev");}
void  S4848C3 ::v4(){vfunc_called(this, "_ZN7S4848C32v4Ev");}
void  S4848C3 ::v5(){vfunc_called(this, "_ZN7S4848C32v5Ev");}
S4848C3 ::S4848C3(){ note_ctor("S4848C3", this);} // tgen

static void Test_S4848C3()
{
  extern Class_Descriptor cd_S4848C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4848C3, buf);
    S4848C3 *dp, &lv = *(dp=new (buf) S4848C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4848C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4848C3)");
    check_field_offset(lv, s4848c3f0, ABISELECT(8,4), "S4848C3.s4848c3f0");
    check_field_offset(lv, s4848c3f1, ABISELECT(24,16), "S4848C3.s4848c3f1");
    check_field_offset(lv, s4848c3f2, ABISELECT(32,24), "S4848C3.s4848c3f2");
    test_class_info(&lv, &cd_S4848C3);
    dp->~S4848C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4848C3(Test_S4848C3, "S4848C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4848C3C1Ev();
extern void _ZN7S4848C3D1Ev();
Name_Map name_map_S4848C3[] = {
  NSPAIR(_ZN7S4848C3C1Ev),
  NSPAIR(_ZN7S4848C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4848C3[];
extern void _ZN7S4848C3D1Ev();
extern void _ZN7S4848C3D0Ev();
extern void _ZN7S4848C32v3Ev();
extern void _ZN7S4848C32v4Ev();
extern void _ZN7S4848C32v5Ev();
static  VTBL_ENTRY vtc_S4848C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4848C3[0]),
  (VTBL_ENTRY)&_ZN7S4848C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4848C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4848C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4848C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4848C32v5Ev,
};
extern VTBL_ENTRY _ZTI7S4848C3[];
extern  VTBL_ENTRY _ZTV7S4848C3[];
Class_Descriptor cd_S4848C3 = {  "S4848C3", // class name
  0,0,//no base classes
  &(vtc_S4848C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4848C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4848C3),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  S4848C2  : S4848C3 {
  void *s4848c2f0[3];
  char s4848c2f1[2];
  virtual  ~S4848C2(); // _ZN7S4848C2D1Ev
  virtual void  v6(); // _ZN7S4848C22v6Ev
  virtual void  v7(); // _ZN7S4848C22v7Ev
  virtual void  v8(); // _ZN7S4848C22v8Ev
  virtual void  v9(); // _ZN7S4848C22v9Ev
  S4848C2(); // tgen
};
//SIG(-1 S4848C2) C1{ BC2{ vd v5 v6 v7 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} vd v1 v2 v3 v4 Fp[3] Fc[2]}


 S4848C2 ::~S4848C2(){ note_dtor("S4848C2", this);}
void  S4848C2 ::v6(){vfunc_called(this, "_ZN7S4848C22v6Ev");}
void  S4848C2 ::v7(){vfunc_called(this, "_ZN7S4848C22v7Ev");}
void  S4848C2 ::v8(){vfunc_called(this, "_ZN7S4848C22v8Ev");}
void  S4848C2 ::v9(){vfunc_called(this, "_ZN7S4848C22v9Ev");}
S4848C2 ::S4848C2(){ note_ctor("S4848C2", this);} // tgen

static void Test_S4848C2()
{
  extern Class_Descriptor cd_S4848C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,12)];
    init_test(&cd_S4848C2, buf);
    S4848C2 *dp, &lv = *(dp=new (buf) S4848C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,44), "sizeof(S4848C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4848C2)");
    check_base_class_offset(lv, (S4848C3*), 0, "S4848C2");
    check_field_offset(lv, s4848c2f0, ABISELECT(40,28), "S4848C2.s4848c2f0");
    check_field_offset(lv, s4848c2f1, ABISELECT(64,40), "S4848C2.s4848c2f1");
    test_class_info(&lv, &cd_S4848C2);
    dp->~S4848C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4848C2(Test_S4848C2, "S4848C2", ABISELECT(72,44));

#else // __cplusplus

extern void _ZN7S4848C2C1Ev();
extern void _ZN7S4848C2D1Ev();
Name_Map name_map_S4848C2[] = {
  NSPAIR(_ZN7S4848C2C1Ev),
  NSPAIR(_ZN7S4848C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4848C3;
extern VTBL_ENTRY _ZTI7S4848C3[];
extern  VTBL_ENTRY _ZTV7S4848C3[];
static Base_Class bases_S4848C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4848C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4848C2[];
extern void _ZN7S4848C2D1Ev();
extern void _ZN7S4848C2D0Ev();
extern void _ZN7S4848C32v3Ev();
extern void _ZN7S4848C32v4Ev();
extern void _ZN7S4848C32v5Ev();
extern void _ZN7S4848C22v6Ev();
extern void _ZN7S4848C22v7Ev();
extern void _ZN7S4848C22v8Ev();
extern void _ZN7S4848C22v9Ev();
static  VTBL_ENTRY vtc_S4848C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4848C2[0]),
  (VTBL_ENTRY)&_ZN7S4848C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4848C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4848C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4848C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4848C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4848C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4848C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4848C22v8Ev,
  (VTBL_ENTRY)&_ZN7S4848C22v9Ev,
};
extern VTBL_ENTRY _ZTI7S4848C2[];
extern  VTBL_ENTRY _ZTV7S4848C2[];
Class_Descriptor cd_S4848C2 = {  "S4848C2", // class name
  bases_S4848C2, 1,
  &(vtc_S4848C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,44), // object size
  NSPAIRA(_ZTI7S4848C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4848C2),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4848C1  : S4848C2 {
  int s4848c1f0;
  virtual  ~S4848C1(); // _ZN7S4848C1D1Ev
  virtual void  v1(); // _ZN7S4848C12v1Ev
  virtual void  v2(); // _ZN7S4848C12v2Ev
  S4848C1(); // tgen
};
//SIG(1 S4848C1) C1{ BC2{ BC3{ vd v3 v4 v5 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} vd v6 v7 v8 v9 Fp[3] Fc[2]} vd v1 v2 Fi}


 S4848C1 ::~S4848C1(){ note_dtor("S4848C1", this);}
void  S4848C1 ::v1(){vfunc_called(this, "_ZN7S4848C12v1Ev");}
void  S4848C1 ::v2(){vfunc_called(this, "_ZN7S4848C12v2Ev");}
S4848C1 ::S4848C1(){ note_ctor("S4848C1", this);} // tgen

static void Test_S4848C1()
{
  extern Class_Descriptor cd_S4848C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S4848C1, buf);
    S4848C1 *dp, &lv = *(dp=new (buf) S4848C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S4848C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4848C1)");
    check_base_class_offset(lv, (S4848C3*)(S4848C2*), 0, "S4848C1");
    check_base_class_offset(lv, (S4848C2*), 0, "S4848C1");
    check_field_offset(lv, s4848c1f0, ABISELECT(68,44), "S4848C1.s4848c1f0");
    test_class_info(&lv, &cd_S4848C1);
    dp->~S4848C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4848C1(Test_S4848C1, "S4848C1", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN7S4848C1C1Ev();
extern void _ZN7S4848C1D1Ev();
Name_Map name_map_S4848C1[] = {
  NSPAIR(_ZN7S4848C1C1Ev),
  NSPAIR(_ZN7S4848C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4848C3;
extern VTBL_ENTRY _ZTI7S4848C3[];
extern  VTBL_ENTRY _ZTV7S4848C3[];
extern Class_Descriptor cd_S4848C2;
extern VTBL_ENTRY _ZTI7S4848C2[];
extern  VTBL_ENTRY _ZTV7S4848C2[];
static Base_Class bases_S4848C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4848C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4848C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S4848C1[];
extern void _ZN7S4848C1D1Ev();
extern void _ZN7S4848C1D0Ev();
extern void _ZN7S4848C32v3Ev();
extern void _ZN7S4848C32v4Ev();
extern void _ZN7S4848C32v5Ev();
extern void _ZN7S4848C22v6Ev();
extern void _ZN7S4848C22v7Ev();
extern void _ZN7S4848C22v8Ev();
extern void _ZN7S4848C22v9Ev();
extern void _ZN7S4848C12v1Ev();
extern void _ZN7S4848C12v2Ev();
static  VTBL_ENTRY vtc_S4848C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4848C1[0]),
  (VTBL_ENTRY)&_ZN7S4848C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4848C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4848C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4848C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4848C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4848C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4848C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4848C22v8Ev,
  (VTBL_ENTRY)&_ZN7S4848C22v9Ev,
  (VTBL_ENTRY)&_ZN7S4848C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4848C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S4848C1[];
extern  VTBL_ENTRY _ZTV7S4848C1[];
Class_Descriptor cd_S4848C1 = {  "S4848C1", // class name
  bases_S4848C1, 2,
  &(vtc_S4848C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI7S4848C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4848C1),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  S20597C5  : virtual S8087C2_nt {
  ::S21155C5_nt s20597c5f0;
  ~S20597C5(); // tgen
  S20597C5(); // tgen
};
//SIG(-1 S20597C5) C1{ VBC2{ vd m Fi} FU3{ m}}


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

static void Test_S20597C5()
{
  extern Class_Descriptor cd_S20597C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S20597C5, buf);
    S20597C5 *dp, &lv = *(dp=new (buf) S20597C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S20597C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20597C5)");
    check_base_class_offset(lv, (S8087C2_nt*), ABISELECT(16,8), "S20597C5");
    check_field_offset(lv, s20597c5f0, ABISELECT(8,4), "S20597C5.s20597c5f0");
    test_class_info(&lv, &cd_S20597C5);
    dp->~S20597C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20597C5(Test_S20597C5, "S20597C5", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S20597C5C1Ev();
extern void _ZN8S20597C5D1Ev();
Name_Map name_map_S20597C5[] = {
  NSPAIR(_ZN8S20597C5C1Ev),
  NSPAIR(_ZN8S20597C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8087C2_nt;
extern VTBL_ENTRY _ZTI10S8087C2_nt[];
extern  VTBL_ENTRY _ZTV10S8087C2_nt[];
static Base_Class bases_S20597C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8087C2_nt,    ABISELECT(16,8), //bcp->offset
    5, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20597C5[];
extern void _ZN8S20597C5D1Ev();
extern void _ZN8S20597C5D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S20597C5D1Ev,_ZTv0_n12_N8S20597C5D1Ev)();
extern void ABISELECT(_ZThn16_N8S20597C5D1Ev,_ZThn8_N8S20597C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20597C5D0Ev,_ZTv0_n12_N8S20597C5D0Ev)();
extern void ABISELECT(_ZThn16_N8S20597C5D0Ev,_ZThn8_N8S20597C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20597C5[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20597C5[0]),
  (VTBL_ENTRY)&_ZN8S20597C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20597C5D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20597C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20597C5D1Ev,_ZTv0_n12_N8S20597C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20597C5D0Ev,_ZTv0_n12_N8S20597C5D0Ev),
};
extern VTBL_ENTRY _ZTV8S20597C5[];
static  VTT_ENTRY vtt_S20597C5[] = {
  {&(_ZTV8S20597C5[3]),  3,10},
  {&(_ZTV8S20597C5[8]),  8,10},
};
extern VTBL_ENTRY _ZTI8S20597C5[];
extern  VTBL_ENTRY _ZTV8S20597C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20597C5[];
static VTBL_ENTRY alt_thunk_names59[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20597C5D0Ev,_ZTv0_n12_N8S20597C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20597C5D0Ev,_ZThn8_N8S20597C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20597C5D1Ev,_ZTv0_n12_N8S20597C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20597C5D1Ev,_ZThn8_N8S20597C5D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20597C5 = {  "S20597C5", // class name
  bases_S20597C5, 1,
  &(vtc_S20597C5[0]), // expected_vtbl_contents
  &(vtt_S20597C5[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S20597C5),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20597C5),10, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20597C5),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names59,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20597C3  : S8087C2_nt , S20597C5 {
  ::S7870C9_nt s20597c3f0[10];
  ~S20597C3(); // tgen
  S20597C3(); // tgen
};
//SIG(-1 S20597C3) C1{ BC2{ vd m Fi} BC3{ VBC2 FU4{ m}} FU5{ m}[10]}


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

static void Test_S20597C3()
{
  extern Class_Descriptor cd_S20597C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,9)];
    init_test(&cd_S20597C3, buf);
    S20597C3 *dp, &lv = *(dp=new (buf) S20597C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,32), "sizeof(S20597C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20597C3)");
    /*is_ambiguous_... S20597C3::S8087C2_nt */ AMB_check_base_class_offset(lv, (S8087C2_nt*), 0, "S20597C3");
    check_base_class_offset(lv, (S8087C2_nt*)(S20597C5*), ABISELECT(40,24), "S20597C3");
    check_base_class_offset(lv, (S20597C5*), ABISELECT(16,8), "S20597C3");
    check_field_offset(lv, s20597c3f0, ABISELECT(25,13), "S20597C3.s20597c3f0");
    test_class_info(&lv, &cd_S20597C3);
    dp->~S20597C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20597C3(Test_S20597C3, "S20597C3", ABISELECT(56,32));

#else // __cplusplus

extern void _ZN8S20597C3C1Ev();
extern void _ZN8S20597C3D1Ev();
Name_Map name_map_S20597C3[] = {
  NSPAIR(_ZN8S20597C3C1Ev),
  NSPAIR(_ZN8S20597C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8087C2_nt;
extern VTBL_ENTRY _ZTI10S8087C2_nt[];
extern  VTBL_ENTRY _ZTV10S8087C2_nt[];
extern Class_Descriptor cd_S8087C2_nt;
extern VTBL_ENTRY _ZTI10S8087C2_nt[];
extern  VTBL_ENTRY _ZTV10S8087C2_nt[];
extern Class_Descriptor cd_S20597C5;
extern VTBL_ENTRY _ZTI8S20597C5[];
extern  VTBL_ENTRY _ZTV8S20597C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20597C5[];
static Base_Class bases_S20597C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8087C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S8087C2_nt,    ABISELECT(40,24), //bcp->offset
    10, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S20597C5,    ABISELECT(16,8), //bcp->offset
    5, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20597C3[];
extern void _ZN8S20597C3D1Ev();
extern void _ZN8S20597C3D0Ev();
extern void ABISELECT(_ZThn16_N8S20597C3D1Ev,_ZThn8_N8S20597C3D1Ev)();
extern void ABISELECT(_ZThn16_N8S20597C3D0Ev,_ZThn8_N8S20597C3D0Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20597C3D1Ev,_ZTv0_n12_N8S20597C3D1Ev)();
extern void ABISELECT(_ZThn40_N8S20597C3D1Ev,_ZThn24_N8S20597C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20597C3D0Ev,_ZTv0_n12_N8S20597C3D0Ev)();
extern void ABISELECT(_ZThn40_N8S20597C3D0Ev,_ZThn24_N8S20597C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20597C3[] = {
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20597C3[0]),
  (VTBL_ENTRY)&_ZN8S20597C3D1Ev,
  (VTBL_ENTRY)&_ZN8S20597C3D0Ev,
  ABISELECT(24,16),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20597C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S20597C3D1Ev,_ZThn8_N8S20597C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S20597C3D0Ev,_ZThn8_N8S20597C3D0Ev),
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S20597C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20597C3D1Ev,_ZTv0_n12_N8S20597C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20597C3D0Ev,_ZTv0_n12_N8S20597C3D0Ev),
};
extern VTBL_ENTRY _ZTV8S20597C3[];
extern void _ZN8S20597C5D1Ev();
extern void _ZN8S20597C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20597C5__8S20597C3[] = {
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S20597C5[0]),
  (VTBL_ENTRY)&_ZN8S20597C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20597C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20597C5D1Ev,_ZTv0_n12_N8S20597C5D1Ev)();
extern void ABISELECT(_ZThn24_N8S20597C5D1Ev,_ZThn16_N8S20597C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20597C5D0Ev,_ZTv0_n12_N8S20597C5D0Ev)();
extern void ABISELECT(_ZThn24_N8S20597C5D0Ev,_ZThn16_N8S20597C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S8087C2_nt__8S20597C5__8S20597C3[] = {
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S20597C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20597C5D1Ev,_ZTv0_n12_N8S20597C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20597C5D0Ev,_ZTv0_n12_N8S20597C5D0Ev),
};
static  VTT_ENTRY vtt_S20597C3[] = {
  {&(_ZTV8S20597C3[3]),  3,15},
  {&(_tg__ZTV8S20597C5__8S20597C3[3]),  3,5},
  {&(_tg__ZTV10S8087C2_nt__8S20597C5__8S20597C3[3]),  3,5},
  {&(_ZTV8S20597C3[8]),  8,15},
  {&(_ZTV8S20597C3[13]),  13,15},
};
extern VTBL_ENTRY _ZTI8S20597C3[];
extern  VTBL_ENTRY _ZTV8S20597C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20597C3[];
static VTBL_ENTRY alt_thunk_names60[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20597C5D0Ev,_ZTv0_n12_N8S20597C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20597C5D0Ev,_ZThn16_N8S20597C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20597C5D1Ev,_ZTv0_n12_N8S20597C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20597C5D1Ev,_ZThn16_N8S20597C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20597C3D0Ev,_ZTv0_n12_N8S20597C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S20597C3D0Ev,_ZThn24_N8S20597C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20597C3D1Ev,_ZTv0_n12_N8S20597C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S20597C3D1Ev,_ZThn24_N8S20597C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20597C3 = {  "S20597C3", // class name
  bases_S20597C3, 3,
  &(vtc_S20597C3[0]), // expected_vtbl_contents
  &(vtt_S20597C3[0]), // expected_vtt_contents
  ABISELECT(56,32), // object size
  NSPAIRA(_ZTI8S20597C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20597C3),15, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20597C3),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names60,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20597C2  : virtual S20597C3 {
  virtual  ~S20597C2(); // _ZN8S20597C2D2Ev
  S20597C2(); // tgen
};
//SIG(-1 S20597C2) C1{ VBC2{ BC3{ vd m Fi} BC4{ VBC3 FU5{ m}} FU6{ m}[10]} vd}


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

static void Test_S20597C2()
{
  extern Class_Descriptor cd_S20597C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,10)];
    init_test(&cd_S20597C2, buf);
    S20597C2 *dp, &lv = *(dp=new (buf) S20597C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,36), "sizeof(S20597C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20597C2)");
    /*is_ambiguous_... S20597C3::S8087C2_nt */ AMB_check_base_class_offset(lv, (S8087C2_nt*)(S20597C3*), ABISELECT(8,4), "S20597C2");
    check_base_class_offset(lv, (S8087C2_nt*)(S20597C5*)(S20597C3*), ABISELECT(48,28), "S20597C2");
    check_base_class_offset(lv, (S20597C5*)(S20597C3*), ABISELECT(24,12), "S20597C2");
    check_base_class_offset(lv, (S20597C3*), ABISELECT(8,4), "S20597C2");
    test_class_info(&lv, &cd_S20597C2);
    dp->~S20597C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20597C2(Test_S20597C2, "S20597C2", ABISELECT(64,36));

#else // __cplusplus

extern void _ZN8S20597C2C1Ev();
extern void _ZN8S20597C2D2Ev();
Name_Map name_map_S20597C2[] = {
  NSPAIR(_ZN8S20597C2C1Ev),
  NSPAIR(_ZN8S20597C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S8087C2_nt;
extern VTBL_ENTRY _ZTI10S8087C2_nt[];
extern  VTBL_ENTRY _ZTV10S8087C2_nt[];
extern Class_Descriptor cd_S8087C2_nt;
extern VTBL_ENTRY _ZTI10S8087C2_nt[];
extern  VTBL_ENTRY _ZTV10S8087C2_nt[];
extern Class_Descriptor cd_S20597C5;
extern VTBL_ENTRY _ZTI8S20597C5[];
extern  VTBL_ENTRY _ZTV8S20597C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20597C5[];
extern Class_Descriptor cd_S20597C3;
extern VTBL_ENTRY _ZTI8S20597C3[];
extern  VTBL_ENTRY _ZTV8S20597C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20597C3[];
static Base_Class bases_S20597C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8087C2_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
    3, //immediately_derived
  0, 0},
  {&cd_S8087C2_nt,    ABISELECT(48,28), //bcp->offset
    17, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S20597C5,    ABISELECT(24,12), //bcp->offset
    12, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20597C3,    ABISELECT(8,4), //bcp->offset
    6, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20597C2[];
extern void _ZN8S20597C2D1Ev();
extern void _ZN8S20597C2D0Ev();
extern void ABISELECT(_ZTv0_n32_N8S20597C2D1Ev,_ZTv0_n16_N8S20597C2D1Ev)();
extern void ABISELECT(_ZThn8_N8S20597C2D1Ev,_ZThn4_N8S20597C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20597C2D0Ev,_ZTv0_n16_N8S20597C2D0Ev)();
extern void ABISELECT(_ZThn8_N8S20597C2D0Ev,_ZThn4_N8S20597C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn16_n32_N8S20597C2D1Ev,_ZTvn8_n16_N8S20597C2D1Ev)();
extern void ABISELECT(_ZTvn16_n32_N8S20597C2D0Ev,_ZTvn8_n16_N8S20597C2D0Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20597C2D1Ev,_ZTv0_n12_N8S20597C2D1Ev)();
extern void ABISELECT(_ZThn48_N8S20597C2D1Ev,_ZThn28_N8S20597C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20597C2D0Ev,_ZTv0_n12_N8S20597C2D0Ev)();
extern void ABISELECT(_ZThn48_N8S20597C2D0Ev,_ZThn28_N8S20597C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20597C2[] = {
  ABISELECT(48,28),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20597C2[0]),
  (VTBL_ENTRY)&_ZN8S20597C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20597C2D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(40,24),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20597C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20597C2D1Ev,_ZTv0_n16_N8S20597C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20597C2D0Ev,_ZTv0_n16_N8S20597C2D0Ev),
  ABISELECT(24,16),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20597C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n32_N8S20597C2D1Ev,_ZTvn8_n16_N8S20597C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n32_N8S20597C2D0Ev,_ZTvn8_n16_N8S20597C2D0Ev),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI8S20597C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20597C2D1Ev,_ZTv0_n12_N8S20597C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20597C2D0Ev,_ZTv0_n12_N8S20597C2D0Ev),
};
extern VTBL_ENTRY _ZTV8S20597C2[];
extern void _ZN8S20597C3D1Ev();
extern void _ZN8S20597C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20597C3__8S20597C2[] = {
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20597C3[0]),
  (VTBL_ENTRY)&_ZN8S20597C3D1Ev,
  (VTBL_ENTRY)&_ZN8S20597C3D0Ev,
};
extern void _ZN8S20597C5D1Ev();
extern void _ZN8S20597C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20597C58S20597C3__8S20597C2[] = {
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S20597C5[0]),
  (VTBL_ENTRY)&_ZN8S20597C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20597C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20597C5D1Ev,_ZTv0_n12_N8S20597C5D1Ev)();
extern void ABISELECT(_ZThn24_N8S20597C5D1Ev,_ZThn16_N8S20597C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20597C5D0Ev,_ZTv0_n12_N8S20597C5D0Ev)();
extern void ABISELECT(_ZThn24_N8S20597C5D0Ev,_ZThn16_N8S20597C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S8087C2_nt__8S20597C58S20597C3__8S20597C2[] = {
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S20597C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20597C5D1Ev,_ZTv0_n12_N8S20597C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20597C5D0Ev,_ZTv0_n12_N8S20597C5D0Ev),
};
extern void ABISELECT(_ZThn16_N8S20597C3D1Ev,_ZThn8_N8S20597C3D1Ev)();
extern void ABISELECT(_ZThn16_N8S20597C3D0Ev,_ZThn8_N8S20597C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20597C5__8S20597C3__8S20597C2[] = {
  ABISELECT(24,16),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20597C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S20597C3D1Ev,_ZThn8_N8S20597C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S20597C3D0Ev,_ZThn8_N8S20597C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20597C3D1Ev,_ZTv0_n12_N8S20597C3D1Ev)();
extern void ABISELECT(_ZThn40_N8S20597C3D1Ev,_ZThn24_N8S20597C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20597C3D0Ev,_ZTv0_n12_N8S20597C3D0Ev)();
extern void ABISELECT(_ZThn40_N8S20597C3D0Ev,_ZThn24_N8S20597C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S8087C2_nt__A1__8S20597C3__8S20597C2[] = {
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S20597C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20597C3D1Ev,_ZTv0_n12_N8S20597C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20597C3D0Ev,_ZTv0_n12_N8S20597C3D0Ev),
};
static  VTT_ENTRY vtt_S20597C2[] = {
  {&(_ZTV8S20597C2[4]),  4,22},
  {&(_ZTV8S20597C2[10]),  10,22},
  {&(_ZTV8S20597C2[15]),  15,22},
  {&(_ZTV8S20597C2[20]),  20,22},
  {&(_tg__ZTV8S20597C3__8S20597C2[3]),  3,5},
  {&(_tg__ZTV8S20597C58S20597C3__8S20597C2[3]),  3,5},
  {&(_tg__ZTV10S8087C2_nt__8S20597C58S20597C3__8S20597C2[3]),  3,5},
  {&(_tg__ZTV8S20597C5__8S20597C3__8S20597C2[3]),  3,5},
  {&(_tg__ZTV10S8087C2_nt__A1__8S20597C3__8S20597C2[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S20597C2[];
extern  VTBL_ENTRY _ZTV8S20597C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20597C2[];
static VTBL_ENTRY alt_thunk_names61[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20597C3D0Ev,_ZTv0_n12_N8S20597C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S20597C3D0Ev,_ZThn24_N8S20597C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20597C3D1Ev,_ZTv0_n12_N8S20597C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S20597C3D1Ev,_ZThn24_N8S20597C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20597C5D0Ev,_ZTv0_n12_N8S20597C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20597C5D0Ev,_ZThn16_N8S20597C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20597C5D1Ev,_ZTv0_n12_N8S20597C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20597C5D1Ev,_ZThn16_N8S20597C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20597C2D0Ev,_ZTv0_n12_N8S20597C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S20597C2D0Ev,_ZThn28_N8S20597C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20597C2D1Ev,_ZTv0_n12_N8S20597C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S20597C2D1Ev,_ZThn28_N8S20597C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20597C2D0Ev,_ZTv0_n16_N8S20597C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20597C2D0Ev,_ZThn4_N8S20597C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20597C2D1Ev,_ZTv0_n16_N8S20597C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20597C2D1Ev,_ZThn4_N8S20597C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20597C2 = {  "S20597C2", // class name
  bases_S20597C2, 4,
  &(vtc_S20597C2[0]), // expected_vtbl_contents
  &(vtt_S20597C2[0]), // expected_vtt_contents
  ABISELECT(64,36), // object size
  NSPAIRA(_ZTI8S20597C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20597C2),22, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20597C2),9, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names61,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20597C9  : virtual S8087C2_nt , S20597C5 {
  virtual  ~S20597C9(); // _ZN8S20597C9D2Ev
  S20597C9(); // tgen
};
//SIG(-1 S20597C9) C1{ VBC2{ vd m Fi} BC3{ VBC2 FU4{ m}} vd}


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

static void Test_S20597C9()
{
  extern Class_Descriptor cd_S20597C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S20597C9, buf);
    S20597C9 *dp, &lv = *(dp=new (buf) S20597C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S20597C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20597C9)");
    check_base_class_offset(lv, (S8087C2_nt*), ABISELECT(16,8), "S20597C9");
    check_base_class_offset(lv, (S8087C2_nt*)(S20597C5*), ABISELECT(16,8), "S20597C9");
    check_base_class_offset(lv, (S20597C5*), 0, "S20597C9");
    test_class_info(&lv, &cd_S20597C9);
    dp->~S20597C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20597C9(Test_S20597C9, "S20597C9", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S20597C9C1Ev();
extern void _ZN8S20597C9D2Ev();
Name_Map name_map_S20597C9[] = {
  NSPAIR(_ZN8S20597C9C1Ev),
  NSPAIR(_ZN8S20597C9D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S8087C2_nt;
extern VTBL_ENTRY _ZTI10S8087C2_nt[];
extern  VTBL_ENTRY _ZTV10S8087C2_nt[];
extern Class_Descriptor cd_S20597C5;
extern VTBL_ENTRY _ZTI8S20597C5[];
extern  VTBL_ENTRY _ZTV8S20597C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20597C5[];
static Base_Class bases_S20597C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8087C2_nt,    ABISELECT(16,8), //bcp->offset
    5, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20597C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20597C9[];
extern void _ZN8S20597C9D1Ev();
extern void _ZN8S20597C9D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S20597C9D1Ev,_ZTv0_n12_N8S20597C9D1Ev)();
extern void ABISELECT(_ZThn16_N8S20597C9D1Ev,_ZThn8_N8S20597C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20597C9D0Ev,_ZTv0_n12_N8S20597C9D0Ev)();
extern void ABISELECT(_ZThn16_N8S20597C9D0Ev,_ZThn8_N8S20597C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20597C9[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20597C9[0]),
  (VTBL_ENTRY)&_ZN8S20597C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20597C9D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20597C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20597C9D1Ev,_ZTv0_n12_N8S20597C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20597C9D0Ev,_ZTv0_n12_N8S20597C9D0Ev),
};
extern VTBL_ENTRY _ZTV8S20597C9[];
extern void _ZN8S20597C5D1Ev();
extern void _ZN8S20597C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20597C5__8S20597C9[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20597C5[0]),
  (VTBL_ENTRY)&_ZN8S20597C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20597C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20597C5D1Ev,_ZTv0_n12_N8S20597C5D1Ev)();
extern void ABISELECT(_ZThn16_N8S20597C5D1Ev,_ZThn8_N8S20597C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20597C5D0Ev,_ZTv0_n12_N8S20597C5D0Ev)();
extern void ABISELECT(_ZThn16_N8S20597C5D0Ev,_ZThn8_N8S20597C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S8087C2_nt__8S20597C5__8S20597C9[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20597C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20597C5D1Ev,_ZTv0_n12_N8S20597C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20597C5D0Ev,_ZTv0_n12_N8S20597C5D0Ev),
};
static  VTT_ENTRY vtt_S20597C9[] = {
  {&(_ZTV8S20597C9[3]),  3,10},
  {&(_tg__ZTV8S20597C5__8S20597C9[3]),  3,5},
  {&(_tg__ZTV10S8087C2_nt__8S20597C5__8S20597C9[3]),  3,5},
  {&(_ZTV8S20597C9[8]),  8,10},
};
extern VTBL_ENTRY _ZTI8S20597C9[];
extern  VTBL_ENTRY _ZTV8S20597C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20597C9[];
static VTBL_ENTRY alt_thunk_names62[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20597C5D0Ev,_ZTv0_n12_N8S20597C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20597C5D0Ev,_ZThn8_N8S20597C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20597C5D1Ev,_ZTv0_n12_N8S20597C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20597C5D1Ev,_ZThn8_N8S20597C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20597C9D0Ev,_ZTv0_n12_N8S20597C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20597C9D0Ev,_ZThn8_N8S20597C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20597C9D1Ev,_ZTv0_n12_N8S20597C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20597C9D1Ev,_ZThn8_N8S20597C9D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20597C9 = {  "S20597C9", // class name
  bases_S20597C9, 2,
  &(vtc_S20597C9[0]), // expected_vtbl_contents
  &(vtt_S20597C9[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S20597C9),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20597C9),10, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20597C9),4, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names62,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20597C1  : virtual S20597C2 , S3352C8_nt , virtual S20597C9 {
  void *s20597c1f0[2];
  int s20597c1f1;
  ~S20597C1(); // tgen
  S20597C1(); // tgen
};
//SIG(1 S20597C1) C1{ VBC2{ VBC3{ BC4{ vd m Fi} BC5{ VBC4 FU6{ m}} FU7{ m}[10]} vd} BC8{ m Fi} VBC9{ VBC4 BC5 vd} Fp[2] Fi}


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

static void Test_S20597C1()
{
  extern Class_Descriptor cd_S20597C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,16)];
    init_test(&cd_S20597C1, buf);
    S20597C1 *dp, &lv = *(dp=new (buf) S20597C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,60), "sizeof(S20597C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20597C1)");
    /*is_ambiguous_... S20597C3::S8087C2_nt */ AMB_check_base_class_offset(lv, (S8087C2_nt*)(S20597C3*), ABISELECT(40,20), "S20597C1");
    check_base_class_offset(lv, (S8087C2_nt*)(S20597C5*)(S20597C3*), ABISELECT(80,44), "S20597C1");
    check_base_class_offset(lv, (S8087C2_nt*)(S20597C9*), ABISELECT(80,44), "S20597C1");
    check_base_class_offset(lv, (S8087C2_nt*)(S20597C5*)(S20597C9*), ABISELECT(80,44), "S20597C1");
    check_base_class_offset(lv, (S20597C5*)(S20597C3*), ABISELECT(56,28), "S20597C1");
    check_base_class_offset(lv, (S20597C3*)(S20597C2*), ABISELECT(40,20), "S20597C1");
    check_base_class_offset(lv, (S20597C2*), 0, "S20597C1");
    check_base_class_offset(lv, (S3352C8_nt*), ABISELECT(8,4), "S20597C1");
    check_base_class_offset(lv, (S20597C5*)(S20597C9*), ABISELECT(96,52), "S20597C1");
    check_base_class_offset(lv, (S20597C9*), ABISELECT(96,52), "S20597C1");
    check_field_offset(lv, s20597c1f0, ABISELECT(16,8), "S20597C1.s20597c1f0");
    check_field_offset(lv, s20597c1f1, ABISELECT(32,16), "S20597C1.s20597c1f1");
    test_class_info(&lv, &cd_S20597C1);
    dp->~S20597C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20597C1(Test_S20597C1, "S20597C1", ABISELECT(112,60));

#else // __cplusplus

extern void _ZN8S20597C1C1Ev();
extern void _ZN8S20597C1D1Ev();
Name_Map name_map_S20597C1[] = {
  NSPAIR(_ZN8S20597C1C1Ev),
  NSPAIR(_ZN8S20597C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8087C2_nt;
extern VTBL_ENTRY _ZTI10S8087C2_nt[];
extern  VTBL_ENTRY _ZTV10S8087C2_nt[];
extern Class_Descriptor cd_S8087C2_nt;
extern VTBL_ENTRY _ZTI10S8087C2_nt[];
extern  VTBL_ENTRY _ZTV10S8087C2_nt[];
extern Class_Descriptor cd_S20597C5;
extern VTBL_ENTRY _ZTI8S20597C5[];
extern  VTBL_ENTRY _ZTV8S20597C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20597C5[];
extern Class_Descriptor cd_S20597C3;
extern VTBL_ENTRY _ZTI8S20597C3[];
extern  VTBL_ENTRY _ZTV8S20597C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20597C3[];
extern Class_Descriptor cd_S20597C2;
extern VTBL_ENTRY _ZTI8S20597C2[];
extern  VTBL_ENTRY _ZTV8S20597C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20597C2[];
extern Class_Descriptor cd_S3352C8_nt;
extern VTBL_ENTRY _ZTI10S3352C8_nt[];
extern Class_Descriptor cd_S20597C5;
extern VTBL_ENTRY _ZTI8S20597C5[];
extern  VTBL_ENTRY _ZTV8S20597C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20597C5[];
extern Class_Descriptor cd_S20597C9;
extern VTBL_ENTRY _ZTI8S20597C9[];
extern  VTBL_ENTRY _ZTV8S20597C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20597C9[];
static Base_Class bases_S20597C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8087C2_nt,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S8087C2_nt,    ABISELECT(80,44), //bcp->offset
    20, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S20597C5,    ABISELECT(56,28), //bcp->offset
    15, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20597C3,    ABISELECT(40,20), //bcp->offset
    9, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20597C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3352C8_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_S20597C5,    ABISELECT(96,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20597C9,    ABISELECT(96,52), //bcp->offset
    25, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20597C1[];
extern void _ZN8S20597C1D1Ev();
extern void _ZN8S20597C1D0Ev();
extern void ABISELECT(_ZTv0_n32_N8S20597C1D1Ev,_ZTv0_n16_N8S20597C1D1Ev)();
extern void ABISELECT(_ZThn40_N8S20597C1D1Ev,_ZThn20_N8S20597C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20597C1D0Ev,_ZTv0_n16_N8S20597C1D0Ev)();
extern void ABISELECT(_ZThn40_N8S20597C1D0Ev,_ZThn20_N8S20597C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn16_n32_N8S20597C1D1Ev,_ZTvn8_n16_N8S20597C1D1Ev)();
extern void ABISELECT(_ZTvn16_n32_N8S20597C1D0Ev,_ZTvn8_n16_N8S20597C1D0Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20597C1D1Ev,_ZTv0_n12_N8S20597C1D1Ev)();
extern void ABISELECT(_ZThn80_N8S20597C1D1Ev,_ZThn44_N8S20597C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20597C1D0Ev,_ZTv0_n12_N8S20597C1D0Ev)();
extern void ABISELECT(_ZThn80_N8S20597C1D0Ev,_ZThn44_N8S20597C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20597C1D1Ev,_ZTv0_n16_N8S20597C1D1Ev)();
extern void ABISELECT(_ZThn96_N8S20597C1D1Ev,_ZThn52_N8S20597C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20597C1D0Ev,_ZTv0_n16_N8S20597C1D0Ev)();
extern void ABISELECT(_ZThn96_N8S20597C1D0Ev,_ZThn52_N8S20597C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20597C1[] = {
  ABISELECT(96,52),
  0,
  0,
  ABISELECT(80,44),
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S20597C1[0]),
  (VTBL_ENTRY)&_ZN8S20597C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20597C1D0Ev,
  ABISELECT(-40,-20),
  ABISELECT(40,24),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S20597C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20597C1D1Ev,_ZTv0_n16_N8S20597C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20597C1D0Ev,_ZTv0_n16_N8S20597C1D0Ev),
  ABISELECT(24,16),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S20597C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n32_N8S20597C1D1Ev,_ZTvn8_n16_N8S20597C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n32_N8S20597C1D0Ev,_ZTvn8_n16_N8S20597C1D0Ev),
  ABISELECT(-80,-44),
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI8S20597C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20597C1D1Ev,_ZTv0_n12_N8S20597C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20597C1D0Ev,_ZTv0_n12_N8S20597C1D0Ev),
  ABISELECT(-96,-52),
  ABISELECT(-16,-8),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI8S20597C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20597C1D1Ev,_ZTv0_n16_N8S20597C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20597C1D0Ev,_ZTv0_n16_N8S20597C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S20597C1[];
extern void _ZN8S20597C2D1Ev();
extern void _ZN8S20597C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20597C2__8S20597C1[] = {
  ABISELECT(80,44),
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S20597C2[0]),
  (VTBL_ENTRY)&_ZN8S20597C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20597C2D0Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S20597C2D1Ev,_ZTv0_n16_N8S20597C2D1Ev)();
extern void ABISELECT(_ZThn40_N8S20597C2D1Ev,_ZThn20_N8S20597C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20597C2D0Ev,_ZTv0_n16_N8S20597C2D0Ev)();
extern void ABISELECT(_ZThn40_N8S20597C2D0Ev,_ZThn20_N8S20597C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20597C3__8S20597C2__8S20597C1[] = {
  ABISELECT(-40,-20),
  ABISELECT(40,24),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S20597C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20597C2D1Ev,_ZTv0_n16_N8S20597C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20597C2D0Ev,_ZTv0_n16_N8S20597C2D0Ev),
};
extern void ABISELECT(_ZTvn16_n32_N8S20597C2D1Ev,_ZTvn8_n16_N8S20597C2D1Ev)();
extern void ABISELECT(_ZTvn16_n32_N8S20597C2D0Ev,_ZTvn8_n16_N8S20597C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20597C58S20597C3__8S20597C2__8S20597C1[] = {
  ABISELECT(24,16),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S20597C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n32_N8S20597C2D1Ev,_ZTvn8_n16_N8S20597C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n32_N8S20597C2D0Ev,_ZTvn8_n16_N8S20597C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20597C2D1Ev,_ZTv0_n12_N8S20597C2D1Ev)();
extern void ABISELECT(_ZThn80_N8S20597C2D1Ev,_ZThn44_N8S20597C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20597C2D0Ev,_ZTv0_n12_N8S20597C2D0Ev)();
extern void ABISELECT(_ZThn80_N8S20597C2D0Ev,_ZThn44_N8S20597C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S8087C2_nt__A1__8S20597C2__8S20597C1[] = {
  ABISELECT(-80,-44),
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI8S20597C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20597C2D1Ev,_ZTv0_n12_N8S20597C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20597C2D0Ev,_ZTv0_n12_N8S20597C2D0Ev),
};
extern void _ZN8S20597C3D1Ev();
extern void _ZN8S20597C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20597C3__8S20597C1[] = {
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20597C3[0]),
  (VTBL_ENTRY)&_ZN8S20597C3D1Ev,
  (VTBL_ENTRY)&_ZN8S20597C3D0Ev,
};
extern void _ZN8S20597C5D1Ev();
extern void _ZN8S20597C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20597C58S20597C3__8S20597C1[] = {
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S20597C5[0]),
  (VTBL_ENTRY)&_ZN8S20597C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20597C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20597C5D1Ev,_ZTv0_n12_N8S20597C5D1Ev)();
extern void ABISELECT(_ZThn24_N8S20597C5D1Ev,_ZThn16_N8S20597C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20597C5D0Ev,_ZTv0_n12_N8S20597C5D0Ev)();
extern void ABISELECT(_ZThn24_N8S20597C5D0Ev,_ZThn16_N8S20597C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S8087C2_nt__8S20597C58S20597C3__8S20597C1[] = {
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S20597C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20597C5D1Ev,_ZTv0_n12_N8S20597C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20597C5D0Ev,_ZTv0_n12_N8S20597C5D0Ev),
};
extern void ABISELECT(_ZThn16_N8S20597C3D1Ev,_ZThn8_N8S20597C3D1Ev)();
extern void ABISELECT(_ZThn16_N8S20597C3D0Ev,_ZThn8_N8S20597C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20597C5__8S20597C3__8S20597C1[] = {
  ABISELECT(24,16),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20597C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S20597C3D1Ev,_ZThn8_N8S20597C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S20597C3D0Ev,_ZThn8_N8S20597C3D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20597C3D1Ev,_ZTv0_n12_N8S20597C3D1Ev)();
extern void ABISELECT(_ZThn40_N8S20597C3D1Ev,_ZThn24_N8S20597C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20597C3D0Ev,_ZTv0_n12_N8S20597C3D0Ev)();
extern void ABISELECT(_ZThn40_N8S20597C3D0Ev,_ZThn24_N8S20597C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV10S8087C2_nt__A1__8S20597C3__8S20597C1[] = {
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S20597C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20597C3D1Ev,_ZTv0_n12_N8S20597C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20597C3D0Ev,_ZTv0_n12_N8S20597C3D0Ev),
};
extern void _ZN8S20597C9D1Ev();
extern void _ZN8S20597C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20597C9__8S20597C1[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20597C9[0]),
  (VTBL_ENTRY)&_ZN8S20597C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20597C9D0Ev,
};
extern void _ZN8S20597C5D1Ev();
extern void _ZN8S20597C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20597C58S20597C9__A1__8S20597C1[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20597C5[0]),
  (VTBL_ENTRY)&_ZN8S20597C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20597C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20597C5D1Ev,_ZTv0_n12_N8S20597C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20597C5D0Ev,_ZTv0_n12_N8S20597C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S8087C2_nt__8S20597C58S20597C9__A1__8S20597C1[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S20597C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20597C5D1Ev,_ZTv0_n12_N8S20597C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20597C5D0Ev,_ZTv0_n12_N8S20597C5D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20597C9D1Ev,_ZTv0_n12_N8S20597C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20597C9D0Ev,_ZTv0_n12_N8S20597C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV10S8087C2_nt__8S20597C9__8S20597C1[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S20597C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20597C9D1Ev,_ZTv0_n12_N8S20597C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20597C9D0Ev,_ZTv0_n12_N8S20597C9D0Ev),
};
static  VTT_ENTRY vtt_S20597C1[] = {
  {&(_ZTV8S20597C1[7]),  7,31},
  {&(_ZTV8S20597C1[7]),  7,31},
  {&(_ZTV8S20597C1[13]),  13,31},
  {&(_ZTV8S20597C1[18]),  18,31},
  {&(_ZTV8S20597C1[23]),  23,31},
  {&(_ZTV8S20597C1[29]),  29,31},
  {&(_tg__ZTV8S20597C2__8S20597C1[4]),  4,6},
  {&(_tg__ZTV8S20597C3__8S20597C2__8S20597C1[4]),  4,6},
  {&(_tg__ZTV8S20597C58S20597C3__8S20597C2__8S20597C1[3]),  3,5},
  {&(_tg__ZTV10S8087C2_nt__A1__8S20597C2__8S20597C1[3]),  3,5},
  {&(_tg__ZTV8S20597C3__8S20597C1[3]),  3,5},
  {&(_tg__ZTV8S20597C58S20597C3__8S20597C1[3]),  3,5},
  {&(_tg__ZTV10S8087C2_nt__8S20597C58S20597C3__8S20597C1[3]),  3,5},
  {&(_tg__ZTV8S20597C5__8S20597C3__8S20597C1[3]),  3,5},
  {&(_tg__ZTV10S8087C2_nt__A1__8S20597C3__8S20597C1[3]),  3,5},
  {&(_tg__ZTV8S20597C9__8S20597C1[3]),  3,5},
  {&(_tg__ZTV8S20597C58S20597C9__A1__8S20597C1[3]),  3,5},
  {&(_tg__ZTV10S8087C2_nt__8S20597C58S20597C9__A1__8S20597C1[3]),  3,5},
  {&(_tg__ZTV10S8087C2_nt__8S20597C9__8S20597C1[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S20597C1[];
extern  VTBL_ENTRY _ZTV8S20597C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20597C1[];
static VTBL_ENTRY alt_thunk_names63[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20597C3D0Ev,_ZTv0_n12_N8S20597C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S20597C3D0Ev,_ZThn24_N8S20597C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20597C3D1Ev,_ZTv0_n12_N8S20597C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S20597C3D1Ev,_ZThn24_N8S20597C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20597C5D0Ev,_ZTv0_n12_N8S20597C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20597C5D0Ev,_ZThn16_N8S20597C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20597C5D1Ev,_ZTv0_n12_N8S20597C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20597C5D1Ev,_ZThn16_N8S20597C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20597C2D0Ev,_ZTv0_n12_N8S20597C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S20597C2D0Ev,_ZThn44_N8S20597C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20597C2D1Ev,_ZTv0_n12_N8S20597C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S20597C2D1Ev,_ZThn44_N8S20597C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20597C2D0Ev,_ZTv0_n16_N8S20597C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S20597C2D0Ev,_ZThn20_N8S20597C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20597C2D1Ev,_ZTv0_n16_N8S20597C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S20597C2D1Ev,_ZThn20_N8S20597C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20597C1D0Ev,_ZTv0_n12_N8S20597C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S20597C1D0Ev,_ZThn44_N8S20597C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20597C1D1Ev,_ZTv0_n12_N8S20597C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S20597C1D1Ev,_ZThn44_N8S20597C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20597C1D0Ev,_ZTv0_n16_N8S20597C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S20597C1D0Ev,_ZThn52_N8S20597C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S20597C1D0Ev,_ZThn20_N8S20597C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20597C1D1Ev,_ZTv0_n16_N8S20597C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N8S20597C1D1Ev,_ZThn52_N8S20597C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S20597C1D1Ev,_ZThn20_N8S20597C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20597C1 = {  "S20597C1", // class name
  bases_S20597C1, 8,
  &(vtc_S20597C1[0]), // expected_vtbl_contents
  &(vtt_S20597C1[0]), // expected_vtt_contents
  ABISELECT(112,60), // object size
  NSPAIRA(_ZTI8S20597C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20597C1),31, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20597C1),19, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names63,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4826C3  {
  ::S2120C20_nt s4826c3f0;
  int s4826c3f1[2];
  char s4826c3f2;
  virtual  ~S4826C3(); // _ZN7S4826C3D1Ev
  virtual void  v3(); // _ZN7S4826C32v3Ev
  virtual void  v4(); // _ZN7S4826C32v4Ev
  virtual void  v5(); // _ZN7S4826C32v5Ev
  S4826C3(); // tgen
};
//SIG(-1 S4826C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4826C3 ::~S4826C3(){ note_dtor("S4826C3", this);}
void  S4826C3 ::v3(){vfunc_called(this, "_ZN7S4826C32v3Ev");}
void  S4826C3 ::v4(){vfunc_called(this, "_ZN7S4826C32v4Ev");}
void  S4826C3 ::v5(){vfunc_called(this, "_ZN7S4826C32v5Ev");}
S4826C3 ::S4826C3(){ note_ctor("S4826C3", this);} // tgen

static void Test_S4826C3()
{
  extern Class_Descriptor cd_S4826C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4826C3, buf);
    S4826C3 *dp, &lv = *(dp=new (buf) S4826C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4826C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4826C3)");
    check_field_offset(lv, s4826c3f0, ABISELECT(8,4), "S4826C3.s4826c3f0");
    check_field_offset(lv, s4826c3f1, ABISELECT(24,16), "S4826C3.s4826c3f1");
    check_field_offset(lv, s4826c3f2, ABISELECT(32,24), "S4826C3.s4826c3f2");
    test_class_info(&lv, &cd_S4826C3);
    dp->~S4826C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4826C3(Test_S4826C3, "S4826C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4826C3C1Ev();
extern void _ZN7S4826C3D1Ev();
Name_Map name_map_S4826C3[] = {
  NSPAIR(_ZN7S4826C3C1Ev),
  NSPAIR(_ZN7S4826C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4826C3[];
extern void _ZN7S4826C3D1Ev();
extern void _ZN7S4826C3D0Ev();
extern void _ZN7S4826C32v3Ev();
extern void _ZN7S4826C32v4Ev();
extern void _ZN7S4826C32v5Ev();
static  VTBL_ENTRY vtc_S4826C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4826C3[0]),
  (VTBL_ENTRY)&_ZN7S4826C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4826C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4826C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4826C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4826C32v5Ev,
};
extern VTBL_ENTRY _ZTI7S4826C3[];
extern  VTBL_ENTRY _ZTV7S4826C3[];
Class_Descriptor cd_S4826C3 = {  "S4826C3", // class name
  0,0,//no base classes
  &(vtc_S4826C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4826C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4826C3),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  S4826C2  : S4826C3 {
  void *s4826c2f0[3];
  __tsi64 s4826c2f1;
  virtual  ~S4826C2(); // _ZN7S4826C2D1Ev
  virtual void  v6(); // _ZN7S4826C22v6Ev
  virtual void  v7(); // _ZN7S4826C22v7Ev
  S4826C2(); // tgen
};
//SIG(-1 S4826C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} vd v1 v2 Fp[3] FL}


 S4826C2 ::~S4826C2(){ note_dtor("S4826C2", this);}
void  S4826C2 ::v6(){vfunc_called(this, "_ZN7S4826C22v6Ev");}
void  S4826C2 ::v7(){vfunc_called(this, "_ZN7S4826C22v7Ev");}
S4826C2 ::S4826C2(){ note_ctor("S4826C2", this);} // tgen

static void Test_S4826C2()
{
  extern Class_Descriptor cd_S4826C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S4826C2, buf);
    S4826C2 *dp, &lv = *(dp=new (buf) S4826C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S4826C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4826C2)");
    check_base_class_offset(lv, (S4826C3*), 0, "S4826C2");
    check_field_offset(lv, s4826c2f0, ABISELECT(40,28), "S4826C2.s4826c2f0");
    check_field_offset(lv, s4826c2f1, ABISELECT(64,40), "S4826C2.s4826c2f1");
    test_class_info(&lv, &cd_S4826C2);
    dp->~S4826C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4826C2(Test_S4826C2, "S4826C2", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN7S4826C2C1Ev();
extern void _ZN7S4826C2D1Ev();
Name_Map name_map_S4826C2[] = {
  NSPAIR(_ZN7S4826C2C1Ev),
  NSPAIR(_ZN7S4826C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4826C3;
extern VTBL_ENTRY _ZTI7S4826C3[];
extern  VTBL_ENTRY _ZTV7S4826C3[];
static Base_Class bases_S4826C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4826C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4826C2[];
extern void _ZN7S4826C2D1Ev();
extern void _ZN7S4826C2D0Ev();
extern void _ZN7S4826C32v3Ev();
extern void _ZN7S4826C32v4Ev();
extern void _ZN7S4826C32v5Ev();
extern void _ZN7S4826C22v6Ev();
extern void _ZN7S4826C22v7Ev();
static  VTBL_ENTRY vtc_S4826C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4826C2[0]),
  (VTBL_ENTRY)&_ZN7S4826C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4826C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4826C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4826C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4826C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4826C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4826C22v7Ev,
};
extern VTBL_ENTRY _ZTI7S4826C2[];
extern  VTBL_ENTRY _ZTV7S4826C2[];
Class_Descriptor cd_S4826C2 = {  "S4826C2", // class name
  bases_S4826C2, 1,
  &(vtc_S4826C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI7S4826C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4826C2),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  S4826C1  : S4826C2 {
  ::S885C13_nt s4826c1f0;
  int s4826c1f1;
  virtual  ~S4826C1(); // _ZN7S4826C1D1Ev
  virtual void  v1(); // _ZN7S4826C12v1Ev
  virtual void  v2(); // _ZN7S4826C12v2Ev
  S4826C1(); // tgen
};
//SIG(1 S4826C1) C1{ BC2{ BC3{ vd v3 v4 v5 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} vd v6 v7 Fp[3] FL} vd v1 v2 FC6{ m Fp} Fi}


 S4826C1 ::~S4826C1(){ note_dtor("S4826C1", this);}
void  S4826C1 ::v1(){vfunc_called(this, "_ZN7S4826C12v1Ev");}
void  S4826C1 ::v2(){vfunc_called(this, "_ZN7S4826C12v2Ev");}
S4826C1 ::S4826C1(){ note_ctor("S4826C1", this);} // tgen

static void Test_S4826C1()
{
  extern Class_Descriptor cd_S4826C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,15)];
    init_test(&cd_S4826C1, buf);
    S4826C1 *dp, &lv = *(dp=new (buf) S4826C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,56), "sizeof(S4826C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4826C1)");
    check_base_class_offset(lv, (S4826C3*)(S4826C2*), 0, "S4826C1");
    check_base_class_offset(lv, (S4826C2*), 0, "S4826C1");
    check_field_offset(lv, s4826c1f0, ABISELECT(72,48), "S4826C1.s4826c1f0");
    check_field_offset(lv, s4826c1f1, ABISELECT(80,52), "S4826C1.s4826c1f1");
    test_class_info(&lv, &cd_S4826C1);
    dp->~S4826C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4826C1(Test_S4826C1, "S4826C1", ABISELECT(88,56));

#else // __cplusplus

extern void _ZN7S4826C1C1Ev();
extern void _ZN7S4826C1D1Ev();
Name_Map name_map_S4826C1[] = {
  NSPAIR(_ZN7S4826C1C1Ev),
  NSPAIR(_ZN7S4826C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4826C3;
extern VTBL_ENTRY _ZTI7S4826C3[];
extern  VTBL_ENTRY _ZTV7S4826C3[];
extern Class_Descriptor cd_S4826C2;
extern VTBL_ENTRY _ZTI7S4826C2[];
extern  VTBL_ENTRY _ZTV7S4826C2[];
static Base_Class bases_S4826C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4826C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4826C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S4826C1[];
extern void _ZN7S4826C1D1Ev();
extern void _ZN7S4826C1D0Ev();
extern void _ZN7S4826C32v3Ev();
extern void _ZN7S4826C32v4Ev();
extern void _ZN7S4826C32v5Ev();
extern void _ZN7S4826C22v6Ev();
extern void _ZN7S4826C22v7Ev();
extern void _ZN7S4826C12v1Ev();
extern void _ZN7S4826C12v2Ev();
static  VTBL_ENTRY vtc_S4826C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4826C1[0]),
  (VTBL_ENTRY)&_ZN7S4826C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4826C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4826C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4826C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4826C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4826C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4826C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4826C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4826C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S4826C1[];
extern  VTBL_ENTRY _ZTV7S4826C1[];
Class_Descriptor cd_S4826C1 = {  "S4826C1", // class name
  bases_S4826C1, 2,
  &(vtc_S4826C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,56), // object size
  NSPAIRA(_ZTI7S4826C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4826C1),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5150C3  {
  ::S3352C4_nt s5150c3f0;
  char s5150c3f1;
  virtual  ~S5150C3(); // _ZN7S5150C3D1Ev
  virtual void  v4(); // _ZN7S5150C32v4Ev
  virtual void  v5(); // _ZN7S5150C32v5Ev
  virtual void  v6(); // _ZN7S5150C32v6Ev
  virtual void  v7(); // _ZN7S5150C32v7Ev
  virtual void  v8(); // _ZN7S5150C32v8Ev
  virtual void  v9(); // _ZN7S5150C32v9Ev
  virtual void  v10(); // _ZN7S5150C33v10Ev
  S5150C3(); // tgen
};
//SIG(-1 S5150C3) C1{ vd v1 v2 v3 v4 v5 v6 v7 FC2{ m Fi[2]} Fc}


 S5150C3 ::~S5150C3(){ note_dtor("S5150C3", this);}
void  S5150C3 ::v4(){vfunc_called(this, "_ZN7S5150C32v4Ev");}
void  S5150C3 ::v5(){vfunc_called(this, "_ZN7S5150C32v5Ev");}
void  S5150C3 ::v6(){vfunc_called(this, "_ZN7S5150C32v6Ev");}
void  S5150C3 ::v7(){vfunc_called(this, "_ZN7S5150C32v7Ev");}
void  S5150C3 ::v8(){vfunc_called(this, "_ZN7S5150C32v8Ev");}
void  S5150C3 ::v9(){vfunc_called(this, "_ZN7S5150C32v9Ev");}
void  S5150C3 ::v10(){vfunc_called(this, "_ZN7S5150C33v10Ev");}
S5150C3 ::S5150C3(){ note_ctor("S5150C3", this);} // tgen

static void Test_S5150C3()
{
  extern Class_Descriptor cd_S5150C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S5150C3, buf);
    S5150C3 *dp, &lv = *(dp=new (buf) S5150C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S5150C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5150C3)");
    check_field_offset(lv, s5150c3f0, ABISELECT(8,4), "S5150C3.s5150c3f0");
    check_field_offset(lv, s5150c3f1, ABISELECT(16,12), "S5150C3.s5150c3f1");
    test_class_info(&lv, &cd_S5150C3);
    dp->~S5150C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5150C3(Test_S5150C3, "S5150C3", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S5150C3C1Ev();
extern void _ZN7S5150C3D1Ev();
Name_Map name_map_S5150C3[] = {
  NSPAIR(_ZN7S5150C3C1Ev),
  NSPAIR(_ZN7S5150C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S5150C3[];
extern void _ZN7S5150C3D1Ev();
extern void _ZN7S5150C3D0Ev();
extern void _ZN7S5150C32v4Ev();
extern void _ZN7S5150C32v5Ev();
extern void _ZN7S5150C32v6Ev();
extern void _ZN7S5150C32v7Ev();
extern void _ZN7S5150C32v8Ev();
extern void _ZN7S5150C32v9Ev();
extern void _ZN7S5150C33v10Ev();
static  VTBL_ENTRY vtc_S5150C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5150C3[0]),
  (VTBL_ENTRY)&_ZN7S5150C3D1Ev,
  (VTBL_ENTRY)&_ZN7S5150C3D0Ev,
  (VTBL_ENTRY)&_ZN7S5150C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5150C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5150C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5150C32v7Ev,
  (VTBL_ENTRY)&_ZN7S5150C32v8Ev,
  (VTBL_ENTRY)&_ZN7S5150C32v9Ev,
  (VTBL_ENTRY)&_ZN7S5150C33v10Ev,
};
extern VTBL_ENTRY _ZTI7S5150C3[];
extern  VTBL_ENTRY _ZTV7S5150C3[];
Class_Descriptor cd_S5150C3 = {  "S5150C3", // class name
  0,0,//no base classes
  &(vtc_S5150C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S5150C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S5150C3),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5150C2  : S5150C3 {
  int s5150c2f0[4];
  void *s5150c2f1;
  virtual  ~S5150C2(); // _ZN7S5150C2D1Ev
  virtual void  v11(); // _ZN7S5150C23v11Ev
  virtual void  v12(); // _ZN7S5150C23v12Ev
  S5150C2(); // tgen
};
//SIG(-1 S5150C2) C1{ BC2{ vd v3 v4 v5 v6 v7 v8 v9 FC3{ m Fi[2]} Fc} vd v1 v2 Fi[4] Fp}


 S5150C2 ::~S5150C2(){ note_dtor("S5150C2", this);}
void  S5150C2 ::v11(){vfunc_called(this, "_ZN7S5150C23v11Ev");}
void  S5150C2 ::v12(){vfunc_called(this, "_ZN7S5150C23v12Ev");}
S5150C2 ::S5150C2(){ note_ctor("S5150C2", this);} // tgen

static void Test_S5150C2()
{
  extern Class_Descriptor cd_S5150C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,10)];
    init_test(&cd_S5150C2, buf);
    S5150C2 *dp, &lv = *(dp=new (buf) S5150C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,36), "sizeof(S5150C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5150C2)");
    check_base_class_offset(lv, (S5150C3*), 0, "S5150C2");
    check_field_offset(lv, s5150c2f0, ABISELECT(20,16), "S5150C2.s5150c2f0");
    check_field_offset(lv, s5150c2f1, ABISELECT(40,32), "S5150C2.s5150c2f1");
    test_class_info(&lv, &cd_S5150C2);
    dp->~S5150C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5150C2(Test_S5150C2, "S5150C2", ABISELECT(48,36));

#else // __cplusplus

extern void _ZN7S5150C2C1Ev();
extern void _ZN7S5150C2D1Ev();
Name_Map name_map_S5150C2[] = {
  NSPAIR(_ZN7S5150C2C1Ev),
  NSPAIR(_ZN7S5150C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5150C3;
extern VTBL_ENTRY _ZTI7S5150C3[];
extern  VTBL_ENTRY _ZTV7S5150C3[];
static Base_Class bases_S5150C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5150C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5150C2[];
extern void _ZN7S5150C2D1Ev();
extern void _ZN7S5150C2D0Ev();
extern void _ZN7S5150C32v4Ev();
extern void _ZN7S5150C32v5Ev();
extern void _ZN7S5150C32v6Ev();
extern void _ZN7S5150C32v7Ev();
extern void _ZN7S5150C32v8Ev();
extern void _ZN7S5150C32v9Ev();
extern void _ZN7S5150C33v10Ev();
extern void _ZN7S5150C23v11Ev();
extern void _ZN7S5150C23v12Ev();
static  VTBL_ENTRY vtc_S5150C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5150C2[0]),
  (VTBL_ENTRY)&_ZN7S5150C2D1Ev,
  (VTBL_ENTRY)&_ZN7S5150C2D0Ev,
  (VTBL_ENTRY)&_ZN7S5150C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5150C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5150C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5150C32v7Ev,
  (VTBL_ENTRY)&_ZN7S5150C32v8Ev,
  (VTBL_ENTRY)&_ZN7S5150C32v9Ev,
  (VTBL_ENTRY)&_ZN7S5150C33v10Ev,
  (VTBL_ENTRY)&_ZN7S5150C23v11Ev,
  (VTBL_ENTRY)&_ZN7S5150C23v12Ev,
};
extern VTBL_ENTRY _ZTI7S5150C2[];
extern  VTBL_ENTRY _ZTV7S5150C2[];
Class_Descriptor cd_S5150C2 = {  "S5150C2", // class name
  bases_S5150C2, 1,
  &(vtc_S5150C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,36), // object size
  NSPAIRA(_ZTI7S5150C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5150C2),13, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5150C1  : S5150C2 {
  int s5150c1f0[2];
  virtual  ~S5150C1(); // _ZN7S5150C1D1Ev
  virtual void  v1(); // _ZN7S5150C12v1Ev
  virtual void  v2(); // _ZN7S5150C12v2Ev
  virtual void  v3(); // _ZN7S5150C12v3Ev
  S5150C1(); // tgen
};
//SIG(1 S5150C1) C1{ BC2{ BC3{ vd v4 v5 v6 v7 v8 v9 v10 FC4{ m Fi[2]} Fc} vd v11 v12 Fi[4] Fp} vd v1 v2 v3 Fi[2]}


 S5150C1 ::~S5150C1(){ note_dtor("S5150C1", this);}
void  S5150C1 ::v1(){vfunc_called(this, "_ZN7S5150C12v1Ev");}
void  S5150C1 ::v2(){vfunc_called(this, "_ZN7S5150C12v2Ev");}
void  S5150C1 ::v3(){vfunc_called(this, "_ZN7S5150C12v3Ev");}
S5150C1 ::S5150C1(){ note_ctor("S5150C1", this);} // tgen

static void Test_S5150C1()
{
  extern Class_Descriptor cd_S5150C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,12)];
    init_test(&cd_S5150C1, buf);
    S5150C1 *dp, &lv = *(dp=new (buf) S5150C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,44), "sizeof(S5150C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5150C1)");
    check_base_class_offset(lv, (S5150C3*)(S5150C2*), 0, "S5150C1");
    check_base_class_offset(lv, (S5150C2*), 0, "S5150C1");
    check_field_offset(lv, s5150c1f0, ABISELECT(48,36), "S5150C1.s5150c1f0");
    test_class_info(&lv, &cd_S5150C1);
    dp->~S5150C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5150C1(Test_S5150C1, "S5150C1", ABISELECT(56,44));

#else // __cplusplus

extern void _ZN7S5150C1C1Ev();
extern void _ZN7S5150C1D1Ev();
Name_Map name_map_S5150C1[] = {
  NSPAIR(_ZN7S5150C1C1Ev),
  NSPAIR(_ZN7S5150C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5150C3;
extern VTBL_ENTRY _ZTI7S5150C3[];
extern  VTBL_ENTRY _ZTV7S5150C3[];
extern Class_Descriptor cd_S5150C2;
extern VTBL_ENTRY _ZTI7S5150C2[];
extern  VTBL_ENTRY _ZTV7S5150C2[];
static Base_Class bases_S5150C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5150C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S5150C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S5150C1[];
extern void _ZN7S5150C1D1Ev();
extern void _ZN7S5150C1D0Ev();
extern void _ZN7S5150C32v4Ev();
extern void _ZN7S5150C32v5Ev();
extern void _ZN7S5150C32v6Ev();
extern void _ZN7S5150C32v7Ev();
extern void _ZN7S5150C32v8Ev();
extern void _ZN7S5150C32v9Ev();
extern void _ZN7S5150C33v10Ev();
extern void _ZN7S5150C23v11Ev();
extern void _ZN7S5150C23v12Ev();
extern void _ZN7S5150C12v1Ev();
extern void _ZN7S5150C12v2Ev();
extern void _ZN7S5150C12v3Ev();
static  VTBL_ENTRY vtc_S5150C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5150C1[0]),
  (VTBL_ENTRY)&_ZN7S5150C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5150C1D0Ev,
  (VTBL_ENTRY)&_ZN7S5150C32v4Ev,
  (VTBL_ENTRY)&_ZN7S5150C32v5Ev,
  (VTBL_ENTRY)&_ZN7S5150C32v6Ev,
  (VTBL_ENTRY)&_ZN7S5150C32v7Ev,
  (VTBL_ENTRY)&_ZN7S5150C32v8Ev,
  (VTBL_ENTRY)&_ZN7S5150C32v9Ev,
  (VTBL_ENTRY)&_ZN7S5150C33v10Ev,
  (VTBL_ENTRY)&_ZN7S5150C23v11Ev,
  (VTBL_ENTRY)&_ZN7S5150C23v12Ev,
  (VTBL_ENTRY)&_ZN7S5150C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5150C12v2Ev,
  (VTBL_ENTRY)&_ZN7S5150C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S5150C1[];
extern  VTBL_ENTRY _ZTV7S5150C1[];
Class_Descriptor cd_S5150C1 = {  "S5150C1", // class name
  bases_S5150C1, 2,
  &(vtc_S5150C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,44), // object size
  NSPAIRA(_ZTI7S5150C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5150C1),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  S4461C3  {
  ::S2120C20_nt s4461c3f0;
  int s4461c3f1[2];
  char s4461c3f2;
  virtual  ~S4461C3(); // _ZN7S4461C3D1Ev
  virtual void  v2(); // _ZN7S4461C32v2Ev
  virtual void  v3(); // _ZN7S4461C32v3Ev
  virtual void  v4(); // _ZN7S4461C32v4Ev
  S4461C3(); // tgen
};
//SIG(-1 S4461C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4461C3 ::~S4461C3(){ note_dtor("S4461C3", this);}
void  S4461C3 ::v2(){vfunc_called(this, "_ZN7S4461C32v2Ev");}
void  S4461C3 ::v3(){vfunc_called(this, "_ZN7S4461C32v3Ev");}
void  S4461C3 ::v4(){vfunc_called(this, "_ZN7S4461C32v4Ev");}
S4461C3 ::S4461C3(){ note_ctor("S4461C3", this);} // tgen

static void Test_S4461C3()
{
  extern Class_Descriptor cd_S4461C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4461C3, buf);
    S4461C3 *dp, &lv = *(dp=new (buf) S4461C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4461C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4461C3)");
    check_field_offset(lv, s4461c3f0, ABISELECT(8,4), "S4461C3.s4461c3f0");
    check_field_offset(lv, s4461c3f1, ABISELECT(24,16), "S4461C3.s4461c3f1");
    check_field_offset(lv, s4461c3f2, ABISELECT(32,24), "S4461C3.s4461c3f2");
    test_class_info(&lv, &cd_S4461C3);
    dp->~S4461C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4461C3(Test_S4461C3, "S4461C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4461C3C1Ev();
extern void _ZN7S4461C3D1Ev();
Name_Map name_map_S4461C3[] = {
  NSPAIR(_ZN7S4461C3C1Ev),
  NSPAIR(_ZN7S4461C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4461C3[];
extern void _ZN7S4461C3D1Ev();
extern void _ZN7S4461C3D0Ev();
extern void _ZN7S4461C32v2Ev();
extern void _ZN7S4461C32v3Ev();
extern void _ZN7S4461C32v4Ev();
static  VTBL_ENTRY vtc_S4461C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4461C3[0]),
  (VTBL_ENTRY)&_ZN7S4461C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4461C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4461C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4461C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4461C32v4Ev,
};
extern VTBL_ENTRY _ZTI7S4461C3[];
extern  VTBL_ENTRY _ZTV7S4461C3[];
Class_Descriptor cd_S4461C3 = {  "S4461C3", // class name
  0,0,//no base classes
  &(vtc_S4461C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4461C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4461C3),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  S4461C2  : S4461C3 {
  void *s4461c2f0[3];
  char s4461c2f1[2];
  virtual  ~S4461C2(); // _ZN7S4461C2D1Ev
  virtual void  v5(); // _ZN7S4461C22v5Ev
  virtual void  v6(); // _ZN7S4461C22v6Ev
  virtual void  v7(); // _ZN7S4461C22v7Ev
  virtual void  v8(); // _ZN7S4461C22v8Ev
  S4461C2(); // tgen
};
//SIG(-1 S4461C2) C1{ BC2{ vd v5 v6 v7 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} vd v1 v2 v3 v4 Fp[3] Fc[2]}


 S4461C2 ::~S4461C2(){ note_dtor("S4461C2", this);}
void  S4461C2 ::v5(){vfunc_called(this, "_ZN7S4461C22v5Ev");}
void  S4461C2 ::v6(){vfunc_called(this, "_ZN7S4461C22v6Ev");}
void  S4461C2 ::v7(){vfunc_called(this, "_ZN7S4461C22v7Ev");}
void  S4461C2 ::v8(){vfunc_called(this, "_ZN7S4461C22v8Ev");}
S4461C2 ::S4461C2(){ note_ctor("S4461C2", this);} // tgen

static void Test_S4461C2()
{
  extern Class_Descriptor cd_S4461C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,12)];
    init_test(&cd_S4461C2, buf);
    S4461C2 *dp, &lv = *(dp=new (buf) S4461C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,44), "sizeof(S4461C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4461C2)");
    check_base_class_offset(lv, (S4461C3*), 0, "S4461C2");
    check_field_offset(lv, s4461c2f0, ABISELECT(40,28), "S4461C2.s4461c2f0");
    check_field_offset(lv, s4461c2f1, ABISELECT(64,40), "S4461C2.s4461c2f1");
    test_class_info(&lv, &cd_S4461C2);
    dp->~S4461C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4461C2(Test_S4461C2, "S4461C2", ABISELECT(72,44));

#else // __cplusplus

extern void _ZN7S4461C2C1Ev();
extern void _ZN7S4461C2D1Ev();
Name_Map name_map_S4461C2[] = {
  NSPAIR(_ZN7S4461C2C1Ev),
  NSPAIR(_ZN7S4461C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4461C3;
extern VTBL_ENTRY _ZTI7S4461C3[];
extern  VTBL_ENTRY _ZTV7S4461C3[];
static Base_Class bases_S4461C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4461C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4461C2[];
extern void _ZN7S4461C2D1Ev();
extern void _ZN7S4461C2D0Ev();
extern void _ZN7S4461C32v2Ev();
extern void _ZN7S4461C32v3Ev();
extern void _ZN7S4461C32v4Ev();
extern void _ZN7S4461C22v5Ev();
extern void _ZN7S4461C22v6Ev();
extern void _ZN7S4461C22v7Ev();
extern void _ZN7S4461C22v8Ev();
static  VTBL_ENTRY vtc_S4461C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4461C2[0]),
  (VTBL_ENTRY)&_ZN7S4461C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4461C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4461C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4461C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4461C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4461C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4461C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4461C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4461C22v8Ev,
};
extern VTBL_ENTRY _ZTI7S4461C2[];
extern  VTBL_ENTRY _ZTV7S4461C2[];
Class_Descriptor cd_S4461C2 = {  "S4461C2", // class name
  bases_S4461C2, 1,
  &(vtc_S4461C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,44), // object size
  NSPAIRA(_ZTI7S4461C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4461C2),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4461C1  : S4461C2 {
  int s4461c1f0;
  virtual  ~S4461C1(); // _ZN7S4461C1D1Ev
  virtual void  v1(); // _ZN7S4461C12v1Ev
  S4461C1(); // tgen
};
//SIG(1 S4461C1) C1{ BC2{ BC3{ vd v2 v3 v4 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} vd v5 v6 v7 v8 Fp[3] Fc[2]} vd v1 Fi}


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

static void Test_S4461C1()
{
  extern Class_Descriptor cd_S4461C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S4461C1, buf);
    S4461C1 *dp, &lv = *(dp=new (buf) S4461C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S4461C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4461C1)");
    check_base_class_offset(lv, (S4461C3*)(S4461C2*), 0, "S4461C1");
    check_base_class_offset(lv, (S4461C2*), 0, "S4461C1");
    check_field_offset(lv, s4461c1f0, ABISELECT(68,44), "S4461C1.s4461c1f0");
    test_class_info(&lv, &cd_S4461C1);
    dp->~S4461C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4461C1(Test_S4461C1, "S4461C1", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN7S4461C1C1Ev();
extern void _ZN7S4461C1D1Ev();
Name_Map name_map_S4461C1[] = {
  NSPAIR(_ZN7S4461C1C1Ev),
  NSPAIR(_ZN7S4461C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4461C3;
extern VTBL_ENTRY _ZTI7S4461C3[];
extern  VTBL_ENTRY _ZTV7S4461C3[];
extern Class_Descriptor cd_S4461C2;
extern VTBL_ENTRY _ZTI7S4461C2[];
extern  VTBL_ENTRY _ZTV7S4461C2[];
static Base_Class bases_S4461C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4461C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4461C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S4461C1[];
extern void _ZN7S4461C1D1Ev();
extern void _ZN7S4461C1D0Ev();
extern void _ZN7S4461C32v2Ev();
extern void _ZN7S4461C32v3Ev();
extern void _ZN7S4461C32v4Ev();
extern void _ZN7S4461C22v5Ev();
extern void _ZN7S4461C22v6Ev();
extern void _ZN7S4461C22v7Ev();
extern void _ZN7S4461C22v8Ev();
extern void _ZN7S4461C12v1Ev();
static  VTBL_ENTRY vtc_S4461C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4461C1[0]),
  (VTBL_ENTRY)&_ZN7S4461C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4461C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4461C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4461C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4461C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4461C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4461C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4461C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4461C22v8Ev,
  (VTBL_ENTRY)&_ZN7S4461C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4461C1[];
extern  VTBL_ENTRY _ZTV7S4461C1[];
Class_Descriptor cd_S4461C1 = {  "S4461C1", // class name
  bases_S4461C1, 2,
  &(vtc_S4461C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI7S4461C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4461C1),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18663C1  {
  ::S7029C3 s18663c1f0;
  virtual void  v1(); // _ZN8S18663C12v1Ev
  virtual void  v2(); // _ZN8S18663C12v2Ev
  virtual void  v3(); // _ZN8S18663C12v3Ev
  virtual void  v4(); // _ZN8S18663C12v4Ev
  ~S18663C1(); // tgen
  S18663C1(); // tgen
};
//SIG(1 S18663C1) C1{ v1 v2 v3 v4 FC2{ VBC3{ BC4{ v10 v11 v12} vd v13 v14 v15} v5 v6 v7 v8 v9 Fi Fp[2] FL Fi}}


void  S18663C1 ::v1(){vfunc_called(this, "_ZN8S18663C12v1Ev");}
void  S18663C1 ::v2(){vfunc_called(this, "_ZN8S18663C12v2Ev");}
void  S18663C1 ::v3(){vfunc_called(this, "_ZN8S18663C12v3Ev");}
void  S18663C1 ::v4(){vfunc_called(this, "_ZN8S18663C12v4Ev");}
S18663C1 ::~S18663C1(){ note_dtor("S18663C1", this);} // tgen
S18663C1 ::S18663C1(){ note_ctor("S18663C1", this);} // tgen

static void Test_S18663C1()
{
  extern Class_Descriptor cd_S18663C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,9)];
    init_test(&cd_S18663C1, buf);
    S18663C1 *dp, &lv = *(dp=new (buf) S18663C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,32), "sizeof(S18663C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18663C1)");
    check_field_offset(lv, s18663c1f0, ABISELECT(8,4), "S18663C1.s18663c1f0");
    test_class_info(&lv, &cd_S18663C1);
    dp->~S18663C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18663C1(Test_S18663C1, "S18663C1", ABISELECT(56,32));

#else // __cplusplus

extern void _ZN8S18663C1C1Ev();
extern void _ZN8S18663C1D1Ev();
Name_Map name_map_S18663C1[] = {
  NSPAIR(_ZN8S18663C1C1Ev),
  NSPAIR(_ZN8S18663C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18663C1[];
extern void _ZN8S18663C12v1Ev();
extern void _ZN8S18663C12v2Ev();
extern void _ZN8S18663C12v3Ev();
extern void _ZN8S18663C12v4Ev();
static  VTBL_ENTRY vtc_S18663C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18663C1[0]),
  (VTBL_ENTRY)&_ZN8S18663C12v1Ev,
  (VTBL_ENTRY)&_ZN8S18663C12v2Ev,
  (VTBL_ENTRY)&_ZN8S18663C12v3Ev,
  (VTBL_ENTRY)&_ZN8S18663C12v4Ev,
};
extern VTBL_ENTRY _ZTI8S18663C1[];
extern  VTBL_ENTRY _ZTV8S18663C1[];
Class_Descriptor cd_S18663C1 = {  "S18663C1", // class name
  0,0,//no base classes
  &(vtc_S18663C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,32), // object size
  NSPAIRA(_ZTI8S18663C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18663C1),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13768C5  {
  char s13768c5f0;
  char s13768c5f1;
  char s13768c5f2;
  long s13768c5f3;
  long s13768c5f4;
  long s13768c5f5;
};
//SIG(-1 S13768C5) C1{ Fc[3] Fl[3]}



static void Test_S13768C5()
{
  {
    init_simple_test("S13768C5");
    S13768C5 lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S13768C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13768C5)");
    check_field_offset(lv, s13768c5f0, 0, "S13768C5.s13768c5f0");
    check_field_offset(lv, s13768c5f1, 1, "S13768C5.s13768c5f1");
    check_field_offset(lv, s13768c5f2, 2, "S13768C5.s13768c5f2");
    check_field_offset(lv, s13768c5f3, ABISELECT(8,4), "S13768C5.s13768c5f3");
    check_field_offset(lv, s13768c5f4, ABISELECT(16,8), "S13768C5.s13768c5f4");
    check_field_offset(lv, s13768c5f5, ABISELECT(24,12), "S13768C5.s13768c5f5");
  }
}
static Arrange_To_Call_Me vS13768C5(Test_S13768C5, "S13768C5", ABISELECT(32,16));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13768C4  {
  __tsi64 s13768c4f0;
  ::S13768C5 s13768c4f1;
  void *s13768c4f2;
};
//SIG(-1 S13768C4) C1{ FL FC2{ Fc[3] Fl[3]} Fp}



static void Test_S13768C4()
{
  {
    init_simple_test("S13768C4");
    S13768C4 lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S13768C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13768C4)");
    check_field_offset(lv, s13768c4f0, 0, "S13768C4.s13768c4f0");
    check_field_offset(lv, s13768c4f1, 8, "S13768C4.s13768c4f1");
    check_field_offset(lv, s13768c4f2, ABISELECT(40,24), "S13768C4.s13768c4f2");
  }
}
static Arrange_To_Call_Me vS13768C4(Test_S13768C4, "S13768C4", ABISELECT(48,28));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13768C6  {
  __tsi64 s13768c6f0;
  ::S13685C9 s13768c6f1;
};
//SIG(-1 S13768C6) C1{ FL FC2{ Fp FL}}



static void Test_S13768C6()
{
  {
    init_simple_test("S13768C6");
    S13768C6 lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(S13768C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13768C6)");
    check_field_offset(lv, s13768c6f0, 0, "S13768C6.s13768c6f0");
    check_field_offset(lv, s13768c6f1, 8, "S13768C6.s13768c6f1");
  }
}
static Arrange_To_Call_Me vS13768C6(Test_S13768C6, "S13768C6", ABISELECT(24,20));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13768C3  {
  __tsi64 s13768c3f0;
  short s13768c3f1;
  char s13768c3f2;
  ::S13768C4 s13768c3f3;
  ::S13768C6 s13768c3f4;
};
//SIG(1 S13768C3) C1{ FL Fs Fc FC2{ FL FC3{ Fc[3] Fl[3]} Fp} FC4{ FL FC5{ Fp FL}}}



static void Test_S13768C3()
{
  {
    init_simple_test("S13768C3");
    S13768C3 lv;
    check2(sizeof(lv), ABISELECT(88,60), "sizeof(S13768C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13768C3)");
    check_field_offset(lv, s13768c3f0, 0, "S13768C3.s13768c3f0");
    check_field_offset(lv, s13768c3f1, 8, "S13768C3.s13768c3f1");
    check_field_offset(lv, s13768c3f2, 10, "S13768C3.s13768c3f2");
    check_field_offset(lv, s13768c3f3, ABISELECT(16,12), "S13768C3.s13768c3f3");
    check_field_offset(lv, s13768c3f4, ABISELECT(64,40), "S13768C3.s13768c3f4");
  }
}
static Arrange_To_Call_Me vS13768C3(Test_S13768C3, "S13768C3", ABISELECT(88,60));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

union  S13768C2  {
  ::S13768C3 s13768c2f0;
  ::S13685C9 s13768c2f1;
};
//SIG(1 S13768C2) U1{ FC2{ FL Fs Fc FC3{ FL FC4{ Fc Fc Fc Fl Fl Fl} Fp} FC5{ FL FC6{ Fp FL}}} FC6}

#endif // __cplusplus
#ifdef __cplusplus

struct  S13768C1  {
  __tsi64 s13768c1f0;
  int s13768c1f1;
  ::S13768C2 s13768c1f2;
};
//SIG(1 S13768C1) C1{ FL Fi FU2{ FC3{ FL Fs Fc FC4{ FL FC5{ Fc Fc Fc Fl Fl Fl} Fp} FC6{ FL FC7{ Fp FL}}} FC7}}



static void Test_S13768C1()
{
  {
    init_simple_test("S13768C1");
    S13768C1 lv;
    check2(sizeof(lv), ABISELECT(104,72), "sizeof(S13768C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13768C1)");
    check_field_offset(lv, s13768c1f0, 0, "S13768C1.s13768c1f0");
    check_field_offset(lv, s13768c1f1, 8, "S13768C1.s13768c1f1");
    check_field_offset(lv, s13768c1f2, ABISELECT(16,12), "S13768C1.s13768c1f2");
  }
}
static Arrange_To_Call_Me vS13768C1(Test_S13768C1, "S13768C1", ABISELECT(104,72));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7322C4  {
  virtual void  v4(); // _ZN7S7322C42v4Ev
  virtual void  v5(); // _ZN7S7322C42v5Ev
  virtual void  v6(); // _ZN7S7322C42v6Ev
  ~S7322C4(); // tgen
  S7322C4(); // tgen
};
//SIG(-1 S7322C4) C1{ v1 v2 v3}


void  S7322C4 ::v4(){vfunc_called(this, "_ZN7S7322C42v4Ev");}
void  S7322C4 ::v5(){vfunc_called(this, "_ZN7S7322C42v5Ev");}
void  S7322C4 ::v6(){vfunc_called(this, "_ZN7S7322C42v6Ev");}
S7322C4 ::~S7322C4(){ note_dtor("S7322C4", this);} // tgen
S7322C4 ::S7322C4(){ note_ctor("S7322C4", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S7322C4C1Ev();
extern void _ZN7S7322C4D1Ev();
Name_Map name_map_S7322C4[] = {
  NSPAIR(_ZN7S7322C4C1Ev),
  NSPAIR(_ZN7S7322C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7322C4[];
extern void _ZN7S7322C42v4Ev();
extern void _ZN7S7322C42v5Ev();
extern void _ZN7S7322C42v6Ev();
static  VTBL_ENTRY vtc_S7322C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7322C4[0]),
  (VTBL_ENTRY)&_ZN7S7322C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7322C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7322C42v6Ev,
};
extern VTBL_ENTRY _ZTI7S7322C4[];
extern  VTBL_ENTRY _ZTV7S7322C4[];
Class_Descriptor cd_S7322C4 = {  "S7322C4", // class name
  0,0,//no base classes
  &(vtc_S7322C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7322C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7322C4),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  S7322C3  : S7322C4 {
  virtual  ~S7322C3(); // _ZN7S7322C3D1Ev
  virtual void  v7(); // _ZN7S7322C32v7Ev
  virtual void  v8(); // _ZN7S7322C32v8Ev
  virtual void  v9(); // _ZN7S7322C32v9Ev
  S7322C3(); // tgen
};
//SIG(-1 S7322C3) C1{ BC2{ v4 v5 v6} vd v1 v2 v3}


 S7322C3 ::~S7322C3(){ note_dtor("S7322C3", this);}
void  S7322C3 ::v7(){vfunc_called(this, "_ZN7S7322C32v7Ev");}
void  S7322C3 ::v8(){vfunc_called(this, "_ZN7S7322C32v8Ev");}
void  S7322C3 ::v9(){vfunc_called(this, "_ZN7S7322C32v9Ev");}
S7322C3 ::S7322C3(){ note_ctor("S7322C3", this);} // tgen

static void Test_S7322C3()
{
  extern Class_Descriptor cd_S7322C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S7322C3, buf);
    S7322C3 *dp, &lv = *(dp=new (buf) S7322C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S7322C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7322C3)");
    check_base_class_offset(lv, (S7322C4*), 0, "S7322C3");
    test_class_info(&lv, &cd_S7322C3);
    dp->~S7322C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7322C3(Test_S7322C3, "S7322C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S7322C3C1Ev();
extern void _ZN7S7322C3D1Ev();
Name_Map name_map_S7322C3[] = {
  NSPAIR(_ZN7S7322C3C1Ev),
  NSPAIR(_ZN7S7322C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7322C4;
extern VTBL_ENTRY _ZTI7S7322C4[];
extern  VTBL_ENTRY _ZTV7S7322C4[];
static Base_Class bases_S7322C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7322C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7322C3[];
extern void _ZN7S7322C42v4Ev();
extern void _ZN7S7322C42v5Ev();
extern void _ZN7S7322C42v6Ev();
extern void _ZN7S7322C3D1Ev();
extern void _ZN7S7322C3D0Ev();
extern void _ZN7S7322C32v7Ev();
extern void _ZN7S7322C32v8Ev();
extern void _ZN7S7322C32v9Ev();
static  VTBL_ENTRY vtc_S7322C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7322C3[0]),
  (VTBL_ENTRY)&_ZN7S7322C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7322C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7322C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7322C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7322C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7322C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7322C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7322C32v9Ev,
};
extern VTBL_ENTRY _ZTI7S7322C3[];
extern  VTBL_ENTRY _ZTV7S7322C3[];
Class_Descriptor cd_S7322C3 = {  "S7322C3", // class name
  bases_S7322C3, 1,
  &(vtc_S7322C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7322C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7322C3),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7322C2  : virtual S7322C3 {
  virtual  ~S7322C2(); // _ZN7S7322C2D2Ev
  virtual void  v10(); // _ZN7S7322C23v10Ev
  virtual void  v11(); // _ZN7S7322C23v11Ev
  virtual void  v12(); // _ZN7S7322C23v12Ev
  virtual void  v13(); // _ZN7S7322C23v13Ev
  virtual void  v14(); // _ZN7S7322C23v14Ev
  virtual void  v15(); // _ZN7S7322C23v15Ev
  S7322C2(); // tgen
};
//SIG(-1 S7322C2) C1{ VBC2{ BC3{ v7 v8 v9} vd v10 v11 v12} vd v1 v2 v3 v4 v5 v6}


 S7322C2 ::~S7322C2(){ note_dtor("S7322C2", this);}
void  S7322C2 ::v10(){vfunc_called(this, "_ZN7S7322C23v10Ev");}
void  S7322C2 ::v11(){vfunc_called(this, "_ZN7S7322C23v11Ev");}
void  S7322C2 ::v12(){vfunc_called(this, "_ZN7S7322C23v12Ev");}
void  S7322C2 ::v13(){vfunc_called(this, "_ZN7S7322C23v13Ev");}
void  S7322C2 ::v14(){vfunc_called(this, "_ZN7S7322C23v14Ev");}
void  S7322C2 ::v15(){vfunc_called(this, "_ZN7S7322C23v15Ev");}
S7322C2 ::S7322C2(){ note_ctor("S7322C2", this);} // tgen

static void Test_S7322C2()
{
  extern Class_Descriptor cd_S7322C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S7322C2, buf);
    S7322C2 *dp, &lv = *(dp=new (buf) S7322C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S7322C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7322C2)");
    check_base_class_offset(lv, (S7322C4*)(S7322C3*), 0, "S7322C2");
    check_base_class_offset(lv, (S7322C3*), 0, "S7322C2");
    test_class_info(&lv, &cd_S7322C2);
    dp->~S7322C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7322C2(Test_S7322C2, "S7322C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S7322C2C1Ev();
extern void _ZN7S7322C2D2Ev();
Name_Map name_map_S7322C2[] = {
  NSPAIR(_ZN7S7322C2C1Ev),
  NSPAIR(_ZN7S7322C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7322C4;
extern VTBL_ENTRY _ZTI7S7322C4[];
extern  VTBL_ENTRY _ZTV7S7322C4[];
extern Class_Descriptor cd_S7322C3;
extern VTBL_ENTRY _ZTI7S7322C3[];
extern  VTBL_ENTRY _ZTV7S7322C3[];
static Base_Class bases_S7322C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7322C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S7322C3,    0, //bcp->offset
    -1, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7322C2[];
extern void _ZN7S7322C42v4Ev();
extern void _ZN7S7322C42v5Ev();
extern void _ZN7S7322C42v6Ev();
extern void _ZN7S7322C2D1Ev();
extern void _ZN7S7322C2D0Ev();
extern void _ZN7S7322C32v7Ev();
extern void _ZN7S7322C32v8Ev();
extern void _ZN7S7322C32v9Ev();
extern void _ZN7S7322C23v10Ev();
extern void _ZN7S7322C23v11Ev();
extern void _ZN7S7322C23v12Ev();
extern void _ZN7S7322C23v13Ev();
extern void _ZN7S7322C23v14Ev();
extern void _ZN7S7322C23v15Ev();
static  VTBL_ENTRY vtc_S7322C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7322C2[0]),
  (VTBL_ENTRY)&_ZN7S7322C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7322C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7322C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7322C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7322C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7322C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7322C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7322C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7322C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7322C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7322C23v12Ev,
  (VTBL_ENTRY)&_ZN7S7322C23v13Ev,
  (VTBL_ENTRY)&_ZN7S7322C23v14Ev,
  (VTBL_ENTRY)&_ZN7S7322C23v15Ev,
};
extern VTBL_ENTRY _ZTV7S7322C2[];
static  VTT_ENTRY vtt_S7322C2[] = {
  {&(_ZTV7S7322C2[10]),  10,24},
  {&(_ZTV7S7322C2[10]),  10,24},
};
extern VTBL_ENTRY _ZTI7S7322C2[];
extern  VTBL_ENTRY _ZTV7S7322C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7322C2[];
Class_Descriptor cd_S7322C2 = {  "S7322C2", // class name
  bases_S7322C2, 2,
  &(vtc_S7322C2[0]), // expected_vtbl_contents
  &(vtt_S7322C2[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7322C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7322C2),24, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7322C2),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  S7322C1  : S7322C2 {
  int s7322c1f0[7];
  virtual  ~S7322C1(); // _ZN7S7322C1D2Ev
  virtual void  v1(); // _ZN7S7322C12v1Ev
  virtual void  v2(); // _ZN7S7322C12v2Ev
  virtual void  v3(); // _ZN7S7322C12v3Ev
  S7322C1(); // tgen
};
//SIG(1 S7322C1) C1{ BC2{ VBC3{ BC4{ v4 v5 v6} vd v7 v8 v9} vd v10 v11 v12 v13 v14 v15} vd v1 v2 v3 Fi[7]}


 S7322C1 ::~S7322C1(){ note_dtor("S7322C1", this);}
void  S7322C1 ::v1(){vfunc_called(this, "_ZN7S7322C12v1Ev");}
void  S7322C1 ::v2(){vfunc_called(this, "_ZN7S7322C12v2Ev");}
void  S7322C1 ::v3(){vfunc_called(this, "_ZN7S7322C12v3Ev");}
S7322C1 ::S7322C1(){ note_ctor("S7322C1", this);} // tgen

static void Test_S7322C1()
{
  extern Class_Descriptor cd_S7322C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,9)];
    init_test(&cd_S7322C1, buf);
    S7322C1 *dp, &lv = *(dp=new (buf) S7322C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,32), "sizeof(S7322C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7322C1)");
    check_base_class_offset(lv, (S7322C4*)(S7322C3*), 0, "S7322C1");
    check_base_class_offset(lv, (S7322C3*)(S7322C2*), 0, "S7322C1");
    check_base_class_offset(lv, (S7322C2*), 0, "S7322C1");
    check_field_offset(lv, s7322c1f0, ABISELECT(8,4), "S7322C1.s7322c1f0");
    test_class_info(&lv, &cd_S7322C1);
    dp->~S7322C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7322C1(Test_S7322C1, "S7322C1", ABISELECT(40,32));

#else // __cplusplus

extern void _ZN7S7322C1C1Ev();
extern void _ZN7S7322C1D2Ev();
Name_Map name_map_S7322C1[] = {
  NSPAIR(_ZN7S7322C1C1Ev),
  NSPAIR(_ZN7S7322C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7322C4;
extern VTBL_ENTRY _ZTI7S7322C4[];
extern  VTBL_ENTRY _ZTV7S7322C4[];
extern Class_Descriptor cd_S7322C3;
extern VTBL_ENTRY _ZTI7S7322C3[];
extern  VTBL_ENTRY _ZTV7S7322C3[];
extern Class_Descriptor cd_S7322C2;
extern VTBL_ENTRY _ZTI7S7322C2[];
extern  VTBL_ENTRY _ZTV7S7322C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7322C2[];
static Base_Class bases_S7322C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7322C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S7322C3,    0, //bcp->offset
    -1, //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
    2, //immediately_derived
  0, 1},
  {&cd_S7322C2,    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
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7322C1[];
extern void _ZN7S7322C42v4Ev();
extern void _ZN7S7322C42v5Ev();
extern void _ZN7S7322C42v6Ev();
extern void _ZN7S7322C1D1Ev();
extern void _ZN7S7322C1D0Ev();
extern void _ZN7S7322C32v7Ev();
extern void _ZN7S7322C32v8Ev();
extern void _ZN7S7322C32v9Ev();
extern void _ZN7S7322C23v10Ev();
extern void _ZN7S7322C23v11Ev();
extern void _ZN7S7322C23v12Ev();
extern void _ZN7S7322C23v13Ev();
extern void _ZN7S7322C23v14Ev();
extern void _ZN7S7322C23v15Ev();
extern void _ZN7S7322C12v1Ev();
extern void _ZN7S7322C12v2Ev();
extern void _ZN7S7322C12v3Ev();
static  VTBL_ENTRY vtc_S7322C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7322C1[0]),
  (VTBL_ENTRY)&_ZN7S7322C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7322C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7322C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7322C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7322C1D0Ev,
  (VTBL_ENTRY)&_ZN7S7322C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7322C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7322C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7322C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7322C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7322C23v12Ev,
  (VTBL_ENTRY)&_ZN7S7322C23v13Ev,
  (VTBL_ENTRY)&_ZN7S7322C23v14Ev,
  (VTBL_ENTRY)&_ZN7S7322C23v15Ev,
  (VTBL_ENTRY)&_ZN7S7322C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7322C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7322C12v3Ev,
};
extern VTBL_ENTRY _ZTV7S7322C1[];
extern void _ZN7S7322C42v4Ev();
extern void _ZN7S7322C42v5Ev();
extern void _ZN7S7322C42v6Ev();
extern void _ZN7S7322C2D1Ev();
extern void _ZN7S7322C2D0Ev();
extern void _ZN7S7322C32v7Ev();
extern void _ZN7S7322C32v8Ev();
extern void _ZN7S7322C32v9Ev();
extern void _ZN7S7322C23v10Ev();
extern void _ZN7S7322C23v11Ev();
extern void _ZN7S7322C23v12Ev();
extern void _ZN7S7322C23v13Ev();
extern void _ZN7S7322C23v14Ev();
extern void _ZN7S7322C23v15Ev();
static  VTBL_ENTRY _tg__ZTV7S7322C2__7S7322C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7322C2[0]),
  (VTBL_ENTRY)&_ZN7S7322C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7322C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7322C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7322C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7322C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7322C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7322C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7322C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7322C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7322C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7322C23v12Ev,
  (VTBL_ENTRY)&_ZN7S7322C23v13Ev,
  (VTBL_ENTRY)&_ZN7S7322C23v14Ev,
  (VTBL_ENTRY)&_ZN7S7322C23v15Ev,
};
static  VTT_ENTRY vtt_S7322C1[] = {
  {&(_ZTV7S7322C1[10]),  10,27},
  {&(_tg__ZTV7S7322C2__7S7322C1[10]),  10,24},
  {&(_tg__ZTV7S7322C2__7S7322C1[10]),  10,24},
  {&(_ZTV7S7322C1[10]),  10,27},
};
extern VTBL_ENTRY _ZTI7S7322C1[];
extern  VTBL_ENTRY _ZTV7S7322C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7322C1[];
Class_Descriptor cd_S7322C1 = {  "S7322C1", // class name
  bases_S7322C1, 3,
  &(vtc_S7322C1[0]), // expected_vtbl_contents
  &(vtt_S7322C1[0]), // expected_vtt_contents
  ABISELECT(40,32), // object size
  NSPAIRA(_ZTI7S7322C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7322C1),27, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7322C1),4, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7314C4  {
  virtual void  v3(); // _ZN7S7314C42v3Ev
  virtual void  v4(); // _ZN7S7314C42v4Ev
  virtual void  v5(); // _ZN7S7314C42v5Ev
  ~S7314C4(); // tgen
  S7314C4(); // tgen
};
//SIG(-1 S7314C4) C1{ v1 v2 v3}


void  S7314C4 ::v3(){vfunc_called(this, "_ZN7S7314C42v3Ev");}
void  S7314C4 ::v4(){vfunc_called(this, "_ZN7S7314C42v4Ev");}
void  S7314C4 ::v5(){vfunc_called(this, "_ZN7S7314C42v5Ev");}
S7314C4 ::~S7314C4(){ note_dtor("S7314C4", this);} // tgen
S7314C4 ::S7314C4(){ note_ctor("S7314C4", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S7314C4C1Ev();
extern void _ZN7S7314C4D1Ev();
Name_Map name_map_S7314C4[] = {
  NSPAIR(_ZN7S7314C4C1Ev),
  NSPAIR(_ZN7S7314C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7314C4[];
extern void _ZN7S7314C42v3Ev();
extern void _ZN7S7314C42v4Ev();
extern void _ZN7S7314C42v5Ev();
static  VTBL_ENTRY vtc_S7314C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7314C4[0]),
  (VTBL_ENTRY)&_ZN7S7314C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7314C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7314C42v5Ev,
};
extern VTBL_ENTRY _ZTI7S7314C4[];
extern  VTBL_ENTRY _ZTV7S7314C4[];
Class_Descriptor cd_S7314C4 = {  "S7314C4", // class name
  0,0,//no base classes
  &(vtc_S7314C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7314C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7314C4),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  S7314C3  : S7314C4 {
  virtual  ~S7314C3(); // _ZN7S7314C3D1Ev
  virtual void  v6(); // _ZN7S7314C32v6Ev
  virtual void  v7(); // _ZN7S7314C32v7Ev
  virtual void  v8(); // _ZN7S7314C32v8Ev
  S7314C3(); // tgen
};
//SIG(-1 S7314C3) C1{ BC2{ v4 v5 v6} vd v1 v2 v3}


 S7314C3 ::~S7314C3(){ note_dtor("S7314C3", this);}
void  S7314C3 ::v6(){vfunc_called(this, "_ZN7S7314C32v6Ev");}
void  S7314C3 ::v7(){vfunc_called(this, "_ZN7S7314C32v7Ev");}
void  S7314C3 ::v8(){vfunc_called(this, "_ZN7S7314C32v8Ev");}
S7314C3 ::S7314C3(){ note_ctor("S7314C3", this);} // tgen

static void Test_S7314C3()
{
  extern Class_Descriptor cd_S7314C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S7314C3, buf);
    S7314C3 *dp, &lv = *(dp=new (buf) S7314C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S7314C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7314C3)");
    check_base_class_offset(lv, (S7314C4*), 0, "S7314C3");
    test_class_info(&lv, &cd_S7314C3);
    dp->~S7314C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7314C3(Test_S7314C3, "S7314C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S7314C3C1Ev();
extern void _ZN7S7314C3D1Ev();
Name_Map name_map_S7314C3[] = {
  NSPAIR(_ZN7S7314C3C1Ev),
  NSPAIR(_ZN7S7314C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7314C4;
extern VTBL_ENTRY _ZTI7S7314C4[];
extern  VTBL_ENTRY _ZTV7S7314C4[];
static Base_Class bases_S7314C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7314C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7314C3[];
extern void _ZN7S7314C42v3Ev();
extern void _ZN7S7314C42v4Ev();
extern void _ZN7S7314C42v5Ev();
extern void _ZN7S7314C3D1Ev();
extern void _ZN7S7314C3D0Ev();
extern void _ZN7S7314C32v6Ev();
extern void _ZN7S7314C32v7Ev();
extern void _ZN7S7314C32v8Ev();
static  VTBL_ENTRY vtc_S7314C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7314C3[0]),
  (VTBL_ENTRY)&_ZN7S7314C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7314C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7314C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7314C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7314C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7314C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7314C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7314C32v8Ev,
};
extern VTBL_ENTRY _ZTI7S7314C3[];
extern  VTBL_ENTRY _ZTV7S7314C3[];
Class_Descriptor cd_S7314C3 = {  "S7314C3", // class name
  bases_S7314C3, 1,
  &(vtc_S7314C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7314C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7314C3),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7314C2  : virtual S7314C3 {
  ::S7314C4 s7314c2f0[2];
  int s7314c2f1;
  virtual  ~S7314C2(); // _ZN7S7314C2D2Ev
  virtual void  v9(); // _ZN7S7314C22v9Ev
  virtual void  v10(); // _ZN7S7314C23v10Ev
  virtual void  v11(); // _ZN7S7314C23v11Ev
  virtual void  v12(); // _ZN7S7314C23v12Ev
  virtual void  v13(); // _ZN7S7314C23v13Ev
  S7314C2(); // tgen
};
//SIG(-1 S7314C2) C1{ VBC2{ BC3{ v6 v7 v8} vd v9 v10 v11} vd v1 v2 v3 v4 v5 FC3[2] Fi}


 S7314C2 ::~S7314C2(){ note_dtor("S7314C2", this);}
void  S7314C2 ::v9(){vfunc_called(this, "_ZN7S7314C22v9Ev");}
void  S7314C2 ::v10(){vfunc_called(this, "_ZN7S7314C23v10Ev");}
void  S7314C2 ::v11(){vfunc_called(this, "_ZN7S7314C23v11Ev");}
void  S7314C2 ::v12(){vfunc_called(this, "_ZN7S7314C23v12Ev");}
void  S7314C2 ::v13(){vfunc_called(this, "_ZN7S7314C23v13Ev");}
S7314C2 ::S7314C2(){ note_ctor("S7314C2", this);} // tgen

static void Test_S7314C2()
{
  extern Class_Descriptor cd_S7314C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S7314C2, buf);
    S7314C2 *dp, &lv = *(dp=new (buf) S7314C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S7314C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7314C2)");
    check_base_class_offset(lv, (S7314C4*)(S7314C3*), 0, "S7314C2");
    check_base_class_offset(lv, (S7314C3*), 0, "S7314C2");
    check_field_offset(lv, s7314c2f0, ABISELECT(8,4), "S7314C2.s7314c2f0");
    check_field_offset(lv, s7314c2f1, ABISELECT(24,12), "S7314C2.s7314c2f1");
    test_class_info(&lv, &cd_S7314C2);
    dp->~S7314C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7314C2(Test_S7314C2, "S7314C2", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S7314C2C1Ev();
extern void _ZN7S7314C2D2Ev();
Name_Map name_map_S7314C2[] = {
  NSPAIR(_ZN7S7314C2C1Ev),
  NSPAIR(_ZN7S7314C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7314C4;
extern VTBL_ENTRY _ZTI7S7314C4[];
extern  VTBL_ENTRY _ZTV7S7314C4[];
extern Class_Descriptor cd_S7314C3;
extern VTBL_ENTRY _ZTI7S7314C3[];
extern  VTBL_ENTRY _ZTV7S7314C3[];
static Base_Class bases_S7314C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7314C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S7314C3,    0, //bcp->offset
    -1, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7314C2[];
extern void _ZN7S7314C42v3Ev();
extern void _ZN7S7314C42v4Ev();
extern void _ZN7S7314C42v5Ev();
extern void _ZN7S7314C2D1Ev();
extern void _ZN7S7314C2D0Ev();
extern void _ZN7S7314C32v6Ev();
extern void _ZN7S7314C32v7Ev();
extern void _ZN7S7314C32v8Ev();
extern void _ZN7S7314C22v9Ev();
extern void _ZN7S7314C23v10Ev();
extern void _ZN7S7314C23v11Ev();
extern void _ZN7S7314C23v12Ev();
extern void _ZN7S7314C23v13Ev();
static  VTBL_ENTRY vtc_S7314C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7314C2[0]),
  (VTBL_ENTRY)&_ZN7S7314C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7314C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7314C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7314C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7314C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7314C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7314C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7314C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7314C22v9Ev,
  (VTBL_ENTRY)&_ZN7S7314C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7314C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7314C23v12Ev,
  (VTBL_ENTRY)&_ZN7S7314C23v13Ev,
};
extern VTBL_ENTRY _ZTV7S7314C2[];
static  VTT_ENTRY vtt_S7314C2[] = {
  {&(_ZTV7S7314C2[10]),  10,23},
  {&(_ZTV7S7314C2[10]),  10,23},
};
extern VTBL_ENTRY _ZTI7S7314C2[];
extern  VTBL_ENTRY _ZTV7S7314C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7314C2[];
Class_Descriptor cd_S7314C2 = {  "S7314C2", // class name
  bases_S7314C2, 2,
  &(vtc_S7314C2[0]), // expected_vtbl_contents
  &(vtt_S7314C2[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S7314C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7314C2),23, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7314C2),2, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7314C1  : S7314C2 , S7314C4 {
  virtual  ~S7314C1(); // _ZN7S7314C1D2Ev
  virtual void  v1(); // _ZN7S7314C12v1Ev
  virtual void  v2(); // _ZN7S7314C12v2Ev
  S7314C1(); // tgen
};
//SIG(1 S7314C1) C1{ BC2{ VBC3{ BC4{ v3 v4 v5} vd v6 v7 v8} vd v9 v10 v11 v12 v13 FC4[2] Fi} BC4 vd v1 v2}


 S7314C1 ::~S7314C1(){ note_dtor("S7314C1", this);}
void  S7314C1 ::v1(){vfunc_called(this, "_ZN7S7314C12v1Ev");}
void  S7314C1 ::v2(){vfunc_called(this, "_ZN7S7314C12v2Ev");}
S7314C1 ::S7314C1(){ note_ctor("S7314C1", this);} // tgen

static void Test_S7314C1()
{
  extern Class_Descriptor cd_S7314C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S7314C1, buf);
    S7314C1 *dp, &lv = *(dp=new (buf) S7314C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S7314C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7314C1)");
    check_base_class_offset(lv, (S7314C4*)(S7314C3*), 0, "S7314C1");
    check_base_class_offset(lv, (S7314C3*)(S7314C2*), 0, "S7314C1");
    check_base_class_offset(lv, (S7314C2*), 0, "S7314C1");
    /*is_ambiguous_... S7314C1::S7314C4 */ AMB_check_base_class_offset(lv, (S7314C4*), ABISELECT(32,16), "S7314C1");
    test_class_info(&lv, &cd_S7314C1);
    dp->~S7314C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7314C1(Test_S7314C1, "S7314C1", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S7314C1C1Ev();
extern void _ZN7S7314C1D2Ev();
Name_Map name_map_S7314C1[] = {
  NSPAIR(_ZN7S7314C1C1Ev),
  NSPAIR(_ZN7S7314C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7314C4;
extern VTBL_ENTRY _ZTI7S7314C4[];
extern  VTBL_ENTRY _ZTV7S7314C4[];
extern Class_Descriptor cd_S7314C3;
extern VTBL_ENTRY _ZTI7S7314C3[];
extern  VTBL_ENTRY _ZTV7S7314C3[];
extern Class_Descriptor cd_S7314C2;
extern VTBL_ENTRY _ZTI7S7314C2[];
extern  VTBL_ENTRY _ZTV7S7314C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7314C2[];
extern Class_Descriptor cd_S7314C4;
extern VTBL_ENTRY _ZTI7S7314C4[];
extern  VTBL_ENTRY _ZTV7S7314C4[];
static Base_Class bases_S7314C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7314C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S7314C3,    0, //bcp->offset
    -1, //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
    2, //immediately_derived
  0, 1},
  {&cd_S7314C2,    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
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7314C4,    ABISELECT(32,16), //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
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7314C1[];
extern void _ZN7S7314C42v3Ev();
extern void _ZN7S7314C42v4Ev();
extern void _ZN7S7314C42v5Ev();
extern void _ZN7S7314C1D1Ev();
extern void _ZN7S7314C1D0Ev();
extern void _ZN7S7314C32v6Ev();
extern void _ZN7S7314C32v7Ev();
extern void _ZN7S7314C32v8Ev();
extern void _ZN7S7314C22v9Ev();
extern void _ZN7S7314C23v10Ev();
extern void _ZN7S7314C23v11Ev();
extern void _ZN7S7314C23v12Ev();
extern void _ZN7S7314C23v13Ev();
extern void _ZN7S7314C12v1Ev();
extern void _ZN7S7314C12v2Ev();
extern void _ZN7S7314C42v3Ev();
extern void _ZN7S7314C42v4Ev();
extern void _ZN7S7314C42v5Ev();
static  VTBL_ENTRY vtc_S7314C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7314C1[0]),
  (VTBL_ENTRY)&_ZN7S7314C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7314C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7314C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7314C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7314C1D0Ev,
  (VTBL_ENTRY)&_ZN7S7314C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7314C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7314C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7314C22v9Ev,
  (VTBL_ENTRY)&_ZN7S7314C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7314C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7314C23v12Ev,
  (VTBL_ENTRY)&_ZN7S7314C23v13Ev,
  (VTBL_ENTRY)&_ZN7S7314C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7314C12v2Ev,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S7314C1[0]),
  (VTBL_ENTRY)&_ZN7S7314C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7314C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7314C42v5Ev,
};
extern VTBL_ENTRY _ZTV7S7314C1[];
extern void _ZN7S7314C42v3Ev();
extern void _ZN7S7314C42v4Ev();
extern void _ZN7S7314C42v5Ev();
extern void _ZN7S7314C2D1Ev();
extern void _ZN7S7314C2D0Ev();
extern void _ZN7S7314C32v6Ev();
extern void _ZN7S7314C32v7Ev();
extern void _ZN7S7314C32v8Ev();
extern void _ZN7S7314C22v9Ev();
extern void _ZN7S7314C23v10Ev();
extern void _ZN7S7314C23v11Ev();
extern void _ZN7S7314C23v12Ev();
extern void _ZN7S7314C23v13Ev();
static  VTBL_ENTRY _tg__ZTV7S7314C2__7S7314C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7314C2[0]),
  (VTBL_ENTRY)&_ZN7S7314C42v3Ev,
  (VTBL_ENTRY)&_ZN7S7314C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7314C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7314C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7314C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7314C32v6Ev,
  (VTBL_ENTRY)&_ZN7S7314C32v7Ev,
  (VTBL_ENTRY)&_ZN7S7314C32v8Ev,
  (VTBL_ENTRY)&_ZN7S7314C22v9Ev,
  (VTBL_ENTRY)&_ZN7S7314C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7314C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7314C23v12Ev,
  (VTBL_ENTRY)&_ZN7S7314C23v13Ev,
};
static  VTT_ENTRY vtt_S7314C1[] = {
  {&(_ZTV7S7314C1[10]),  10,30},
  {&(_tg__ZTV7S7314C2__7S7314C1[10]),  10,23},
  {&(_tg__ZTV7S7314C2__7S7314C1[10]),  10,23},
  {&(_ZTV7S7314C1[10]),  10,30},
};
extern VTBL_ENTRY _ZTI7S7314C1[];
extern  VTBL_ENTRY _ZTV7S7314C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7314C1[];
Class_Descriptor cd_S7314C1 = {  "S7314C1", // class name
  bases_S7314C1, 4,
  &(vtc_S7314C1[0]), // expected_vtbl_contents
  &(vtt_S7314C1[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S7314C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7314C1),30, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7314C1),4, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4834C3  {
  ::S2120C20_nt s4834c3f0;
  int s4834c3f1[2];
  char s4834c3f2;
  virtual  ~S4834C3(); // _ZN7S4834C3D1Ev
  virtual void  v3(); // _ZN7S4834C32v3Ev
  virtual void  v4(); // _ZN7S4834C32v4Ev
  virtual void  v5(); // _ZN7S4834C32v5Ev
  S4834C3(); // tgen
};
//SIG(-1 S4834C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4834C3 ::~S4834C3(){ note_dtor("S4834C3", this);}
void  S4834C3 ::v3(){vfunc_called(this, "_ZN7S4834C32v3Ev");}
void  S4834C3 ::v4(){vfunc_called(this, "_ZN7S4834C32v4Ev");}
void  S4834C3 ::v5(){vfunc_called(this, "_ZN7S4834C32v5Ev");}
S4834C3 ::S4834C3(){ note_ctor("S4834C3", this);} // tgen

static void Test_S4834C3()
{
  extern Class_Descriptor cd_S4834C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4834C3, buf);
    S4834C3 *dp, &lv = *(dp=new (buf) S4834C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4834C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4834C3)");
    check_field_offset(lv, s4834c3f0, ABISELECT(8,4), "S4834C3.s4834c3f0");
    check_field_offset(lv, s4834c3f1, ABISELECT(24,16), "S4834C3.s4834c3f1");
    check_field_offset(lv, s4834c3f2, ABISELECT(32,24), "S4834C3.s4834c3f2");
    test_class_info(&lv, &cd_S4834C3);
    dp->~S4834C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4834C3(Test_S4834C3, "S4834C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4834C3C1Ev();
extern void _ZN7S4834C3D1Ev();
Name_Map name_map_S4834C3[] = {
  NSPAIR(_ZN7S4834C3C1Ev),
  NSPAIR(_ZN7S4834C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4834C3[];
extern void _ZN7S4834C3D1Ev();
extern void _ZN7S4834C3D0Ev();
extern void _ZN7S4834C32v3Ev();
extern void _ZN7S4834C32v4Ev();
extern void _ZN7S4834C32v5Ev();
static  VTBL_ENTRY vtc_S4834C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4834C3[0]),
  (VTBL_ENTRY)&_ZN7S4834C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4834C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4834C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4834C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4834C32v5Ev,
};
extern VTBL_ENTRY _ZTI7S4834C3[];
extern  VTBL_ENTRY _ZTV7S4834C3[];
Class_Descriptor cd_S4834C3 = {  "S4834C3", // class name
  0,0,//no base classes
  &(vtc_S4834C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4834C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4834C3),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  S4834C2  : S4834C3 {
  void *s4834c2f0[3];
  __tsi64 s4834c2f1;
  virtual  ~S4834C2(); // _ZN7S4834C2D1Ev
  virtual void  v6(); // _ZN7S4834C22v6Ev
  virtual void  v7(); // _ZN7S4834C22v7Ev
  S4834C2(); // tgen
};
//SIG(-1 S4834C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} vd v1 v2 Fp[3] FL}


 S4834C2 ::~S4834C2(){ note_dtor("S4834C2", this);}
void  S4834C2 ::v6(){vfunc_called(this, "_ZN7S4834C22v6Ev");}
void  S4834C2 ::v7(){vfunc_called(this, "_ZN7S4834C22v7Ev");}
S4834C2 ::S4834C2(){ note_ctor("S4834C2", this);} // tgen

static void Test_S4834C2()
{
  extern Class_Descriptor cd_S4834C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S4834C2, buf);
    S4834C2 *dp, &lv = *(dp=new (buf) S4834C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S4834C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4834C2)");
    check_base_class_offset(lv, (S4834C3*), 0, "S4834C2");
    check_field_offset(lv, s4834c2f0, ABISELECT(40,28), "S4834C2.s4834c2f0");
    check_field_offset(lv, s4834c2f1, ABISELECT(64,40), "S4834C2.s4834c2f1");
    test_class_info(&lv, &cd_S4834C2);
    dp->~S4834C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4834C2(Test_S4834C2, "S4834C2", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN7S4834C2C1Ev();
extern void _ZN7S4834C2D1Ev();
Name_Map name_map_S4834C2[] = {
  NSPAIR(_ZN7S4834C2C1Ev),
  NSPAIR(_ZN7S4834C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4834C3;
extern VTBL_ENTRY _ZTI7S4834C3[];
extern  VTBL_ENTRY _ZTV7S4834C3[];
static Base_Class bases_S4834C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4834C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4834C2[];
extern void _ZN7S4834C2D1Ev();
extern void _ZN7S4834C2D0Ev();
extern void _ZN7S4834C32v3Ev();
extern void _ZN7S4834C32v4Ev();
extern void _ZN7S4834C32v5Ev();
extern void _ZN7S4834C22v6Ev();
extern void _ZN7S4834C22v7Ev();
static  VTBL_ENTRY vtc_S4834C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4834C2[0]),
  (VTBL_ENTRY)&_ZN7S4834C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4834C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4834C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4834C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4834C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4834C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4834C22v7Ev,
};
extern VTBL_ENTRY _ZTI7S4834C2[];
extern  VTBL_ENTRY _ZTV7S4834C2[];
Class_Descriptor cd_S4834C2 = {  "S4834C2", // class name
  bases_S4834C2, 1,
  &(vtc_S4834C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI7S4834C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4834C2),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  S4834C1  : S4834C2 {
  void *s4834c1f0;
  virtual  ~S4834C1(); // _ZN7S4834C1D1Ev
  virtual void  v1(); // _ZN7S4834C12v1Ev
  virtual void  v2(); // _ZN7S4834C12v2Ev
  S4834C1(); // tgen
};
//SIG(1 S4834C1) C1{ BC2{ BC3{ vd v3 v4 v5 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} vd v6 v7 Fp[3] FL} vd v1 v2 Fp}


 S4834C1 ::~S4834C1(){ note_dtor("S4834C1", this);}
void  S4834C1 ::v1(){vfunc_called(this, "_ZN7S4834C12v1Ev");}
void  S4834C1 ::v2(){vfunc_called(this, "_ZN7S4834C12v2Ev");}
S4834C1 ::S4834C1(){ note_ctor("S4834C1", this);} // tgen

static void Test_S4834C1()
{
  extern Class_Descriptor cd_S4834C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,14)];
    init_test(&cd_S4834C1, buf);
    S4834C1 *dp, &lv = *(dp=new (buf) S4834C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,52), "sizeof(S4834C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4834C1)");
    check_base_class_offset(lv, (S4834C3*)(S4834C2*), 0, "S4834C1");
    check_base_class_offset(lv, (S4834C2*), 0, "S4834C1");
    check_field_offset(lv, s4834c1f0, ABISELECT(72,48), "S4834C1.s4834c1f0");
    test_class_info(&lv, &cd_S4834C1);
    dp->~S4834C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4834C1(Test_S4834C1, "S4834C1", ABISELECT(80,52));

#else // __cplusplus

extern void _ZN7S4834C1C1Ev();
extern void _ZN7S4834C1D1Ev();
Name_Map name_map_S4834C1[] = {
  NSPAIR(_ZN7S4834C1C1Ev),
  NSPAIR(_ZN7S4834C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4834C3;
extern VTBL_ENTRY _ZTI7S4834C3[];
extern  VTBL_ENTRY _ZTV7S4834C3[];
extern Class_Descriptor cd_S4834C2;
extern VTBL_ENTRY _ZTI7S4834C2[];
extern  VTBL_ENTRY _ZTV7S4834C2[];
static Base_Class bases_S4834C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4834C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4834C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S4834C1[];
extern void _ZN7S4834C1D1Ev();
extern void _ZN7S4834C1D0Ev();
extern void _ZN7S4834C32v3Ev();
extern void _ZN7S4834C32v4Ev();
extern void _ZN7S4834C32v5Ev();
extern void _ZN7S4834C22v6Ev();
extern void _ZN7S4834C22v7Ev();
extern void _ZN7S4834C12v1Ev();
extern void _ZN7S4834C12v2Ev();
static  VTBL_ENTRY vtc_S4834C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4834C1[0]),
  (VTBL_ENTRY)&_ZN7S4834C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4834C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4834C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4834C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4834C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4834C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4834C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4834C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4834C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S4834C1[];
extern  VTBL_ENTRY _ZTV7S4834C1[];
Class_Descriptor cd_S4834C1 = {  "S4834C1", // class name
  bases_S4834C1, 2,
  &(vtc_S4834C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,52), // object size
  NSPAIRA(_ZTI7S4834C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4834C1),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4833C3  {
  ::S2120C20_nt s4833c3f0;
  int s4833c3f1[2];
  char s4833c3f2;
  virtual  ~S4833C3(); // _ZN7S4833C3D1Ev
  virtual void  v3(); // _ZN7S4833C32v3Ev
  virtual void  v4(); // _ZN7S4833C32v4Ev
  virtual void  v5(); // _ZN7S4833C32v5Ev
  S4833C3(); // tgen
};
//SIG(-1 S4833C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4833C3 ::~S4833C3(){ note_dtor("S4833C3", this);}
void  S4833C3 ::v3(){vfunc_called(this, "_ZN7S4833C32v3Ev");}
void  S4833C3 ::v4(){vfunc_called(this, "_ZN7S4833C32v4Ev");}
void  S4833C3 ::v5(){vfunc_called(this, "_ZN7S4833C32v5Ev");}
S4833C3 ::S4833C3(){ note_ctor("S4833C3", this);} // tgen

static void Test_S4833C3()
{
  extern Class_Descriptor cd_S4833C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4833C3, buf);
    S4833C3 *dp, &lv = *(dp=new (buf) S4833C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4833C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4833C3)");
    check_field_offset(lv, s4833c3f0, ABISELECT(8,4), "S4833C3.s4833c3f0");
    check_field_offset(lv, s4833c3f1, ABISELECT(24,16), "S4833C3.s4833c3f1");
    check_field_offset(lv, s4833c3f2, ABISELECT(32,24), "S4833C3.s4833c3f2");
    test_class_info(&lv, &cd_S4833C3);
    dp->~S4833C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4833C3(Test_S4833C3, "S4833C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4833C3C1Ev();
extern void _ZN7S4833C3D1Ev();
Name_Map name_map_S4833C3[] = {
  NSPAIR(_ZN7S4833C3C1Ev),
  NSPAIR(_ZN7S4833C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4833C3[];
extern void _ZN7S4833C3D1Ev();
extern void _ZN7S4833C3D0Ev();
extern void _ZN7S4833C32v3Ev();
extern void _ZN7S4833C32v4Ev();
extern void _ZN7S4833C32v5Ev();
static  VTBL_ENTRY vtc_S4833C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4833C3[0]),
  (VTBL_ENTRY)&_ZN7S4833C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4833C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4833C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4833C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4833C32v5Ev,
};
extern VTBL_ENTRY _ZTI7S4833C3[];
extern  VTBL_ENTRY _ZTV7S4833C3[];
Class_Descriptor cd_S4833C3 = {  "S4833C3", // class name
  0,0,//no base classes
  &(vtc_S4833C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4833C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4833C3),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  S4833C2  : S4833C3 {
  void *s4833c2f0[3];
  __tsi64 s4833c2f1;
  virtual  ~S4833C2(); // _ZN7S4833C2D1Ev
  virtual void  v6(); // _ZN7S4833C22v6Ev
  virtual void  v7(); // _ZN7S4833C22v7Ev
  S4833C2(); // tgen
};
//SIG(-1 S4833C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} vd v1 v2 Fp[3] FL}


 S4833C2 ::~S4833C2(){ note_dtor("S4833C2", this);}
void  S4833C2 ::v6(){vfunc_called(this, "_ZN7S4833C22v6Ev");}
void  S4833C2 ::v7(){vfunc_called(this, "_ZN7S4833C22v7Ev");}
S4833C2 ::S4833C2(){ note_ctor("S4833C2", this);} // tgen

static void Test_S4833C2()
{
  extern Class_Descriptor cd_S4833C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S4833C2, buf);
    S4833C2 *dp, &lv = *(dp=new (buf) S4833C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S4833C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4833C2)");
    check_base_class_offset(lv, (S4833C3*), 0, "S4833C2");
    check_field_offset(lv, s4833c2f0, ABISELECT(40,28), "S4833C2.s4833c2f0");
    check_field_offset(lv, s4833c2f1, ABISELECT(64,40), "S4833C2.s4833c2f1");
    test_class_info(&lv, &cd_S4833C2);
    dp->~S4833C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4833C2(Test_S4833C2, "S4833C2", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN7S4833C2C1Ev();
extern void _ZN7S4833C2D1Ev();
Name_Map name_map_S4833C2[] = {
  NSPAIR(_ZN7S4833C2C1Ev),
  NSPAIR(_ZN7S4833C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4833C3;
extern VTBL_ENTRY _ZTI7S4833C3[];
extern  VTBL_ENTRY _ZTV7S4833C3[];
static Base_Class bases_S4833C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4833C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4833C2[];
extern void _ZN7S4833C2D1Ev();
extern void _ZN7S4833C2D0Ev();
extern void _ZN7S4833C32v3Ev();
extern void _ZN7S4833C32v4Ev();
extern void _ZN7S4833C32v5Ev();
extern void _ZN7S4833C22v6Ev();
extern void _ZN7S4833C22v7Ev();
static  VTBL_ENTRY vtc_S4833C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4833C2[0]),
  (VTBL_ENTRY)&_ZN7S4833C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4833C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4833C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4833C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4833C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4833C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4833C22v7Ev,
};
extern VTBL_ENTRY _ZTI7S4833C2[];
extern  VTBL_ENTRY _ZTV7S4833C2[];
Class_Descriptor cd_S4833C2 = {  "S4833C2", // class name
  bases_S4833C2, 1,
  &(vtc_S4833C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI7S4833C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4833C2),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  S4833C1  : S4833C2 {
  int s4833c1f0;
  virtual  ~S4833C1(); // _ZN7S4833C1D1Ev
  virtual void  v1(); // _ZN7S4833C12v1Ev
  virtual void  v2(); // _ZN7S4833C12v2Ev
  S4833C1(); // tgen
};
//SIG(1 S4833C1) C1{ BC2{ BC3{ vd v3 v4 v5 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} vd v6 v7 Fp[3] FL} vd v1 v2 Fi}


 S4833C1 ::~S4833C1(){ note_dtor("S4833C1", this);}
void  S4833C1 ::v1(){vfunc_called(this, "_ZN7S4833C12v1Ev");}
void  S4833C1 ::v2(){vfunc_called(this, "_ZN7S4833C12v2Ev");}
S4833C1 ::S4833C1(){ note_ctor("S4833C1", this);} // tgen

static void Test_S4833C1()
{
  extern Class_Descriptor cd_S4833C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,14)];
    init_test(&cd_S4833C1, buf);
    S4833C1 *dp, &lv = *(dp=new (buf) S4833C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,52), "sizeof(S4833C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4833C1)");
    check_base_class_offset(lv, (S4833C3*)(S4833C2*), 0, "S4833C1");
    check_base_class_offset(lv, (S4833C2*), 0, "S4833C1");
    check_field_offset(lv, s4833c1f0, ABISELECT(72,48), "S4833C1.s4833c1f0");
    test_class_info(&lv, &cd_S4833C1);
    dp->~S4833C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4833C1(Test_S4833C1, "S4833C1", ABISELECT(80,52));

#else // __cplusplus

extern void _ZN7S4833C1C1Ev();
extern void _ZN7S4833C1D1Ev();
Name_Map name_map_S4833C1[] = {
  NSPAIR(_ZN7S4833C1C1Ev),
  NSPAIR(_ZN7S4833C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4833C3;
extern VTBL_ENTRY _ZTI7S4833C3[];
extern  VTBL_ENTRY _ZTV7S4833C3[];
extern Class_Descriptor cd_S4833C2;
extern VTBL_ENTRY _ZTI7S4833C2[];
extern  VTBL_ENTRY _ZTV7S4833C2[];
static Base_Class bases_S4833C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4833C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4833C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S4833C1[];
extern void _ZN7S4833C1D1Ev();
extern void _ZN7S4833C1D0Ev();
extern void _ZN7S4833C32v3Ev();
extern void _ZN7S4833C32v4Ev();
extern void _ZN7S4833C32v5Ev();
extern void _ZN7S4833C22v6Ev();
extern void _ZN7S4833C22v7Ev();
extern void _ZN7S4833C12v1Ev();
extern void _ZN7S4833C12v2Ev();
static  VTBL_ENTRY vtc_S4833C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4833C1[0]),
  (VTBL_ENTRY)&_ZN7S4833C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4833C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4833C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4833C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4833C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4833C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4833C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4833C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4833C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S4833C1[];
extern  VTBL_ENTRY _ZTV7S4833C1[];
Class_Descriptor cd_S4833C1 = {  "S4833C1", // class name
  bases_S4833C1, 2,
  &(vtc_S4833C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,52), // object size
  NSPAIRA(_ZTI7S4833C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4833C1),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2626C2_nt  : S3352C8_nt {
};
//SIG(-1 S2626C2_nt) C1{ BC2{ m Fi}}



//skip512 S2626C2_nt

#else // __cplusplus

extern Class_Descriptor cd_S3352C8_nt;
extern VTBL_ENTRY _ZTI10S3352C8_nt[];
static Base_Class bases_S2626C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3352C8_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S2626C2_nt = {  "S2626C2_nt", // class name
  bases_S2626C2_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  S2626C5_nt  {
  ::S885C13_nt s2626c5f0;
  void  mf2626c5(); // _ZN10S2626C5_nt8mf2626c5Ev
};
//SIG(-1 S2626C5_nt) C1{ m FC2{ m Fp}}


void  S2626C5_nt ::mf2626c5(){}

//skip512 S2626C5_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2626C4_nt  {
  ::S2626C5_nt s2626c4f0;
  void  mf2626c4(); // _ZN10S2626C4_nt8mf2626c4Ev
};
//SIG(-1 S2626C4_nt) C1{ m FC2{ m FC3{ m Fp}}}


void  S2626C4_nt ::mf2626c4(){}

//skip512 S2626C4_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2626C1  : S2626C2_nt {
  ::S2626C4_nt s2626c1f0;
  ::S15144C2 s2626c1f1;
};
//SIG(1 S2626C1) C1{ BC2{ BC3{ m Fi}} FC4{ m FC5{ m FC6{ m Fp}}} FC7{ m Fi FC8{ BC9{ m Fp Fi} FC10{ FL[4]}}}}



static void Test_S2626C1()
{
  extern Class_Descriptor cd_S2626C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,14)];
    init_test(&cd_S2626C1, buf);
    S2626C1 &lv = *(new (buf) S2626C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,52), "sizeof(S2626C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2626C1)");
    check_base_class_offset(lv, (S3352C8_nt*)(S2626C2_nt*), 0, "S2626C1");
    check_base_class_offset(lv, (S2626C2_nt*), 0, "S2626C1");
    check_field_offset(lv, s2626c1f0, ABISELECT(8,4), "S2626C1.s2626c1f0");
    check_field_offset(lv, s2626c1f1, ABISELECT(16,8), "S2626C1.s2626c1f1");
    test_class_info(&lv, &cd_S2626C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2626C1(Test_S2626C1, "S2626C1", ABISELECT(72,52));

#else // __cplusplus

extern Class_Descriptor cd_S3352C8_nt;
extern VTBL_ENTRY _ZTI10S3352C8_nt[];
extern Class_Descriptor cd_S2626C2_nt;
static Base_Class bases_S2626C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3352C8_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2626C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S2626C1 = {  "S2626C1", // class name
  bases_S2626C1, 2,
  0, // no vftv
  0, //no vtt
  ABISELECT(72,52), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12198C1  {
  ::S16352C3 s12198c1f0;
  ::S16352C4 s12198c1f1;
};
//SIG(1 S12198C1) C1{ FC2{ Fs Fi Fs[2] Fi} FC3{ Fi[3] Fs[2] Fi[6]}}



static void Test_S12198C1()
{
  {
    init_simple_test("S12198C1");
    S12198C1 lv;
    check2(sizeof(lv), 56, "sizeof(S12198C1)");
    check2(__alignof__(lv), 4, "__alignof__(S12198C1)");
    check_field_offset(lv, s12198c1f0, 0, "S12198C1.s12198c1f0");
    check_field_offset(lv, s12198c1f1, 16, "S12198C1.s12198c1f1");
  }
}
static Arrange_To_Call_Me vS12198C1(Test_S12198C1, "S12198C1", 56);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9900C2  {
  ::S3352C4_nt s9900c2f0;
  char s9900c2f1;
  virtual  ~S9900C2(); // _ZN7S9900C2D1Ev
  virtual void  v5(); // _ZN7S9900C22v5Ev
  virtual void  v6(); // _ZN7S9900C22v6Ev
  virtual void  v7(); // _ZN7S9900C22v7Ev
  virtual void  v8(); // _ZN7S9900C22v8Ev
  virtual void  v9(); // _ZN7S9900C22v9Ev
  virtual void  v10(); // _ZN7S9900C23v10Ev
  virtual void  v11(); // _ZN7S9900C23v11Ev
  S9900C2(); // tgen
};
//SIG(-1 S9900C2) C1{ vd v1 v2 v3 v4 v5 v6 v7 FC2{ m Fi[2]} Fc}


 S9900C2 ::~S9900C2(){ note_dtor("S9900C2", this);}
void  S9900C2 ::v5(){vfunc_called(this, "_ZN7S9900C22v5Ev");}
void  S9900C2 ::v6(){vfunc_called(this, "_ZN7S9900C22v6Ev");}
void  S9900C2 ::v7(){vfunc_called(this, "_ZN7S9900C22v7Ev");}
void  S9900C2 ::v8(){vfunc_called(this, "_ZN7S9900C22v8Ev");}
void  S9900C2 ::v9(){vfunc_called(this, "_ZN7S9900C22v9Ev");}
void  S9900C2 ::v10(){vfunc_called(this, "_ZN7S9900C23v10Ev");}
void  S9900C2 ::v11(){vfunc_called(this, "_ZN7S9900C23v11Ev");}
S9900C2 ::S9900C2(){ note_ctor("S9900C2", this);} // tgen

static void Test_S9900C2()
{
  extern Class_Descriptor cd_S9900C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S9900C2, buf);
    S9900C2 *dp, &lv = *(dp=new (buf) S9900C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S9900C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9900C2)");
    check_field_offset(lv, s9900c2f0, ABISELECT(8,4), "S9900C2.s9900c2f0");
    check_field_offset(lv, s9900c2f1, ABISELECT(16,12), "S9900C2.s9900c2f1");
    test_class_info(&lv, &cd_S9900C2);
    dp->~S9900C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9900C2(Test_S9900C2, "S9900C2", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S9900C2C1Ev();
extern void _ZN7S9900C2D1Ev();
Name_Map name_map_S9900C2[] = {
  NSPAIR(_ZN7S9900C2C1Ev),
  NSPAIR(_ZN7S9900C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9900C2[];
extern void _ZN7S9900C2D1Ev();
extern void _ZN7S9900C2D0Ev();
extern void _ZN7S9900C22v5Ev();
extern void _ZN7S9900C22v6Ev();
extern void _ZN7S9900C22v7Ev();
extern void _ZN7S9900C22v8Ev();
extern void _ZN7S9900C22v9Ev();
extern void _ZN7S9900C23v10Ev();
extern void _ZN7S9900C23v11Ev();
static  VTBL_ENTRY vtc_S9900C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9900C2[0]),
  (VTBL_ENTRY)&_ZN7S9900C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9900C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9900C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9900C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9900C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9900C22v8Ev,
  (VTBL_ENTRY)&_ZN7S9900C22v9Ev,
  (VTBL_ENTRY)&_ZN7S9900C23v10Ev,
  (VTBL_ENTRY)&_ZN7S9900C23v11Ev,
};
extern VTBL_ENTRY _ZTI7S9900C2[];
extern  VTBL_ENTRY _ZTV7S9900C2[];
Class_Descriptor cd_S9900C2 = {  "S9900C2", // class name
  0,0,//no base classes
  &(vtc_S9900C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S9900C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9900C2),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9900C1  : S9900C2 {
  void *s9900c1f0[2];
  int s9900c1f1[2];
  char s9900c1f2;
  virtual  ~S9900C1(); // _ZN7S9900C1D1Ev
  virtual void  v1(); // _ZN7S9900C12v1Ev
  virtual void  v2(); // _ZN7S9900C12v2Ev
  virtual void  v3(); // _ZN7S9900C12v3Ev
  virtual void  v4(); // _ZN7S9900C12v4Ev
  S9900C1(); // tgen
};
//SIG(1 S9900C1) C1{ BC2{ vd v5 v6 v7 v8 v9 v10 v11 FC3{ m Fi[2]} Fc} vd v1 v2 v3 v4 Fp[2] Fi[2] Fc}


 S9900C1 ::~S9900C1(){ note_dtor("S9900C1", this);}
void  S9900C1 ::v1(){vfunc_called(this, "_ZN7S9900C12v1Ev");}
void  S9900C1 ::v2(){vfunc_called(this, "_ZN7S9900C12v2Ev");}
void  S9900C1 ::v3(){vfunc_called(this, "_ZN7S9900C12v3Ev");}
void  S9900C1 ::v4(){vfunc_called(this, "_ZN7S9900C12v4Ev");}
S9900C1 ::S9900C1(){ note_ctor("S9900C1", this);} // tgen

static void Test_S9900C1()
{
  extern Class_Descriptor cd_S9900C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,10)];
    init_test(&cd_S9900C1, buf);
    S9900C1 *dp, &lv = *(dp=new (buf) S9900C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,36), "sizeof(S9900C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9900C1)");
    check_base_class_offset(lv, (S9900C2*), 0, "S9900C1");
    check_field_offset(lv, s9900c1f0, ABISELECT(24,16), "S9900C1.s9900c1f0");
    check_field_offset(lv, s9900c1f1, ABISELECT(40,24), "S9900C1.s9900c1f1");
    check_field_offset(lv, s9900c1f2, ABISELECT(48,32), "S9900C1.s9900c1f2");
    test_class_info(&lv, &cd_S9900C1);
    dp->~S9900C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9900C1(Test_S9900C1, "S9900C1", ABISELECT(56,36));

#else // __cplusplus

extern void _ZN7S9900C1C1Ev();
extern void _ZN7S9900C1D1Ev();
Name_Map name_map_S9900C1[] = {
  NSPAIR(_ZN7S9900C1C1Ev),
  NSPAIR(_ZN7S9900C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9900C2;
extern VTBL_ENTRY _ZTI7S9900C2[];
extern  VTBL_ENTRY _ZTV7S9900C2[];
static Base_Class bases_S9900C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9900C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9900C1[];
extern void _ZN7S9900C1D1Ev();
extern void _ZN7S9900C1D0Ev();
extern void _ZN7S9900C22v5Ev();
extern void _ZN7S9900C22v6Ev();
extern void _ZN7S9900C22v7Ev();
extern void _ZN7S9900C22v8Ev();
extern void _ZN7S9900C22v9Ev();
extern void _ZN7S9900C23v10Ev();
extern void _ZN7S9900C23v11Ev();
extern void _ZN7S9900C12v1Ev();
extern void _ZN7S9900C12v2Ev();
extern void _ZN7S9900C12v3Ev();
extern void _ZN7S9900C12v4Ev();
static  VTBL_ENTRY vtc_S9900C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9900C1[0]),
  (VTBL_ENTRY)&_ZN7S9900C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9900C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9900C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9900C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9900C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9900C22v8Ev,
  (VTBL_ENTRY)&_ZN7S9900C22v9Ev,
  (VTBL_ENTRY)&_ZN7S9900C23v10Ev,
  (VTBL_ENTRY)&_ZN7S9900C23v11Ev,
  (VTBL_ENTRY)&_ZN7S9900C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9900C12v2Ev,
  (VTBL_ENTRY)&_ZN7S9900C12v3Ev,
  (VTBL_ENTRY)&_ZN7S9900C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S9900C1[];
extern  VTBL_ENTRY _ZTV7S9900C1[];
Class_Descriptor cd_S9900C1 = {  "S9900C1", // class name
  bases_S9900C1, 1,
  &(vtc_S9900C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,36), // object size
  NSPAIRA(_ZTI7S9900C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9900C1),15, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4835C3  {
  ::S2120C20_nt s4835c3f0;
  int s4835c3f1[2];
  char s4835c3f2;
  virtual  ~S4835C3(); // _ZN7S4835C3D1Ev
  virtual void  v3(); // _ZN7S4835C32v3Ev
  virtual void  v4(); // _ZN7S4835C32v4Ev
  virtual void  v5(); // _ZN7S4835C32v5Ev
  S4835C3(); // tgen
};
//SIG(-1 S4835C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4835C3 ::~S4835C3(){ note_dtor("S4835C3", this);}
void  S4835C3 ::v3(){vfunc_called(this, "_ZN7S4835C32v3Ev");}
void  S4835C3 ::v4(){vfunc_called(this, "_ZN7S4835C32v4Ev");}
void  S4835C3 ::v5(){vfunc_called(this, "_ZN7S4835C32v5Ev");}
S4835C3 ::S4835C3(){ note_ctor("S4835C3", this);} // tgen

static void Test_S4835C3()
{
  extern Class_Descriptor cd_S4835C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4835C3, buf);
    S4835C3 *dp, &lv = *(dp=new (buf) S4835C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4835C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4835C3)");
    check_field_offset(lv, s4835c3f0, ABISELECT(8,4), "S4835C3.s4835c3f0");
    check_field_offset(lv, s4835c3f1, ABISELECT(24,16), "S4835C3.s4835c3f1");
    check_field_offset(lv, s4835c3f2, ABISELECT(32,24), "S4835C3.s4835c3f2");
    test_class_info(&lv, &cd_S4835C3);
    dp->~S4835C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4835C3(Test_S4835C3, "S4835C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4835C3C1Ev();
extern void _ZN7S4835C3D1Ev();
Name_Map name_map_S4835C3[] = {
  NSPAIR(_ZN7S4835C3C1Ev),
  NSPAIR(_ZN7S4835C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4835C3[];
extern void _ZN7S4835C3D1Ev();
extern void _ZN7S4835C3D0Ev();
extern void _ZN7S4835C32v3Ev();
extern void _ZN7S4835C32v4Ev();
extern void _ZN7S4835C32v5Ev();
static  VTBL_ENTRY vtc_S4835C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4835C3[0]),
  (VTBL_ENTRY)&_ZN7S4835C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4835C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4835C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4835C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4835C32v5Ev,
};
extern VTBL_ENTRY _ZTI7S4835C3[];
extern  VTBL_ENTRY _ZTV7S4835C3[];
Class_Descriptor cd_S4835C3 = {  "S4835C3", // class name
  0,0,//no base classes
  &(vtc_S4835C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4835C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4835C3),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  S4835C2  : S4835C3 {
  void *s4835c2f0[3];
  __tsi64 s4835c2f1;
  virtual  ~S4835C2(); // _ZN7S4835C2D1Ev
  virtual void  v6(); // _ZN7S4835C22v6Ev
  virtual void  v7(); // _ZN7S4835C22v7Ev
  S4835C2(); // tgen
};
//SIG(-1 S4835C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} vd v1 v2 Fp[3] FL}


 S4835C2 ::~S4835C2(){ note_dtor("S4835C2", this);}
void  S4835C2 ::v6(){vfunc_called(this, "_ZN7S4835C22v6Ev");}
void  S4835C2 ::v7(){vfunc_called(this, "_ZN7S4835C22v7Ev");}
S4835C2 ::S4835C2(){ note_ctor("S4835C2", this);} // tgen

static void Test_S4835C2()
{
  extern Class_Descriptor cd_S4835C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S4835C2, buf);
    S4835C2 *dp, &lv = *(dp=new (buf) S4835C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S4835C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4835C2)");
    check_base_class_offset(lv, (S4835C3*), 0, "S4835C2");
    check_field_offset(lv, s4835c2f0, ABISELECT(40,28), "S4835C2.s4835c2f0");
    check_field_offset(lv, s4835c2f1, ABISELECT(64,40), "S4835C2.s4835c2f1");
    test_class_info(&lv, &cd_S4835C2);
    dp->~S4835C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4835C2(Test_S4835C2, "S4835C2", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN7S4835C2C1Ev();
extern void _ZN7S4835C2D1Ev();
Name_Map name_map_S4835C2[] = {
  NSPAIR(_ZN7S4835C2C1Ev),
  NSPAIR(_ZN7S4835C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4835C3;
extern VTBL_ENTRY _ZTI7S4835C3[];
extern  VTBL_ENTRY _ZTV7S4835C3[];
static Base_Class bases_S4835C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4835C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4835C2[];
extern void _ZN7S4835C2D1Ev();
extern void _ZN7S4835C2D0Ev();
extern void _ZN7S4835C32v3Ev();
extern void _ZN7S4835C32v4Ev();
extern void _ZN7S4835C32v5Ev();
extern void _ZN7S4835C22v6Ev();
extern void _ZN7S4835C22v7Ev();
static  VTBL_ENTRY vtc_S4835C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4835C2[0]),
  (VTBL_ENTRY)&_ZN7S4835C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4835C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4835C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4835C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4835C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4835C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4835C22v7Ev,
};
extern VTBL_ENTRY _ZTI7S4835C2[];
extern  VTBL_ENTRY _ZTV7S4835C2[];
Class_Descriptor cd_S4835C2 = {  "S4835C2", // class name
  bases_S4835C2, 1,
  &(vtc_S4835C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI7S4835C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4835C2),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  S4835C1  : S4835C2 {
  virtual  ~S4835C1(); // _ZN7S4835C1D1Ev
  virtual void  v1(); // _ZN7S4835C12v1Ev
  virtual void  v2(); // _ZN7S4835C12v2Ev
  S4835C1(); // tgen
};
//SIG(1 S4835C1) C1{ BC2{ BC3{ vd v3 v4 v5 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} vd v6 v7 Fp[3] FL} vd v1 v2}


 S4835C1 ::~S4835C1(){ note_dtor("S4835C1", this);}
void  S4835C1 ::v1(){vfunc_called(this, "_ZN7S4835C12v1Ev");}
void  S4835C1 ::v2(){vfunc_called(this, "_ZN7S4835C12v2Ev");}
S4835C1 ::S4835C1(){ note_ctor("S4835C1", this);} // tgen

static void Test_S4835C1()
{
  extern Class_Descriptor cd_S4835C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S4835C1, buf);
    S4835C1 *dp, &lv = *(dp=new (buf) S4835C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S4835C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4835C1)");
    check_base_class_offset(lv, (S4835C3*)(S4835C2*), 0, "S4835C1");
    check_base_class_offset(lv, (S4835C2*), 0, "S4835C1");
    test_class_info(&lv, &cd_S4835C1);
    dp->~S4835C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4835C1(Test_S4835C1, "S4835C1", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN7S4835C1C1Ev();
extern void _ZN7S4835C1D1Ev();
Name_Map name_map_S4835C1[] = {
  NSPAIR(_ZN7S4835C1C1Ev),
  NSPAIR(_ZN7S4835C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4835C3;
extern VTBL_ENTRY _ZTI7S4835C3[];
extern  VTBL_ENTRY _ZTV7S4835C3[];
extern Class_Descriptor cd_S4835C2;
extern VTBL_ENTRY _ZTI7S4835C2[];
extern  VTBL_ENTRY _ZTV7S4835C2[];
static Base_Class bases_S4835C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4835C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4835C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S4835C1[];
extern void _ZN7S4835C1D1Ev();
extern void _ZN7S4835C1D0Ev();
extern void _ZN7S4835C32v3Ev();
extern void _ZN7S4835C32v4Ev();
extern void _ZN7S4835C32v5Ev();
extern void _ZN7S4835C22v6Ev();
extern void _ZN7S4835C22v7Ev();
extern void _ZN7S4835C12v1Ev();
extern void _ZN7S4835C12v2Ev();
static  VTBL_ENTRY vtc_S4835C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4835C1[0]),
  (VTBL_ENTRY)&_ZN7S4835C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4835C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4835C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4835C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4835C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4835C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4835C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4835C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4835C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S4835C1[];
extern  VTBL_ENTRY _ZTV7S4835C1[];
Class_Descriptor cd_S4835C1 = {  "S4835C1", // class name
  bases_S4835C1, 2,
  &(vtc_S4835C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI7S4835C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4835C1),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9899C2  {
  ::S3352C4_nt s9899c2f0;
  char s9899c2f1;
  virtual  ~S9899C2(); // _ZN7S9899C2D1Ev
  virtual void  v5(); // _ZN7S9899C22v5Ev
  virtual void  v6(); // _ZN7S9899C22v6Ev
  virtual void  v7(); // _ZN7S9899C22v7Ev
  virtual void  v8(); // _ZN7S9899C22v8Ev
  virtual void  v9(); // _ZN7S9899C22v9Ev
  virtual void  v10(); // _ZN7S9899C23v10Ev
  virtual void  v11(); // _ZN7S9899C23v11Ev
  S9899C2(); // tgen
};
//SIG(-1 S9899C2) C1{ vd v1 v2 v3 v4 v5 v6 v7 FC2{ m Fi[2]} Fc}


 S9899C2 ::~S9899C2(){ note_dtor("S9899C2", this);}
void  S9899C2 ::v5(){vfunc_called(this, "_ZN7S9899C22v5Ev");}
void  S9899C2 ::v6(){vfunc_called(this, "_ZN7S9899C22v6Ev");}
void  S9899C2 ::v7(){vfunc_called(this, "_ZN7S9899C22v7Ev");}
void  S9899C2 ::v8(){vfunc_called(this, "_ZN7S9899C22v8Ev");}
void  S9899C2 ::v9(){vfunc_called(this, "_ZN7S9899C22v9Ev");}
void  S9899C2 ::v10(){vfunc_called(this, "_ZN7S9899C23v10Ev");}
void  S9899C2 ::v11(){vfunc_called(this, "_ZN7S9899C23v11Ev");}
S9899C2 ::S9899C2(){ note_ctor("S9899C2", this);} // tgen

static void Test_S9899C2()
{
  extern Class_Descriptor cd_S9899C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S9899C2, buf);
    S9899C2 *dp, &lv = *(dp=new (buf) S9899C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S9899C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9899C2)");
    check_field_offset(lv, s9899c2f0, ABISELECT(8,4), "S9899C2.s9899c2f0");
    check_field_offset(lv, s9899c2f1, ABISELECT(16,12), "S9899C2.s9899c2f1");
    test_class_info(&lv, &cd_S9899C2);
    dp->~S9899C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9899C2(Test_S9899C2, "S9899C2", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S9899C2C1Ev();
extern void _ZN7S9899C2D1Ev();
Name_Map name_map_S9899C2[] = {
  NSPAIR(_ZN7S9899C2C1Ev),
  NSPAIR(_ZN7S9899C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9899C2[];
extern void _ZN7S9899C2D1Ev();
extern void _ZN7S9899C2D0Ev();
extern void _ZN7S9899C22v5Ev();
extern void _ZN7S9899C22v6Ev();
extern void _ZN7S9899C22v7Ev();
extern void _ZN7S9899C22v8Ev();
extern void _ZN7S9899C22v9Ev();
extern void _ZN7S9899C23v10Ev();
extern void _ZN7S9899C23v11Ev();
static  VTBL_ENTRY vtc_S9899C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9899C2[0]),
  (VTBL_ENTRY)&_ZN7S9899C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9899C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9899C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9899C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9899C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9899C22v8Ev,
  (VTBL_ENTRY)&_ZN7S9899C22v9Ev,
  (VTBL_ENTRY)&_ZN7S9899C23v10Ev,
  (VTBL_ENTRY)&_ZN7S9899C23v11Ev,
};
extern VTBL_ENTRY _ZTI7S9899C2[];
extern  VTBL_ENTRY _ZTV7S9899C2[];
Class_Descriptor cd_S9899C2 = {  "S9899C2", // class name
  0,0,//no base classes
  &(vtc_S9899C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S9899C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9899C2),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9899C1  : S9899C2 {
  void *s9899c1f0;
  int s9899c1f1[6];
  virtual  ~S9899C1(); // _ZN7S9899C1D1Ev
  virtual void  v1(); // _ZN7S9899C12v1Ev
  virtual void  v2(); // _ZN7S9899C12v2Ev
  virtual void  v3(); // _ZN7S9899C12v3Ev
  virtual void  v4(); // _ZN7S9899C12v4Ev
  S9899C1(); // tgen
};
//SIG(1 S9899C1) C1{ BC2{ vd v5 v6 v7 v8 v9 v10 v11 FC3{ m Fi[2]} Fc} vd v1 v2 v3 v4 Fp Fi[6]}


 S9899C1 ::~S9899C1(){ note_dtor("S9899C1", this);}
void  S9899C1 ::v1(){vfunc_called(this, "_ZN7S9899C12v1Ev");}
void  S9899C1 ::v2(){vfunc_called(this, "_ZN7S9899C12v2Ev");}
void  S9899C1 ::v3(){vfunc_called(this, "_ZN7S9899C12v3Ev");}
void  S9899C1 ::v4(){vfunc_called(this, "_ZN7S9899C12v4Ev");}
S9899C1 ::S9899C1(){ note_ctor("S9899C1", this);} // tgen

static void Test_S9899C1()
{
  extern Class_Descriptor cd_S9899C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,12)];
    init_test(&cd_S9899C1, buf);
    S9899C1 *dp, &lv = *(dp=new (buf) S9899C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,44), "sizeof(S9899C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9899C1)");
    check_base_class_offset(lv, (S9899C2*), 0, "S9899C1");
    check_field_offset(lv, s9899c1f0, ABISELECT(24,16), "S9899C1.s9899c1f0");
    check_field_offset(lv, s9899c1f1, ABISELECT(32,20), "S9899C1.s9899c1f1");
    test_class_info(&lv, &cd_S9899C1);
    dp->~S9899C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9899C1(Test_S9899C1, "S9899C1", ABISELECT(56,44));

#else // __cplusplus

extern void _ZN7S9899C1C1Ev();
extern void _ZN7S9899C1D1Ev();
Name_Map name_map_S9899C1[] = {
  NSPAIR(_ZN7S9899C1C1Ev),
  NSPAIR(_ZN7S9899C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9899C2;
extern VTBL_ENTRY _ZTI7S9899C2[];
extern  VTBL_ENTRY _ZTV7S9899C2[];
static Base_Class bases_S9899C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9899C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9899C1[];
extern void _ZN7S9899C1D1Ev();
extern void _ZN7S9899C1D0Ev();
extern void _ZN7S9899C22v5Ev();
extern void _ZN7S9899C22v6Ev();
extern void _ZN7S9899C22v7Ev();
extern void _ZN7S9899C22v8Ev();
extern void _ZN7S9899C22v9Ev();
extern void _ZN7S9899C23v10Ev();
extern void _ZN7S9899C23v11Ev();
extern void _ZN7S9899C12v1Ev();
extern void _ZN7S9899C12v2Ev();
extern void _ZN7S9899C12v3Ev();
extern void _ZN7S9899C12v4Ev();
static  VTBL_ENTRY vtc_S9899C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9899C1[0]),
  (VTBL_ENTRY)&_ZN7S9899C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9899C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9899C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9899C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9899C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9899C22v8Ev,
  (VTBL_ENTRY)&_ZN7S9899C22v9Ev,
  (VTBL_ENTRY)&_ZN7S9899C23v10Ev,
  (VTBL_ENTRY)&_ZN7S9899C23v11Ev,
  (VTBL_ENTRY)&_ZN7S9899C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9899C12v2Ev,
  (VTBL_ENTRY)&_ZN7S9899C12v3Ev,
  (VTBL_ENTRY)&_ZN7S9899C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S9899C1[];
extern  VTBL_ENTRY _ZTV7S9899C1[];
Class_Descriptor cd_S9899C1 = {  "S9899C1", // class name
  bases_S9899C1, 1,
  &(vtc_S9899C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,44), // object size
  NSPAIRA(_ZTI7S9899C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9899C1),15, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11314C4_nt  {
  ::S11727C2_nt s11314c4f0;
  ::S11727C2_nt s11314c4f1;
};
//SIG(-1 S11314C4_nt) C1{ FC2{ FL[2]} FC2}



//skip512 S11314C4_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11314C5  {
  ::S11727C2_nt s11314c5f0;
  char s11314c5f1[5];
  void *s11314c5f2[2];
};
//SIG(-1 S11314C5) C1{ FC2{ FL[2]} Fc[5] Fp[2]}



static void Test_S11314C5()
{
  {
    init_simple_test("S11314C5");
    S11314C5 lv;
    check2(sizeof(lv), ABISELECT(40,32), "sizeof(S11314C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11314C5)");
    check_field_offset(lv, s11314c5f0, 0, "S11314C5.s11314c5f0");
    check_field_offset(lv, s11314c5f1, 16, "S11314C5.s11314c5f1");
    check_field_offset(lv, s11314c5f2, 24, "S11314C5.s11314c5f2");
  }
}
static Arrange_To_Call_Me vS11314C5(Test_S11314C5, "S11314C5", ABISELECT(40,32));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11314C1  {
  ::S11727C5_nt s11314c1f0;
  ::S11314C4_nt s11314c1f1;
  ::S11314C5 s11314c1f2;
  ::S11314C4_nt s11314c1f3;
};
//SIG(1 S11314C1) C1{ FC2{ FC3{ FL[2]} Fl FC3} FC4{ FC3 FC3} FC5{ FC3 Fc[5] Fp[2]} FC4}



static void Test_S11314C1()
{
  {
    init_simple_test("S11314C1");
    S11314C1 lv;
    check2(sizeof(lv), ABISELECT(144,132), "sizeof(S11314C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11314C1)");
    check_field_offset(lv, s11314c1f0, 0, "S11314C1.s11314c1f0");
    check_field_offset(lv, s11314c1f1, ABISELECT(40,36), "S11314C1.s11314c1f1");
    check_field_offset(lv, s11314c1f2, ABISELECT(72,68), "S11314C1.s11314c1f2");
    check_field_offset(lv, s11314c1f3, ABISELECT(112,100), "S11314C1.s11314c1f3");
  }
}
static Arrange_To_Call_Me vS11314C1(Test_S11314C1, "S11314C1", ABISELECT(144,132));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4039C3_nt  {
  void  mf4039c3(); // _ZN10S4039C3_nt8mf4039c3Ev
  virtual  ~S4039C3_nt(); // _ZN10S4039C3_ntD1Ev
  S4039C3_nt(); // tgen
};
//SIG(-1 S4039C3_nt) C1{ vd m}


void  S4039C3_nt ::mf4039c3(){}
 S4039C3_nt ::~S4039C3_nt(){ note_dtor("S4039C3_nt", this);}
S4039C3_nt ::S4039C3_nt(){ note_ctor("S4039C3_nt", this);} // tgen

//skip512 S4039C3_nt

#else // __cplusplus

extern void _ZN10S4039C3_ntC1Ev();
extern void _ZN10S4039C3_ntD1Ev();
Name_Map name_map_S4039C3_nt[] = {
  NSPAIR(_ZN10S4039C3_ntC1Ev),
  NSPAIR(_ZN10S4039C3_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S4039C3_nt[];
extern void _ZN10S4039C3_ntD1Ev();
extern void _ZN10S4039C3_ntD0Ev();
static  VTBL_ENTRY vtc_S4039C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S4039C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S4039C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S4039C3_ntD0Ev,
};
extern VTBL_ENTRY _ZTI10S4039C3_nt[];
VTBL_ENTRY *P__ZTI10S4039C3_nt = _ZTI10S4039C3_nt; 
extern  VTBL_ENTRY _ZTV10S4039C3_nt[];
Class_Descriptor cd_S4039C3_nt = {  "S4039C3_nt", // class name
  0,0,//no base classes
  &(vtc_S4039C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S4039C3_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S4039C3_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  S4039C4_nt  {
  char s4039c4f0[160];
  void  mf4039c4(); // _ZN10S4039C4_nt8mf4039c4Ev
};
//SIG(-1 S4039C4_nt) C1{ m Fc[160]}


void  S4039C4_nt ::mf4039c4(){}

//skip512 S4039C4_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4039C2  : S4039C3_nt {
  int s4039c2f0[2];
  ::S4039C4_nt s4039c2f1;
  virtual  ~S4039C2(); // _ZN7S4039C2D1Ev
  S4039C2(); // tgen
};
//SIG(-1 S4039C2) C1{ BC2{ vd m} vd Fi[2] FC3{ m Fc[160]}}


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

static void Test_S4039C2()
{
  extern Class_Descriptor cd_S4039C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(23,44)];
    init_test(&cd_S4039C2, buf);
    S4039C2 *dp, &lv = *(dp=new (buf) S4039C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,172), "sizeof(S4039C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4039C2)");
    check_base_class_offset(lv, (S4039C3_nt*), 0, "S4039C2");
    check_field_offset(lv, s4039c2f0, ABISELECT(8,4), "S4039C2.s4039c2f0");
    check_field_offset(lv, s4039c2f1, ABISELECT(16,12), "S4039C2.s4039c2f1");
    test_class_info(&lv, &cd_S4039C2);
    dp->~S4039C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4039C2(Test_S4039C2, "S4039C2", ABISELECT(176,172));

#else // __cplusplus

extern void _ZN7S4039C2C1Ev();
extern void _ZN7S4039C2D1Ev();
Name_Map name_map_S4039C2[] = {
  NSPAIR(_ZN7S4039C2C1Ev),
  NSPAIR(_ZN7S4039C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4039C3_nt;
extern VTBL_ENTRY _ZTI10S4039C3_nt[];
extern  VTBL_ENTRY _ZTV10S4039C3_nt[];
static Base_Class bases_S4039C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4039C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4039C2[];
extern void _ZN7S4039C2D1Ev();
extern void _ZN7S4039C2D0Ev();
static  VTBL_ENTRY vtc_S4039C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4039C2[0]),
  (VTBL_ENTRY)&_ZN7S4039C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4039C2D0Ev,
};
extern VTBL_ENTRY _ZTI7S4039C2[];
extern  VTBL_ENTRY _ZTV7S4039C2[];
Class_Descriptor cd_S4039C2 = {  "S4039C2", // class name
  bases_S4039C2, 1,
  &(vtc_S4039C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(176,172), // object size
  NSPAIRA(_ZTI7S4039C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4039C2),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  S4039C1  : S4039C2 {
  int s4039c1f0;
  ::S2120C20_nt s4039c1f1;
  virtual  ~S4039C1(); // _ZN7S4039C1D1Ev
  S4039C1(); // tgen
};
//SIG(1 S4039C1) C1{ BC2{ BC3{ vd m} vd Fi[2] FC4{ m Fc[160]}} vd Fi FC5{ m Fp Fi FC6{ m}}}


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

static void Test_S4039C1()
{
  extern Class_Descriptor cd_S4039C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(26,48)];
    init_test(&cd_S4039C1, buf);
    S4039C1 *dp, &lv = *(dp=new (buf) S4039C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(200,188), "sizeof(S4039C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4039C1)");
    check_base_class_offset(lv, (S4039C3_nt*)(S4039C2*), 0, "S4039C1");
    check_base_class_offset(lv, (S4039C2*), 0, "S4039C1");
    check_field_offset(lv, s4039c1f0, ABISELECT(176,172), "S4039C1.s4039c1f0");
    check_field_offset(lv, s4039c1f1, ABISELECT(184,176), "S4039C1.s4039c1f1");
    test_class_info(&lv, &cd_S4039C1);
    dp->~S4039C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4039C1(Test_S4039C1, "S4039C1", ABISELECT(200,188));

#else // __cplusplus

extern void _ZN7S4039C1C1Ev();
extern void _ZN7S4039C1D1Ev();
Name_Map name_map_S4039C1[] = {
  NSPAIR(_ZN7S4039C1C1Ev),
  NSPAIR(_ZN7S4039C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4039C3_nt;
extern VTBL_ENTRY _ZTI10S4039C3_nt[];
extern  VTBL_ENTRY _ZTV10S4039C3_nt[];
extern Class_Descriptor cd_S4039C2;
extern VTBL_ENTRY _ZTI7S4039C2[];
extern  VTBL_ENTRY _ZTV7S4039C2[];
static Base_Class bases_S4039C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4039C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4039C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S4039C1[];
extern void _ZN7S4039C1D1Ev();
extern void _ZN7S4039C1D0Ev();
static  VTBL_ENTRY vtc_S4039C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4039C1[0]),
  (VTBL_ENTRY)&_ZN7S4039C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4039C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S4039C1[];
extern  VTBL_ENTRY _ZTV7S4039C1[];
Class_Descriptor cd_S4039C1 = {  "S4039C1", // class name
  bases_S4039C1, 2,
  &(vtc_S4039C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(200,188), // object size
  NSPAIRA(_ZTI7S4039C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4039C1),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  S9722C2  {
  ::S2120C20_nt s9722c2f0;
  int s9722c2f1[2];
  char s9722c2f2;
  virtual  ~S9722C2(); // _ZN7S9722C2D1Ev
  virtual void  v4(); // _ZN7S9722C22v4Ev
  virtual void  v5(); // _ZN7S9722C22v5Ev
  virtual void  v6(); // _ZN7S9722C22v6Ev
  S9722C2(); // tgen
};
//SIG(-1 S9722C2) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S9722C2 ::~S9722C2(){ note_dtor("S9722C2", this);}
void  S9722C2 ::v4(){vfunc_called(this, "_ZN7S9722C22v4Ev");}
void  S9722C2 ::v5(){vfunc_called(this, "_ZN7S9722C22v5Ev");}
void  S9722C2 ::v6(){vfunc_called(this, "_ZN7S9722C22v6Ev");}
S9722C2 ::S9722C2(){ note_ctor("S9722C2", this);} // tgen

static void Test_S9722C2()
{
  extern Class_Descriptor cd_S9722C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S9722C2, buf);
    S9722C2 *dp, &lv = *(dp=new (buf) S9722C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S9722C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9722C2)");
    check_field_offset(lv, s9722c2f0, ABISELECT(8,4), "S9722C2.s9722c2f0");
    check_field_offset(lv, s9722c2f1, ABISELECT(24,16), "S9722C2.s9722c2f1");
    check_field_offset(lv, s9722c2f2, ABISELECT(32,24), "S9722C2.s9722c2f2");
    test_class_info(&lv, &cd_S9722C2);
    dp->~S9722C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9722C2(Test_S9722C2, "S9722C2", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S9722C2C1Ev();
extern void _ZN7S9722C2D1Ev();
Name_Map name_map_S9722C2[] = {
  NSPAIR(_ZN7S9722C2C1Ev),
  NSPAIR(_ZN7S9722C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9722C2[];
extern void _ZN7S9722C2D1Ev();
extern void _ZN7S9722C2D0Ev();
extern void _ZN7S9722C22v4Ev();
extern void _ZN7S9722C22v5Ev();
extern void _ZN7S9722C22v6Ev();
static  VTBL_ENTRY vtc_S9722C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9722C2[0]),
  (VTBL_ENTRY)&_ZN7S9722C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9722C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9722C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9722C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9722C22v6Ev,
};
extern VTBL_ENTRY _ZTI7S9722C2[];
extern  VTBL_ENTRY _ZTV7S9722C2[];
Class_Descriptor cd_S9722C2 = {  "S9722C2", // class name
  0,0,//no base classes
  &(vtc_S9722C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S9722C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9722C2),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  S9722C1  : S9722C2 {
  void *s9722c1f0[2];
  virtual  ~S9722C1(); // _ZN7S9722C1D1Ev
  virtual void  v1(); // _ZN7S9722C12v1Ev
  virtual void  v2(); // _ZN7S9722C12v2Ev
  virtual void  v3(); // _ZN7S9722C12v3Ev
  S9722C1(); // tgen
};
//SIG(1 S9722C1) C1{ BC2{ vd v4 v5 v6 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} vd v1 v2 v3 Fp[2]}


 S9722C1 ::~S9722C1(){ note_dtor("S9722C1", this);}
void  S9722C1 ::v1(){vfunc_called(this, "_ZN7S9722C12v1Ev");}
void  S9722C1 ::v2(){vfunc_called(this, "_ZN7S9722C12v2Ev");}
void  S9722C1 ::v3(){vfunc_called(this, "_ZN7S9722C12v3Ev");}
S9722C1 ::S9722C1(){ note_ctor("S9722C1", this);} // tgen

static void Test_S9722C1()
{
  extern Class_Descriptor cd_S9722C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,10)];
    init_test(&cd_S9722C1, buf);
    S9722C1 *dp, &lv = *(dp=new (buf) S9722C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,36), "sizeof(S9722C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9722C1)");
    check_base_class_offset(lv, (S9722C2*), 0, "S9722C1");
    check_field_offset(lv, s9722c1f0, ABISELECT(40,28), "S9722C1.s9722c1f0");
    test_class_info(&lv, &cd_S9722C1);
    dp->~S9722C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9722C1(Test_S9722C1, "S9722C1", ABISELECT(56,36));

#else // __cplusplus

extern void _ZN7S9722C1C1Ev();
extern void _ZN7S9722C1D1Ev();
Name_Map name_map_S9722C1[] = {
  NSPAIR(_ZN7S9722C1C1Ev),
  NSPAIR(_ZN7S9722C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9722C2;
extern VTBL_ENTRY _ZTI7S9722C2[];
extern  VTBL_ENTRY _ZTV7S9722C2[];
static Base_Class bases_S9722C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9722C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9722C1[];
extern void _ZN7S9722C1D1Ev();
extern void _ZN7S9722C1D0Ev();
extern void _ZN7S9722C22v4Ev();
extern void _ZN7S9722C22v5Ev();
extern void _ZN7S9722C22v6Ev();
extern void _ZN7S9722C12v1Ev();
extern void _ZN7S9722C12v2Ev();
extern void _ZN7S9722C12v3Ev();
static  VTBL_ENTRY vtc_S9722C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9722C1[0]),
  (VTBL_ENTRY)&_ZN7S9722C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9722C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9722C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9722C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9722C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9722C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9722C12v2Ev,
  (VTBL_ENTRY)&_ZN7S9722C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S9722C1[];
extern  VTBL_ENTRY _ZTV7S9722C1[];
Class_Descriptor cd_S9722C1 = {  "S9722C1", // class name
  bases_S9722C1, 1,
  &(vtc_S9722C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,36), // object size
  NSPAIRA(_ZTI7S9722C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9722C1),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  S4038C2  : S4039C3_nt {
  int s4038c2f0[2];
  ::S4039C4_nt s4038c2f1;
  virtual  ~S4038C2(); // _ZN7S4038C2D1Ev
  S4038C2(); // tgen
};
//SIG(-1 S4038C2) C1{ BC2{ vd m} vd Fi[2] FC3{ m Fc[160]}}


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

static void Test_S4038C2()
{
  extern Class_Descriptor cd_S4038C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(23,44)];
    init_test(&cd_S4038C2, buf);
    S4038C2 *dp, &lv = *(dp=new (buf) S4038C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,172), "sizeof(S4038C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4038C2)");
    check_base_class_offset(lv, (S4039C3_nt*), 0, "S4038C2");
    check_field_offset(lv, s4038c2f0, ABISELECT(8,4), "S4038C2.s4038c2f0");
    check_field_offset(lv, s4038c2f1, ABISELECT(16,12), "S4038C2.s4038c2f1");
    test_class_info(&lv, &cd_S4038C2);
    dp->~S4038C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4038C2(Test_S4038C2, "S4038C2", ABISELECT(176,172));

#else // __cplusplus

extern void _ZN7S4038C2C1Ev();
extern void _ZN7S4038C2D1Ev();
Name_Map name_map_S4038C2[] = {
  NSPAIR(_ZN7S4038C2C1Ev),
  NSPAIR(_ZN7S4038C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4039C3_nt;
extern VTBL_ENTRY _ZTI10S4039C3_nt[];
extern  VTBL_ENTRY _ZTV10S4039C3_nt[];
static Base_Class bases_S4038C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4039C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4038C2[];
extern void _ZN7S4038C2D1Ev();
extern void _ZN7S4038C2D0Ev();
static  VTBL_ENTRY vtc_S4038C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4038C2[0]),
  (VTBL_ENTRY)&_ZN7S4038C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4038C2D0Ev,
};
extern VTBL_ENTRY _ZTI7S4038C2[];
extern  VTBL_ENTRY _ZTV7S4038C2[];
Class_Descriptor cd_S4038C2 = {  "S4038C2", // class name
  bases_S4038C2, 1,
  &(vtc_S4038C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(176,172), // object size
  NSPAIRA(_ZTI7S4038C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4038C2),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  S4038C1  : S4038C2 {
  ::S5078C10_nt s4038c1f0;
  int s4038c1f1;
  ~S4038C1(); // tgen
  S4038C1(); // tgen
};
//SIG(1 S4038C1) C1{ BC2{ BC3{ vd m} vd Fi[2] FC4{ m Fc[160]}} FC5{ FC6{ Fc[20]} Fc[16]} Fi}


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

static void Test_S4038C1()
{
  extern Class_Descriptor cd_S4038C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(28,54)];
    init_test(&cd_S4038C1, buf);
    S4038C1 *dp, &lv = *(dp=new (buf) S4038C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(216,212), "sizeof(S4038C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4038C1)");
    check_base_class_offset(lv, (S4039C3_nt*)(S4038C2*), 0, "S4038C1");
    check_base_class_offset(lv, (S4038C2*), 0, "S4038C1");
    check_field_offset(lv, s4038c1f0, ABISELECT(176,172), "S4038C1.s4038c1f0");
    check_field_offset(lv, s4038c1f1, ABISELECT(212,208), "S4038C1.s4038c1f1");
    test_class_info(&lv, &cd_S4038C1);
    dp->~S4038C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4038C1(Test_S4038C1, "S4038C1", ABISELECT(216,212));

#else // __cplusplus

extern void _ZN7S4038C1C1Ev();
extern void _ZN7S4038C1D1Ev();
Name_Map name_map_S4038C1[] = {
  NSPAIR(_ZN7S4038C1C1Ev),
  NSPAIR(_ZN7S4038C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4039C3_nt;
extern VTBL_ENTRY _ZTI10S4039C3_nt[];
extern  VTBL_ENTRY _ZTV10S4039C3_nt[];
extern Class_Descriptor cd_S4038C2;
extern VTBL_ENTRY _ZTI7S4038C2[];
extern  VTBL_ENTRY _ZTV7S4038C2[];
static Base_Class bases_S4038C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4039C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4038C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S4038C1[];
extern void _ZN7S4038C1D1Ev();
extern void _ZN7S4038C1D0Ev();
static  VTBL_ENTRY vtc_S4038C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4038C1[0]),
  (VTBL_ENTRY)&_ZN7S4038C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4038C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S4038C1[];
extern  VTBL_ENTRY _ZTV7S4038C1[];
Class_Descriptor cd_S4038C1 = {  "S4038C1", // class name
  bases_S4038C1, 2,
  &(vtc_S4038C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(216,212), // object size
  NSPAIRA(_ZTI7S4038C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4038C1),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  S14982C3  {
  char s14982c3f0[3];
  char s14982c3f1;
};
//SIG(1 S14982C3) C1{ Fc[4]}



static void Test_S14982C3()
{
  {
    init_simple_test("S14982C3");
    S14982C3 lv;
    check2(sizeof(lv), 4, "sizeof(S14982C3)");
    check2(__alignof__(lv), 1, "__alignof__(S14982C3)");
    check_field_offset(lv, s14982c3f0, 0, "S14982C3.s14982c3f0");
    check_field_offset(lv, s14982c3f1, 3, "S14982C3.s14982c3f1");
  }
}
static Arrange_To_Call_Me vS14982C3(Test_S14982C3, "S14982C3", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

union  S14982C2  {
  int s14982c2f0;
  ::S14982C3 s14982c2f1;
};
//SIG(1 S14982C2) U1{ Fi FC2{ Fc[3] Fc}}

#endif // __cplusplus
#ifdef __cplusplus

struct  S14982C4  {
  short s14982c4f0;
  short s14982c4f1;
  ::S601C41 s14982c4f2;
};
//SIG(1 S14982C4) C1{ Fs[2] FC2{ Fs[2]}}



static void Test_S14982C4()
{
  {
    init_simple_test("S14982C4");
    S14982C4 lv;
    check2(sizeof(lv), 8, "sizeof(S14982C4)");
    check2(__alignof__(lv), 2, "__alignof__(S14982C4)");
    check_field_offset(lv, s14982c4f0, 0, "S14982C4.s14982c4f0");
    check_field_offset(lv, s14982c4f1, 2, "S14982C4.s14982c4f1");
    check_field_offset(lv, s14982c4f2, 4, "S14982C4.s14982c4f2");
  }
}
static Arrange_To_Call_Me vS14982C4(Test_S14982C4, "S14982C4", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S14982C1  {
  ::S14982C2 s14982c1f0;
  int s14982c1f1;
  int s14982c1f2;
  int s14982c1f3;
  int s14982c1f4;
  int s14982c1f5;
  ::S14982C4 s14982c1f6[0];
};
//SIG(1 S14982C1) C1{ FU2{ Fi FC3{ Fc[3] Fc}} Fi Fi Fi Fi Fi FC4{ Fs Fs FC5{ Fs Fs}}[0]}



static void Test_S14982C1()
{
  {
    init_simple_test("S14982C1");
    S14982C1 lv;
    check2(sizeof(lv), 24, "sizeof(S14982C1)");
    check2(__alignof__(lv), 4, "__alignof__(S14982C1)");
    check_field_offset(lv, s14982c1f0, 0, "S14982C1.s14982c1f0");
    check_field_offset(lv, s14982c1f1, 4, "S14982C1.s14982c1f1");
    check_field_offset(lv, s14982c1f2, 8, "S14982C1.s14982c1f2");
    check_field_offset(lv, s14982c1f3, 12, "S14982C1.s14982c1f3");
    check_field_offset(lv, s14982c1f4, 16, "S14982C1.s14982c1f4");
    check_field_offset(lv, s14982c1f5, 20, "S14982C1.s14982c1f5");
    check_field_offset(lv, s14982c1f6, 24, "S14982C1.s14982c1f6");
  }
}
static Arrange_To_Call_Me vS14982C1(Test_S14982C1, "S14982C1", 24);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15552C2_nt  {
  unsigned int s15552c2f0:1;
  unsigned int s15552c2f1:1;
  int s15552c2f2:30;
};
//SIG(-1 S15552C2_nt) C1{ Fi:1 Fi:1 Fi:30}



//skip512 S15552C2_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15552C1  {
  ::S15552C2_nt s15552c1f0;
  short s15552c1f1[2];
  ::S2120C37 s15552c1f2;
  void *s15552c1f3[2];
  __tsi64 s15552c1f4;
  void  mf15552c1(); // _ZN8S15552C19mf15552c1Ev
};
//SIG(1 S15552C1) C1{ m FC2{ Fi:1 Fi:1 Fi:30} Fs[2] FC3{ m Fp Fi[2] FC4{ m}} Fp[2] FL}


void  S15552C1 ::mf15552c1(){}

static void Test_S15552C1()
{
  {
    init_simple_test("S15552C1");
    static S15552C1 lv;
    check2(sizeof(lv), ABISELECT(56,40), "sizeof(S15552C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15552C1)");
    check_field_offset(lv, s15552c1f0, 0, "S15552C1.s15552c1f0");
    check_field_offset(lv, s15552c1f1, 4, "S15552C1.s15552c1f1");
    check_field_offset(lv, s15552c1f2, 8, "S15552C1.s15552c1f2");
    check_field_offset(lv, s15552c1f3, ABISELECT(32,24), "S15552C1.s15552c1f3");
    check_field_offset(lv, s15552c1f4, ABISELECT(48,32), "S15552C1.s15552c1f4");
  }
}
static Arrange_To_Call_Me vS15552C1(Test_S15552C1, "S15552C1", ABISELECT(56,40));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18836C1  {
  virtual  ~S18836C1(); // _ZN8S18836C1D1Ev
  virtual void  v1(); // _ZN8S18836C12v1Ev
  virtual void  v2(); // _ZN8S18836C12v2Ev
  virtual void  v3(); // _ZN8S18836C12v3Ev
  virtual void  v4(); // _ZN8S18836C12v4Ev
  virtual void  v5(); // _ZN8S18836C12v5Ev
  virtual void  v6(); // _ZN8S18836C12v6Ev
  virtual void  v7(); // _ZN8S18836C12v7Ev
  virtual void  v8(); // _ZN8S18836C12v8Ev
  virtual void  v9(); // _ZN8S18836C12v9Ev
  virtual void  v10(); // _ZN8S18836C13v10Ev
  virtual void  v11(); // _ZN8S18836C13v11Ev
  virtual void  v12(); // _ZN8S18836C13v12Ev
  virtual void  v13(); // _ZN8S18836C13v13Ev
  virtual void  v14(); // _ZN8S18836C13v14Ev
  virtual void  v15(); // _ZN8S18836C13v15Ev
  virtual void  v16(); // _ZN8S18836C13v16Ev
  S18836C1(); // tgen
};
//SIG(1 S18836C1) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16}


 S18836C1 ::~S18836C1(){ note_dtor("S18836C1", this);}
void  S18836C1 ::v1(){vfunc_called(this, "_ZN8S18836C12v1Ev");}
void  S18836C1 ::v2(){vfunc_called(this, "_ZN8S18836C12v2Ev");}
void  S18836C1 ::v3(){vfunc_called(this, "_ZN8S18836C12v3Ev");}
void  S18836C1 ::v4(){vfunc_called(this, "_ZN8S18836C12v4Ev");}
void  S18836C1 ::v5(){vfunc_called(this, "_ZN8S18836C12v5Ev");}
void  S18836C1 ::v6(){vfunc_called(this, "_ZN8S18836C12v6Ev");}
void  S18836C1 ::v7(){vfunc_called(this, "_ZN8S18836C12v7Ev");}
void  S18836C1 ::v8(){vfunc_called(this, "_ZN8S18836C12v8Ev");}
void  S18836C1 ::v9(){vfunc_called(this, "_ZN8S18836C12v9Ev");}
void  S18836C1 ::v10(){vfunc_called(this, "_ZN8S18836C13v10Ev");}
void  S18836C1 ::v11(){vfunc_called(this, "_ZN8S18836C13v11Ev");}
void  S18836C1 ::v12(){vfunc_called(this, "_ZN8S18836C13v12Ev");}
void  S18836C1 ::v13(){vfunc_called(this, "_ZN8S18836C13v13Ev");}
void  S18836C1 ::v14(){vfunc_called(this, "_ZN8S18836C13v14Ev");}
void  S18836C1 ::v15(){vfunc_called(this, "_ZN8S18836C13v15Ev");}
void  S18836C1 ::v16(){vfunc_called(this, "_ZN8S18836C13v16Ev");}
S18836C1 ::S18836C1(){ note_ctor("S18836C1", this);} // tgen

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

#else // __cplusplus

extern void _ZN8S18836C1C1Ev();
extern void _ZN8S18836C1D1Ev();
Name_Map name_map_S18836C1[] = {
  NSPAIR(_ZN8S18836C1C1Ev),
  NSPAIR(_ZN8S18836C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18836C1[];
extern void _ZN8S18836C1D1Ev();
extern void _ZN8S18836C1D0Ev();
extern void _ZN8S18836C12v1Ev();
extern void _ZN8S18836C12v2Ev();
extern void _ZN8S18836C12v3Ev();
extern void _ZN8S18836C12v4Ev();
extern void _ZN8S18836C12v5Ev();
extern void _ZN8S18836C12v6Ev();
extern void _ZN8S18836C12v7Ev();
extern void _ZN8S18836C12v8Ev();
extern void _ZN8S18836C12v9Ev();
extern void _ZN8S18836C13v10Ev();
extern void _ZN8S18836C13v11Ev();
extern void _ZN8S18836C13v12Ev();
extern void _ZN8S18836C13v13Ev();
extern void _ZN8S18836C13v14Ev();
extern void _ZN8S18836C13v15Ev();
extern void _ZN8S18836C13v16Ev();
static  VTBL_ENTRY vtc_S18836C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18836C1[0]),
  (VTBL_ENTRY)&_ZN8S18836C1D1Ev,
  (VTBL_ENTRY)&_ZN8S18836C1D0Ev,
  (VTBL_ENTRY)&_ZN8S18836C12v1Ev,
  (VTBL_ENTRY)&_ZN8S18836C12v2Ev,
  (VTBL_ENTRY)&_ZN8S18836C12v3Ev,
  (VTBL_ENTRY)&_ZN8S18836C12v4Ev,
  (VTBL_ENTRY)&_ZN8S18836C12v5Ev,
  (VTBL_ENTRY)&_ZN8S18836C12v6Ev,
  (VTBL_ENTRY)&_ZN8S18836C12v7Ev,
  (VTBL_ENTRY)&_ZN8S18836C12v8Ev,
  (VTBL_ENTRY)&_ZN8S18836C12v9Ev,
  (VTBL_ENTRY)&_ZN8S18836C13v10Ev,
  (VTBL_ENTRY)&_ZN8S18836C13v11Ev,
  (VTBL_ENTRY)&_ZN8S18836C13v12Ev,
  (VTBL_ENTRY)&_ZN8S18836C13v13Ev,
  (VTBL_ENTRY)&_ZN8S18836C13v14Ev,
  (VTBL_ENTRY)&_ZN8S18836C13v15Ev,
  (VTBL_ENTRY)&_ZN8S18836C13v16Ev,
};
extern VTBL_ENTRY _ZTI8S18836C1[];
extern  VTBL_ENTRY _ZTV8S18836C1[];
Class_Descriptor cd_S18836C1 = {  "S18836C1", // class name
  0,0,//no base classes
  &(vtc_S18836C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S18836C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18836C1),20, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9949C2  {
  virtual  ~S9949C2(); // _ZN7S9949C2D1Ev
  virtual void  v5(); // _ZN7S9949C22v5Ev
  virtual void  v6(); // _ZN7S9949C22v6Ev
  virtual void  v7(); // _ZN7S9949C22v7Ev
  virtual void  v8(); // _ZN7S9949C22v8Ev
  S9949C2(); // tgen
};
//SIG(-1 S9949C2) C1{ vd v1 v2 v3 v4}


 S9949C2 ::~S9949C2(){ note_dtor("S9949C2", this);}
void  S9949C2 ::v5(){vfunc_called(this, "_ZN7S9949C22v5Ev");}
void  S9949C2 ::v6(){vfunc_called(this, "_ZN7S9949C22v6Ev");}
void  S9949C2 ::v7(){vfunc_called(this, "_ZN7S9949C22v7Ev");}
void  S9949C2 ::v8(){vfunc_called(this, "_ZN7S9949C22v8Ev");}
S9949C2 ::S9949C2(){ note_ctor("S9949C2", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S9949C2C1Ev();
extern void _ZN7S9949C2D1Ev();
Name_Map name_map_S9949C2[] = {
  NSPAIR(_ZN7S9949C2C1Ev),
  NSPAIR(_ZN7S9949C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9949C2[];
extern void _ZN7S9949C2D1Ev();
extern void _ZN7S9949C2D0Ev();
extern void _ZN7S9949C22v5Ev();
extern void _ZN7S9949C22v6Ev();
extern void _ZN7S9949C22v7Ev();
extern void _ZN7S9949C22v8Ev();
static  VTBL_ENTRY vtc_S9949C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9949C2[0]),
  (VTBL_ENTRY)&_ZN7S9949C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9949C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9949C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9949C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9949C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9949C22v8Ev,
};
extern VTBL_ENTRY _ZTI7S9949C2[];
extern  VTBL_ENTRY _ZTV7S9949C2[];
Class_Descriptor cd_S9949C2 = {  "S9949C2", // class name
  0,0,//no base classes
  &(vtc_S9949C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S9949C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9949C2),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9949C1  : S9949C2 {
  ::S3352C18 s9949c1f0;
  int s9949c1f1[2];
  virtual void  v1(); // _ZN7S9949C12v1Ev
  virtual void  v2(); // _ZN7S9949C12v2Ev
  virtual void  v3(); // _ZN7S9949C12v3Ev
  virtual void  v4(); // _ZN7S9949C12v4Ev
  ~S9949C1(); // tgen
  S9949C1(); // tgen
};
//SIG(1 S9949C1) C1{ BC2{ vd v5 v6 v7 v8} v1 v2 v3 v4 FC3{ BC4{ m Fp Fi[2]}} Fi[2]}


void  S9949C1 ::v1(){vfunc_called(this, "_ZN7S9949C12v1Ev");}
void  S9949C1 ::v2(){vfunc_called(this, "_ZN7S9949C12v2Ev");}
void  S9949C1 ::v3(){vfunc_called(this, "_ZN7S9949C12v3Ev");}
void  S9949C1 ::v4(){vfunc_called(this, "_ZN7S9949C12v4Ev");}
S9949C1 ::~S9949C1(){ note_dtor("S9949C1", this);} // tgen
S9949C1 ::S9949C1(){ note_ctor("S9949C1", this);} // tgen

static void Test_S9949C1()
{
  extern Class_Descriptor cd_S9949C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,7)];
    init_test(&cd_S9949C1, buf);
    S9949C1 *dp, &lv = *(dp=new (buf) S9949C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,24), "sizeof(S9949C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9949C1)");
    check_base_class_offset(lv, (S9949C2*), 0, "S9949C1");
    check_field_offset(lv, s9949c1f0, ABISELECT(8,4), "S9949C1.s9949c1f0");
    check_field_offset(lv, s9949c1f1, ABISELECT(24,16), "S9949C1.s9949c1f1");
    test_class_info(&lv, &cd_S9949C1);
    dp->~S9949C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9949C1(Test_S9949C1, "S9949C1", ABISELECT(32,24));

#else // __cplusplus

extern void _ZN7S9949C1C1Ev();
extern void _ZN7S9949C1D1Ev();
Name_Map name_map_S9949C1[] = {
  NSPAIR(_ZN7S9949C1C1Ev),
  NSPAIR(_ZN7S9949C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9949C2;
extern VTBL_ENTRY _ZTI7S9949C2[];
extern  VTBL_ENTRY _ZTV7S9949C2[];
static Base_Class bases_S9949C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9949C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9949C1[];
extern void _ZN7S9949C1D1Ev();
extern void _ZN7S9949C1D0Ev();
extern void _ZN7S9949C22v5Ev();
extern void _ZN7S9949C22v6Ev();
extern void _ZN7S9949C22v7Ev();
extern void _ZN7S9949C22v8Ev();
extern void _ZN7S9949C12v1Ev();
extern void _ZN7S9949C12v2Ev();
extern void _ZN7S9949C12v3Ev();
extern void _ZN7S9949C12v4Ev();
static  VTBL_ENTRY vtc_S9949C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9949C1[0]),
  (VTBL_ENTRY)&_ZN7S9949C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9949C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9949C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9949C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9949C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9949C22v8Ev,
  (VTBL_ENTRY)&_ZN7S9949C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9949C12v2Ev,
  (VTBL_ENTRY)&_ZN7S9949C12v3Ev,
  (VTBL_ENTRY)&_ZN7S9949C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S9949C1[];
extern  VTBL_ENTRY _ZTV7S9949C1[];
Class_Descriptor cd_S9949C1 = {  "S9949C1", // class name
  bases_S9949C1, 1,
  &(vtc_S9949C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,24), // object size
  NSPAIRA(_ZTI7S9949C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9949C1),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  S21293C1  {
  ::S2120C25 s21293c1f0;
  void *s21293c1f1;
  ::S5062C8_nt s21293c1f2;
  void  mf21293c1(); // _ZN8S21293C19mf21293c1Ev
  virtual  ~S21293C1(); // _ZN8S21293C1D1Ev
  S21293C1(); // tgen
};
//SIG(1 S21293C1) C1{ vd m FC2{ BC3{ m Fp Fi FC4{ m} FC4}} Fp FC5{ m FC6{ FL[4]}}}


void  S21293C1 ::mf21293c1(){}
 S21293C1 ::~S21293C1(){ note_dtor("S21293C1", this);}
S21293C1 ::S21293C1(){ note_ctor("S21293C1", this);} // tgen

static void Test_S21293C1()
{
  extern Class_Descriptor cd_S21293C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,14)];
    init_test(&cd_S21293C1, buf);
    S21293C1 *dp, &lv = *(dp=new (buf) S21293C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,52), "sizeof(S21293C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21293C1)");
    check_field_offset(lv, s21293c1f0, ABISELECT(8,4), "S21293C1.s21293c1f0");
    check_field_offset(lv, s21293c1f1, ABISELECT(24,16), "S21293C1.s21293c1f1");
    check_field_offset(lv, s21293c1f2, ABISELECT(32,20), "S21293C1.s21293c1f2");
    test_class_info(&lv, &cd_S21293C1);
    dp->~S21293C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21293C1(Test_S21293C1, "S21293C1", ABISELECT(64,52));

#else // __cplusplus

extern void _ZN8S21293C1C1Ev();
extern void _ZN8S21293C1D1Ev();
Name_Map name_map_S21293C1[] = {
  NSPAIR(_ZN8S21293C1C1Ev),
  NSPAIR(_ZN8S21293C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21293C1[];
extern void _ZN8S21293C1D1Ev();
extern void _ZN8S21293C1D0Ev();
static  VTBL_ENTRY vtc_S21293C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21293C1[0]),
  (VTBL_ENTRY)&_ZN8S21293C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21293C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21293C1[];
extern  VTBL_ENTRY _ZTV8S21293C1[];
Class_Descriptor cd_S21293C1 = {  "S21293C1", // class name
  0,0,//no base classes
  &(vtc_S21293C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,52), // object size
  NSPAIRA(_ZTI8S21293C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21293C1),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  S18191C5  {
  ::S601C21_nt s18191c5f0;
  ::S601C21_nt s18191c5f1;
  void  mf18191c5(); // _ZN8S18191C59mf18191c5Ev
};
//SIG(-1 S18191C5) C1{ m FC2{} FC2}


void  S18191C5 ::mf18191c5(){}

static void Test_S18191C5()
{
  {
    init_simple_test("S18191C5");
    S18191C5 lv;
    check2(sizeof(lv), 2, "sizeof(S18191C5)");
    check2(__alignof__(lv), 1, "__alignof__(S18191C5)");
    check_field_offset(lv, s18191c5f0, 0, "S18191C5.s18191c5f0");
    check_field_offset(lv, s18191c5f1, 1, "S18191C5.s18191c5f1");
  }
}
static Arrange_To_Call_Me vS18191C5(Test_S18191C5, "S18191C5", 2);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18191C2  {
  ::S2120C20_nt s18191c2f0;
  ::S18191C5 s18191c2f1;
  void  mf18191c2(); // _ZN8S18191C29mf18191c2Ev
};
//SIG(-1 S18191C2) C1{ m FC2{ m Fp Fi FC3{ m}} FC4{ m FC5{} FC5}}


void  S18191C2 ::mf18191c2(){}

static void Test_S18191C2()
{
  {
    init_simple_test("S18191C2");
    S18191C2 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S18191C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18191C2)");
    check_field_offset(lv, s18191c2f0, 0, "S18191C2.s18191c2f0");
    check_field_offset(lv, s18191c2f1, ABISELECT(16,12), "S18191C2.s18191c2f1");
  }
}
static Arrange_To_Call_Me vS18191C2(Test_S18191C2, "S18191C2", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18191C1  {
  void *s18191c1f0[3];
  ::S18191C2 s18191c1f1;
  char s18191c1f2[2];
  void  mf18191c1(); // _ZN8S18191C19mf18191c1Ev
};
//SIG(1 S18191C1) C1{ m Fp[3] FC2{ m FC3{ m Fp Fi FC4{ m}} FC5{ m FC6{} FC6}} Fc[2]}


void  S18191C1 ::mf18191c1(){}

static void Test_S18191C1()
{
  {
    init_simple_test("S18191C1");
    S18191C1 lv;
    check2(sizeof(lv), ABISELECT(56,32), "sizeof(S18191C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18191C1)");
    check_field_offset(lv, s18191c1f0, 0, "S18191C1.s18191c1f0");
    check_field_offset(lv, s18191c1f1, ABISELECT(24,12), "S18191C1.s18191c1f1");
    check_field_offset(lv, s18191c1f2, ABISELECT(48,28), "S18191C1.s18191c1f2");
  }
}
static Arrange_To_Call_Me vS18191C1(Test_S18191C1, "S18191C1", ABISELECT(56,32));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3277C3  {
  virtual void  v5(); // _ZN7S3277C32v5Ev
  virtual void  v6(); // _ZN7S3277C32v6Ev
  virtual void  v7(); // _ZN7S3277C32v7Ev
  ~S3277C3(); // tgen
  S3277C3(); // tgen
};
//SIG(-1 S3277C3) C1{ v1 v2 v3}


void  S3277C3 ::v5(){vfunc_called(this, "_ZN7S3277C32v5Ev");}
void  S3277C3 ::v6(){vfunc_called(this, "_ZN7S3277C32v6Ev");}
void  S3277C3 ::v7(){vfunc_called(this, "_ZN7S3277C32v7Ev");}
S3277C3 ::~S3277C3(){ note_dtor("S3277C3", this);} // tgen
S3277C3 ::S3277C3(){ note_ctor("S3277C3", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S3277C3C1Ev();
extern void _ZN7S3277C3D1Ev();
Name_Map name_map_S3277C3[] = {
  NSPAIR(_ZN7S3277C3C1Ev),
  NSPAIR(_ZN7S3277C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3277C3[];
extern void _ZN7S3277C32v5Ev();
extern void _ZN7S3277C32v6Ev();
extern void _ZN7S3277C32v7Ev();
static  VTBL_ENTRY vtc_S3277C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3277C3[0]),
  (VTBL_ENTRY)&_ZN7S3277C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3277C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3277C32v7Ev,
};
extern VTBL_ENTRY _ZTI7S3277C3[];
extern  VTBL_ENTRY _ZTV7S3277C3[];
Class_Descriptor cd_S3277C3 = {  "S3277C3", // class name
  0,0,//no base classes
  &(vtc_S3277C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3277C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3277C3),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  S3277C2  : S3277C3 {
  virtual  ~S3277C2(); // _ZN7S3277C2D1Ev
  virtual void  v8(); // _ZN7S3277C22v8Ev
  virtual void  v9(); // _ZN7S3277C22v9Ev
  virtual void  v10(); // _ZN7S3277C23v10Ev
  S3277C2(); // tgen
};
//SIG(-1 S3277C2) C1{ BC2{ v4 v5 v6} vd v1 v2 v3}


 S3277C2 ::~S3277C2(){ note_dtor("S3277C2", this);}
void  S3277C2 ::v8(){vfunc_called(this, "_ZN7S3277C22v8Ev");}
void  S3277C2 ::v9(){vfunc_called(this, "_ZN7S3277C22v9Ev");}
void  S3277C2 ::v10(){vfunc_called(this, "_ZN7S3277C23v10Ev");}
S3277C2 ::S3277C2(){ note_ctor("S3277C2", this);} // tgen

static void Test_S3277C2()
{
  extern Class_Descriptor cd_S3277C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3277C2, buf);
    S3277C2 *dp, &lv = *(dp=new (buf) S3277C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3277C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3277C2)");
    check_base_class_offset(lv, (S3277C3*), 0, "S3277C2");
    test_class_info(&lv, &cd_S3277C2);
    dp->~S3277C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3277C2(Test_S3277C2, "S3277C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S3277C2C1Ev();
extern void _ZN7S3277C2D1Ev();
Name_Map name_map_S3277C2[] = {
  NSPAIR(_ZN7S3277C2C1Ev),
  NSPAIR(_ZN7S3277C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3277C3;
extern VTBL_ENTRY _ZTI7S3277C3[];
extern  VTBL_ENTRY _ZTV7S3277C3[];
static Base_Class bases_S3277C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3277C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3277C2[];
extern void _ZN7S3277C32v5Ev();
extern void _ZN7S3277C32v6Ev();
extern void _ZN7S3277C32v7Ev();
extern void _ZN7S3277C2D1Ev();
extern void _ZN7S3277C2D0Ev();
extern void _ZN7S3277C22v8Ev();
extern void _ZN7S3277C22v9Ev();
extern void _ZN7S3277C23v10Ev();
static  VTBL_ENTRY vtc_S3277C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3277C2[0]),
  (VTBL_ENTRY)&_ZN7S3277C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3277C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3277C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3277C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3277C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3277C22v8Ev,
  (VTBL_ENTRY)&_ZN7S3277C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3277C23v10Ev,
};
extern VTBL_ENTRY _ZTI7S3277C2[];
extern  VTBL_ENTRY _ZTV7S3277C2[];
Class_Descriptor cd_S3277C2 = {  "S3277C2", // class name
  bases_S3277C2, 1,
  &(vtc_S3277C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3277C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3277C2),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3277C1  : S3277C2 {
  long double s3277c1f0;
  short s3277c1f1[4];
  virtual  ~S3277C1(); // _ZN7S3277C1D1Ev
  virtual void  v1(); // _ZN7S3277C12v1Ev
  virtual void  v2(); // _ZN7S3277C12v2Ev
  virtual void  v3(); // _ZN7S3277C12v3Ev
  virtual void  v4(); // _ZN7S3277C12v4Ev
  S3277C1(); // tgen
};
//SIG(1 S3277C1) C1{ BC2{ BC3{ v5 v6 v7} vd v8 v9 v10} vd v1 v2 v3 v4 FD Fs[4]}


 S3277C1 ::~S3277C1(){ note_dtor("S3277C1", this);}
void  S3277C1 ::v1(){vfunc_called(this, "_ZN7S3277C12v1Ev");}
void  S3277C1 ::v2(){vfunc_called(this, "_ZN7S3277C12v2Ev");}
void  S3277C1 ::v3(){vfunc_called(this, "_ZN7S3277C12v3Ev");}
void  S3277C1 ::v4(){vfunc_called(this, "_ZN7S3277C12v4Ev");}
S3277C1 ::S3277C1(){ note_ctor("S3277C1", this);} // tgen

static void Test_S3277C1()
{
  extern Class_Descriptor cd_S3277C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4,7)];
    init_test(&cd_S3277C1, buf);
    S3277C1 *dp, &lv = *(dp=new (buf) S3277C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S3277C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3277C1)");
    check_base_class_offset(lv, (S3277C3*)(S3277C2*), 0, "S3277C1");
    check_base_class_offset(lv, (S3277C2*), 0, "S3277C1");
    check_field_offset(lv, s3277c1f0, ABISELECT(16,4), "S3277C1.s3277c1f0");
    check_field_offset(lv, s3277c1f1, ABISELECT(32,16), "S3277C1.s3277c1f1");
    test_class_info(&lv, &cd_S3277C1);
    dp->~S3277C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3277C1(Test_S3277C1, "S3277C1", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN7S3277C1C1Ev();
extern void _ZN7S3277C1D1Ev();
Name_Map name_map_S3277C1[] = {
  NSPAIR(_ZN7S3277C1C1Ev),
  NSPAIR(_ZN7S3277C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3277C3;
extern VTBL_ENTRY _ZTI7S3277C3[];
extern  VTBL_ENTRY _ZTV7S3277C3[];
extern Class_Descriptor cd_S3277C2;
extern VTBL_ENTRY _ZTI7S3277C2[];
extern  VTBL_ENTRY _ZTV7S3277C2[];
static Base_Class bases_S3277C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3277C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3277C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S3277C1[];
extern void _ZN7S3277C32v5Ev();
extern void _ZN7S3277C32v6Ev();
extern void _ZN7S3277C32v7Ev();
extern void _ZN7S3277C1D1Ev();
extern void _ZN7S3277C1D0Ev();
extern void _ZN7S3277C22v8Ev();
extern void _ZN7S3277C22v9Ev();
extern void _ZN7S3277C23v10Ev();
extern void _ZN7S3277C12v1Ev();
extern void _ZN7S3277C12v2Ev();
extern void _ZN7S3277C12v3Ev();
extern void _ZN7S3277C12v4Ev();
static  VTBL_ENTRY vtc_S3277C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3277C1[0]),
  (VTBL_ENTRY)&_ZN7S3277C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3277C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3277C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3277C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3277C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3277C22v8Ev,
  (VTBL_ENTRY)&_ZN7S3277C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3277C23v10Ev,
  (VTBL_ENTRY)&_ZN7S3277C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3277C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3277C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3277C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S3277C1[];
extern  VTBL_ENTRY _ZTV7S3277C1[];
Class_Descriptor cd_S3277C1 = {  "S3277C1", // class name
  bases_S3277C1, 2,
  &(vtc_S3277C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI7S3277C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3277C1),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13861C3  {
  char s13861c3f0[3];
  long s13861c3f1[3];
};
//SIG(-1 S13861C3) C1{ Fc[3] Fl[3]}



static void Test_S13861C3()
{
  {
    init_simple_test("S13861C3");
    S13861C3 lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S13861C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13861C3)");
    check_field_offset(lv, s13861c3f0, 0, "S13861C3.s13861c3f0");
    check_field_offset(lv, s13861c3f1, ABISELECT(8,4), "S13861C3.s13861c3f1");
  }
}
static Arrange_To_Call_Me vS13861C3(Test_S13861C3, "S13861C3", ABISELECT(32,16));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13861C2  {
  __tsi64 s13861c2f0;
  ::S13861C3 s13861c2f1;
  void *s13861c2f2;
};
//SIG(-1 S13861C2) C1{ FL FC2{ Fc[3] Fl[3]} Fp}



static void Test_S13861C2()
{
  {
    init_simple_test("S13861C2");
    S13861C2 lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S13861C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13861C2)");
    check_field_offset(lv, s13861c2f0, 0, "S13861C2.s13861c2f0");
    check_field_offset(lv, s13861c2f1, 8, "S13861C2.s13861c2f1");
    check_field_offset(lv, s13861c2f2, ABISELECT(40,24), "S13861C2.s13861c2f2");
  }
}
static Arrange_To_Call_Me vS13861C2(Test_S13861C2, "S13861C2", ABISELECT(48,28));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13861C1  {
  __tsi64 s13861c1f0;
  short s13861c1f1;
  char s13861c1f2;
  ::S13861C2 s13861c1f3;
  ::S13768C6 s13861c1f4;
};
//SIG(1 S13861C1) C1{ FL Fs Fc FC2{ FL FC3{ Fc[3] Fl[3]} Fp} FC4{ FL FC5{ Fp FL}}}



static void Test_S13861C1()
{
  {
    init_simple_test("S13861C1");
    S13861C1 lv;
    check2(sizeof(lv), ABISELECT(88,60), "sizeof(S13861C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13861C1)");
    check_field_offset(lv, s13861c1f0, 0, "S13861C1.s13861c1f0");
    check_field_offset(lv, s13861c1f1, 8, "S13861C1.s13861c1f1");
    check_field_offset(lv, s13861c1f2, 10, "S13861C1.s13861c1f2");
    check_field_offset(lv, s13861c1f3, ABISELECT(16,12), "S13861C1.s13861c1f3");
    check_field_offset(lv, s13861c1f4, ABISELECT(64,40), "S13861C1.s13861c1f4");
  }
}
static Arrange_To_Call_Me vS13861C1(Test_S13861C1, "S13861C1", ABISELECT(88,60));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8780C2  {
  void *s8780c2f0;
  int s8780c2f1;
  void *s8780c2f2[2];
  virtual  ~S8780C2(); // _ZN7S8780C2D1Ev
  virtual void  v2(); // _ZN7S8780C22v2Ev
  S8780C2(); // tgen
};
//SIG(-1 S8780C2) C1{ vd v1 Fp Fi Fp[2]}


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

static void Test_S8780C2()
{
  extern Class_Descriptor cd_S8780C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S8780C2, buf);
    S8780C2 *dp, &lv = *(dp=new (buf) S8780C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S8780C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8780C2)");
    check_field_offset(lv, s8780c2f0, ABISELECT(8,4), "S8780C2.s8780c2f0");
    check_field_offset(lv, s8780c2f1, ABISELECT(16,8), "S8780C2.s8780c2f1");
    check_field_offset(lv, s8780c2f2, ABISELECT(24,12), "S8780C2.s8780c2f2");
    test_class_info(&lv, &cd_S8780C2);
    dp->~S8780C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8780C2(Test_S8780C2, "S8780C2", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S8780C2C1Ev();
extern void _ZN7S8780C2D1Ev();
Name_Map name_map_S8780C2[] = {
  NSPAIR(_ZN7S8780C2C1Ev),
  NSPAIR(_ZN7S8780C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S8780C2[];
extern void _ZN7S8780C2D1Ev();
extern void _ZN7S8780C2D0Ev();
extern void _ZN7S8780C22v2Ev();
static  VTBL_ENTRY vtc_S8780C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8780C2[0]),
  (VTBL_ENTRY)&_ZN7S8780C2D1Ev,
  (VTBL_ENTRY)&_ZN7S8780C2D0Ev,
  (VTBL_ENTRY)&_ZN7S8780C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S8780C2[];
extern  VTBL_ENTRY _ZTV7S8780C2[];
Class_Descriptor cd_S8780C2 = {  "S8780C2", // class name
  0,0,//no base classes
  &(vtc_S8780C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S8780C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S8780C2),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  S8780C1  : S8780C2 {
  void *s8780c1f0[2];
  int s8780c1f1;
  void *s8780c1f2;
  int s8780c1f3;
  void *s8780c1f4[2];
  int s8780c1f5;
  virtual  ~S8780C1(); // _ZN7S8780C1D1Ev
  virtual void  v1(); // _ZN7S8780C12v1Ev
  S8780C1(); // tgen
};
//SIG(1 S8780C1) C1{ BC2{ vd v2 Fp Fi Fp[2]} vd v1 Fp[2] Fi Fp Fi Fp[2] Fi}


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

static void Test_S8780C1()
{
  extern Class_Descriptor cd_S8780C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[14];
    init_test(&cd_S8780C1, buf);
    S8780C1 *dp, &lv = *(dp=new (buf) S8780C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,52), "sizeof(S8780C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8780C1)");
    check_base_class_offset(lv, (S8780C2*), 0, "S8780C1");
    check_field_offset(lv, s8780c1f0, ABISELECT(40,20), "S8780C1.s8780c1f0");
    check_field_offset(lv, s8780c1f1, ABISELECT(56,28), "S8780C1.s8780c1f1");
    check_field_offset(lv, s8780c1f2, ABISELECT(64,32), "S8780C1.s8780c1f2");
    check_field_offset(lv, s8780c1f3, ABISELECT(72,36), "S8780C1.s8780c1f3");
    check_field_offset(lv, s8780c1f4, ABISELECT(80,40), "S8780C1.s8780c1f4");
    check_field_offset(lv, s8780c1f5, ABISELECT(96,48), "S8780C1.s8780c1f5");
    test_class_info(&lv, &cd_S8780C1);
    dp->~S8780C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8780C1(Test_S8780C1, "S8780C1", ABISELECT(104,52));

#else // __cplusplus

extern void _ZN7S8780C1C1Ev();
extern void _ZN7S8780C1D1Ev();
Name_Map name_map_S8780C1[] = {
  NSPAIR(_ZN7S8780C1C1Ev),
  NSPAIR(_ZN7S8780C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8780C2;
extern VTBL_ENTRY _ZTI7S8780C2[];
extern  VTBL_ENTRY _ZTV7S8780C2[];
static Base_Class bases_S8780C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8780C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8780C1[];
extern void _ZN7S8780C1D1Ev();
extern void _ZN7S8780C1D0Ev();
extern void _ZN7S8780C22v2Ev();
extern void _ZN7S8780C12v1Ev();
static  VTBL_ENTRY vtc_S8780C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8780C1[0]),
  (VTBL_ENTRY)&_ZN7S8780C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8780C1D0Ev,
  (VTBL_ENTRY)&_ZN7S8780C22v2Ev,
  (VTBL_ENTRY)&_ZN7S8780C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S8780C1[];
extern  VTBL_ENTRY _ZTV7S8780C1[];
Class_Descriptor cd_S8780C1 = {  "S8780C1", // class name
  bases_S8780C1, 1,
  &(vtc_S8780C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,52), // object size
  NSPAIRA(_ZTI7S8780C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8780C1),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16999C2  {
  ::S6962C17_nt s16999c2f0;
  ::S6962C17_nt s16999c2f1;
  ::S6962C17_nt s16999c2f2;
  ::S6962C17_nt s16999c2f3;
  ::S3352C4_nt s16999c2f4[4];
};
//SIG(-1 S16999C2) C1{ FC2{ m Fi[3]} FC2 FC2 FC2 FC3{ m Fi[2]}[4]}



static void Test_S16999C2()
{
  {
    init_simple_test("S16999C2");
    S16999C2 lv;
    check2(sizeof(lv), 80, "sizeof(S16999C2)");
    check2(__alignof__(lv), 4, "__alignof__(S16999C2)");
    check_field_offset(lv, s16999c2f0, 0, "S16999C2.s16999c2f0");
    check_field_offset(lv, s16999c2f1, 12, "S16999C2.s16999c2f1");
    check_field_offset(lv, s16999c2f2, 24, "S16999C2.s16999c2f2");
    check_field_offset(lv, s16999c2f3, 36, "S16999C2.s16999c2f3");
    check_field_offset(lv, s16999c2f4, 48, "S16999C2.s16999c2f4");
  }
}
static Arrange_To_Call_Me vS16999C2(Test_S16999C2, "S16999C2", 80);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16999C1  {
  unsigned int s16999c1f0:1;
  ::S16999C2 s16999c1f1;
  void  mf16999c1(); // _ZN8S16999C19mf16999c1Ev
};
//SIG(1 S16999C1) C1{ m Fi:1 FC2{ FC3{ m Fi[3]} FC3 FC3 FC3 FC4{ m Fi[2]}[4]}}


void  S16999C1 ::mf16999c1(){}

static void Test_S16999C1()
{
  {
    init_simple_test("S16999C1");
    static S16999C1 lv;
    check2(sizeof(lv), 84, "sizeof(S16999C1)");
    check2(__alignof__(lv), 4, "__alignof__(S16999C1)");
    set_bf_and_test(lv, s16999c1f0, 0, 0, 1, 1, "S16999C1");
    check_field_offset(lv, s16999c1f1, 4, "S16999C1.s16999c1f1");
  }
}
static Arrange_To_Call_Me vS16999C1(Test_S16999C1, "S16999C1", 84);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13268C4  {
  void *s13268c4f0;
  void *s13268c4f1;
  int s13268c4f2;
  void *s13268c4f3;
  void *s13268c4f4;
};
//SIG(1 S13268C4) C1{ Fp[2] Fi Fp[2]}



static void Test_S13268C4()
{
  {
    init_simple_test("S13268C4");
    S13268C4 lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S13268C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13268C4)");
    check_field_offset(lv, s13268c4f0, 0, "S13268C4.s13268c4f0");
    check_field_offset(lv, s13268c4f1, ABISELECT(8,4), "S13268C4.s13268c4f1");
    check_field_offset(lv, s13268c4f2, ABISELECT(16,8), "S13268C4.s13268c4f2");
    check_field_offset(lv, s13268c4f3, ABISELECT(24,12), "S13268C4.s13268c4f3");
    check_field_offset(lv, s13268c4f4, ABISELECT(32,16), "S13268C4.s13268c4f4");
  }
}
static Arrange_To_Call_Me vS13268C4(Test_S13268C4, "S13268C4", ABISELECT(40,20));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

union  S13268C2  {
  ::S11720C18 s13268c2f0;
  ::S13268C4 s13268c2f1;
  ::S11720C12_nt s13268c2f2;
};
//SIG(1 S13268C2) U1{ FC2{ Fp Fp} FC3{ Fp Fp Fi Fp Fp} FC4{ Fp Fp}}

#endif // __cplusplus
#ifdef __cplusplus

struct  S13268C1  {
  int s13268c1f0[2];
  ::S13268C2 s13268c1f1;
};
//SIG(1 S13268C1) C1{ Fi[2] FU2{ FC3{ Fp Fp} FC4{ Fp Fp Fi Fp Fp} FC5{ Fp Fp}}}



static void Test_S13268C1()
{
  {
    init_simple_test("S13268C1");
    S13268C1 lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S13268C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13268C1)");
    check_field_offset(lv, s13268c1f0, 0, "S13268C1.s13268c1f0");
    check_field_offset(lv, s13268c1f1, 8, "S13268C1.s13268c1f1");
  }
}
static Arrange_To_Call_Me vS13268C1(Test_S13268C1, "S13268C1", ABISELECT(48,28));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11261C1  {
  ::S4761C8_nt s11261c1f0;
};
//SIG(1 S11261C1) C1{ FC2{ FC3{ FC4{ Fc[20]} Fc[16]} Fl[3] Fi[2] FC5{ Fi[4]}}}



static void Test_S11261C1()
{
  {
    init_simple_test("S11261C1");
    S11261C1 lv;
    check2(sizeof(lv), ABISELECT(88,72), "sizeof(S11261C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11261C1)");
    check_field_offset(lv, s11261c1f0, 0, "S11261C1.s11261c1f0");
  }
}
static Arrange_To_Call_Me vS11261C1(Test_S11261C1, "S11261C1", ABISELECT(88,72));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12850C3  {
  ::S13768C5 s12850c3f0;
  ::S13685C9 s12850c3f1;
};
//SIG(1 S12850C3) C1{ FC2{ Fc[3] Fl[3]} FC3{ Fp FL}}



static void Test_S12850C3()
{
  {
    init_simple_test("S12850C3");
    S12850C3 lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S12850C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12850C3)");
    check_field_offset(lv, s12850c3f0, 0, "S12850C3.s12850c3f0");
    check_field_offset(lv, s12850c3f1, ABISELECT(32,16), "S12850C3.s12850c3f1");
  }
}
static Arrange_To_Call_Me vS12850C3(Test_S12850C3, "S12850C3", ABISELECT(48,28));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

union  S12850C2  {
  ::S12850C3 s12850c2f0;
  ::S13685C9 s12850c2f1;
};
//SIG(1 S12850C2) U1{ FC2{ FC3{ Fc Fc Fc Fl Fl Fl} FC4{ Fp FL}} FC4}

#endif // __cplusplus
#ifdef __cplusplus

struct  S12850C1  {
  int s12850c1f0;
  ::S12850C2 s12850c1f1;
};
//SIG(1 S12850C1) C1{ Fi FU2{ FC3{ FC4{ Fc Fc Fc Fl Fl Fl} FC5{ Fp FL}} FC5}}



static void Test_S12850C1()
{
  {
    init_simple_test("S12850C1");
    S12850C1 lv;
    check2(sizeof(lv), ABISELECT(56,32), "sizeof(S12850C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12850C1)");
    check_field_offset(lv, s12850c1f0, 0, "S12850C1.s12850c1f0");
    check_field_offset(lv, s12850c1f1, ABISELECT(8,4), "S12850C1.s12850c1f1");
  }
}
static Arrange_To_Call_Me vS12850C1(Test_S12850C1, "S12850C1", ABISELECT(56,32));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13240C1  {
  int s13240c1f0[2];
  void *s13240c1f1[4];
  int s13240c1f2[4];
  void *s13240c1f3[2];
  int s13240c1f4[3];
  void *s13240c1f5[3];
  int s13240c1f6;
  void *s13240c1f7[3];
  int s13240c1f8;
};
//SIG(1 S13240C1) C1{ Fi[2] Fp[4] Fi[4] Fp[2] Fi[3] Fp[3] Fi Fp[3] Fi}



static void Test_S13240C1()
{
  {
    init_simple_test("S13240C1");
    S13240C1 lv;
    check2(sizeof(lv), ABISELECT(152,92), "sizeof(S13240C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13240C1)");
    check_field_offset(lv, s13240c1f0, 0, "S13240C1.s13240c1f0");
    check_field_offset(lv, s13240c1f1, 8, "S13240C1.s13240c1f1");
    check_field_offset(lv, s13240c1f2, ABISELECT(40,24), "S13240C1.s13240c1f2");
    check_field_offset(lv, s13240c1f3, ABISELECT(56,40), "S13240C1.s13240c1f3");
    check_field_offset(lv, s13240c1f4, ABISELECT(72,48), "S13240C1.s13240c1f4");
    check_field_offset(lv, s13240c1f5, ABISELECT(88,60), "S13240C1.s13240c1f5");
    check_field_offset(lv, s13240c1f6, ABISELECT(112,72), "S13240C1.s13240c1f6");
    check_field_offset(lv, s13240c1f7, ABISELECT(120,76), "S13240C1.s13240c1f7");
    check_field_offset(lv, s13240c1f8, ABISELECT(144,88), "S13240C1.s13240c1f8");
  }
}
static Arrange_To_Call_Me vS13240C1(Test_S13240C1, "S13240C1", ABISELECT(152,92));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16470C4  {
  int s16470c4f0;
  int s16470c4f1[32];
  void  mf16470c4(); // _ZN8S16470C49mf16470c4Ev
};
//SIG(1 S16470C4) C1{ m Fi[33]}


void  S16470C4 ::mf16470c4(){}

static void Test_S16470C4()
{
  {
    init_simple_test("S16470C4");
    S16470C4 lv;
    check2(sizeof(lv), 132, "sizeof(S16470C4)");
    check2(__alignof__(lv), 4, "__alignof__(S16470C4)");
    check_field_offset(lv, s16470c4f0, 0, "S16470C4.s16470c4f0");
    check_field_offset(lv, s16470c4f1, 4, "S16470C4.s16470c4f1");
  }
}
static Arrange_To_Call_Me vS16470C4(Test_S16470C4, "S16470C4", 132);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16470C2  {
  ::S18460C2 s16470c2f0;
  int s16470c2f1;
  int s16470c2f2;
  ::S16470C4 s16470c2f3[2];
  void  mf16470c2(); // _ZN8S16470C29mf16470c2Ev
};
//SIG(1 S16470C2) C1{ m FU2{ Fi Fs} Fi Fi FC3{ m Fi Fi[32]}[2]}


void  S16470C2 ::mf16470c2(){}

static void Test_S16470C2()
{
  {
    init_simple_test("S16470C2");
    S16470C2 lv;
    check2(sizeof(lv), 276, "sizeof(S16470C2)");
    check2(__alignof__(lv), 4, "__alignof__(S16470C2)");
    check_field_offset(lv, s16470c2f0, 0, "S16470C2.s16470c2f0");
    check_field_offset(lv, s16470c2f1, 4, "S16470C2.s16470c2f1");
    check_field_offset(lv, s16470c2f2, 8, "S16470C2.s16470c2f2");
    check_field_offset(lv, s16470c2f3, 12, "S16470C2.s16470c2f3");
  }
}
static Arrange_To_Call_Me vS16470C2(Test_S16470C2, "S16470C2", 276);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16470C1  {
  ::S16470C2 s16470c1f0[6];
  void  mf16470c1(); // _ZN8S16470C19mf16470c1Ev
};
//SIG(1 S16470C1) C1{ m FC2{ m FU3{ Fi Fs} Fi Fi FC4{ m Fi Fi[32]}[2]}[6]}


void  S16470C1 ::mf16470c1(){}

static void Test_S16470C1()
{
  {
    init_simple_test("S16470C1");
    S16470C1 lv;
    check2(sizeof(lv), 1656, "sizeof(S16470C1)");
    check2(__alignof__(lv), 4, "__alignof__(S16470C1)");
    check_field_offset(lv, s16470c1f0, 0, "S16470C1.s16470c1f0");
  }
}
static Arrange_To_Call_Me vS16470C1(Test_S16470C1, "S16470C1", 1656);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3907C3_nt  {
  __tsi64 s3907c3f0;
  void  mf3907c3(); // _ZN10S3907C3_nt8mf3907c3Ev
  virtual  ~S3907C3_nt(); // _ZN10S3907C3_ntD1Ev
  S3907C3_nt(); // tgen
};
//SIG(-1 S3907C3_nt) C1{ vd m FL}


void  S3907C3_nt ::mf3907c3(){}
 S3907C3_nt ::~S3907C3_nt(){ note_dtor("S3907C3_nt", this);}
S3907C3_nt ::S3907C3_nt(){ note_ctor("S3907C3_nt", this);} // tgen

//skip512 S3907C3_nt

#else // __cplusplus

extern void _ZN10S3907C3_ntC1Ev();
extern void _ZN10S3907C3_ntD1Ev();
Name_Map name_map_S3907C3_nt[] = {
  NSPAIR(_ZN10S3907C3_ntC1Ev),
  NSPAIR(_ZN10S3907C3_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S3907C3_nt[];
extern void _ZN10S3907C3_ntD1Ev();
extern void _ZN10S3907C3_ntD0Ev();
static  VTBL_ENTRY vtc_S3907C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S3907C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S3907C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S3907C3_ntD0Ev,
};
extern VTBL_ENTRY _ZTI10S3907C3_nt[];
VTBL_ENTRY *P__ZTI10S3907C3_nt = _ZTI10S3907C3_nt; 
extern  VTBL_ENTRY _ZTV10S3907C3_nt[];
Class_Descriptor cd_S3907C3_nt = {  "S3907C3_nt", // class name
  0,0,//no base classes
  &(vtc_S3907C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI10S3907C3_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S3907C3_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  S3907C2_nt  : S3907C3_nt {
  int s3907c2f0[3];
  virtual  ~S3907C2_nt(); // _ZN10S3907C2_ntD1Ev
  S3907C2_nt(); // tgen
};
//SIG(-1 S3907C2_nt) C1{ BC2{ vd m FL} vd Fi[3]}


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

//skip512 S3907C2_nt

#else // __cplusplus

extern void _ZN10S3907C2_ntC1Ev();
extern void _ZN10S3907C2_ntD1Ev();
Name_Map name_map_S3907C2_nt[] = {
  NSPAIR(_ZN10S3907C2_ntC1Ev),
  NSPAIR(_ZN10S3907C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3907C3_nt;
extern VTBL_ENTRY _ZTI10S3907C3_nt[];
extern  VTBL_ENTRY _ZTV10S3907C3_nt[];
static Base_Class bases_S3907C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3907C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S3907C2_nt[];
extern void _ZN10S3907C2_ntD1Ev();
extern void _ZN10S3907C2_ntD0Ev();
static  VTBL_ENTRY vtc_S3907C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S3907C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S3907C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S3907C2_ntD0Ev,
};
extern VTBL_ENTRY _ZTI10S3907C2_nt[];
VTBL_ENTRY *P__ZTI10S3907C2_nt = _ZTI10S3907C2_nt; 
extern  VTBL_ENTRY _ZTV10S3907C2_nt[];
Class_Descriptor cd_S3907C2_nt = {  "S3907C2_nt", // class name
  bases_S3907C2_nt, 1,
  &(vtc_S3907C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,24), // object size
  NSPAIRA(_ZTI10S3907C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S3907C2_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  S3907C4  {
  int s3907c4f0;
  void *s3907c4f1;
  char s3907c4f2;
  void  mf3907c4(); // _ZN7S3907C48mf3907c4Ev
  virtual  ~S3907C4(); // _ZN7S3907C4D1Ev
  S3907C4(); // tgen
};
//SIG(-1 S3907C4) C1{ vd m Fi Fp Fc}


void  S3907C4 ::mf3907c4(){}
 S3907C4 ::~S3907C4(){ note_dtor("S3907C4", this);}
S3907C4 ::S3907C4(){ note_ctor("S3907C4", this);} // tgen

static void Test_S3907C4()
{
  extern Class_Descriptor cd_S3907C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S3907C4, buf);
    S3907C4 *dp, &lv = *(dp=new (buf) S3907C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S3907C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3907C4)");
    check_field_offset(lv, s3907c4f0, ABISELECT(8,4), "S3907C4.s3907c4f0");
    check_field_offset(lv, s3907c4f1, ABISELECT(16,8), "S3907C4.s3907c4f1");
    check_field_offset(lv, s3907c4f2, ABISELECT(24,12), "S3907C4.s3907c4f2");
    test_class_info(&lv, &cd_S3907C4);
    dp->~S3907C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3907C4(Test_S3907C4, "S3907C4", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S3907C4C1Ev();
extern void _ZN7S3907C4D1Ev();
Name_Map name_map_S3907C4[] = {
  NSPAIR(_ZN7S3907C4C1Ev),
  NSPAIR(_ZN7S3907C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3907C4[];
extern void _ZN7S3907C4D1Ev();
extern void _ZN7S3907C4D0Ev();
static  VTBL_ENTRY vtc_S3907C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3907C4[0]),
  (VTBL_ENTRY)&_ZN7S3907C4D1Ev,
  (VTBL_ENTRY)&_ZN7S3907C4D0Ev,
};
extern VTBL_ENTRY _ZTI7S3907C4[];
extern  VTBL_ENTRY _ZTV7S3907C4[];
Class_Descriptor cd_S3907C4 = {  "S3907C4", // class name
  0,0,//no base classes
  &(vtc_S3907C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S3907C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3907C4),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  S3907C1  : S3907C2_nt {
  ::S3907C4 s3907c1f0;
  virtual  ~S3907C1(); // _ZN7S3907C1D1Ev
  S3907C1(); // tgen
};
//SIG(1 S3907C1) C1{ BC2{ BC3{ vd m FL} vd Fi[3]} vd FC4{ vd m Fi Fp Fc}}


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

static void Test_S3907C1()
{
  extern Class_Descriptor cd_S3907C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,11)];
    init_test(&cd_S3907C1, buf);
    S3907C1 *dp, &lv = *(dp=new (buf) S3907C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,40), "sizeof(S3907C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3907C1)");
    check_base_class_offset(lv, (S3907C3_nt*)(S3907C2_nt*), 0, "S3907C1");
    check_base_class_offset(lv, (S3907C2_nt*), 0, "S3907C1");
    check_field_offset(lv, s3907c1f0, ABISELECT(32,24), "S3907C1.s3907c1f0");
    test_class_info(&lv, &cd_S3907C1);
    dp->~S3907C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3907C1(Test_S3907C1, "S3907C1", ABISELECT(64,40));

#else // __cplusplus

extern void _ZN7S3907C1C1Ev();
extern void _ZN7S3907C1D1Ev();
Name_Map name_map_S3907C1[] = {
  NSPAIR(_ZN7S3907C1C1Ev),
  NSPAIR(_ZN7S3907C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3907C3_nt;
extern VTBL_ENTRY _ZTI10S3907C3_nt[];
extern  VTBL_ENTRY _ZTV10S3907C3_nt[];
extern Class_Descriptor cd_S3907C2_nt;
extern VTBL_ENTRY _ZTI10S3907C2_nt[];
extern  VTBL_ENTRY _ZTV10S3907C2_nt[];
static Base_Class bases_S3907C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3907C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3907C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S3907C1[];
extern void _ZN7S3907C1D1Ev();
extern void _ZN7S3907C1D0Ev();
static  VTBL_ENTRY vtc_S3907C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3907C1[0]),
  (VTBL_ENTRY)&_ZN7S3907C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3907C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S3907C1[];
extern  VTBL_ENTRY _ZTV7S3907C1[];
Class_Descriptor cd_S3907C1 = {  "S3907C1", // class name
  bases_S3907C1, 2,
  &(vtc_S3907C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,40), // object size
  NSPAIRA(_ZTI7S3907C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3907C1),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  S6446C2  {
  virtual void  v10(); // _ZN7S6446C23v10Ev
  virtual void  v11(); // _ZN7S6446C23v11Ev
  virtual void  v12(); // _ZN7S6446C23v12Ev
  ~S6446C2(); // tgen
  S6446C2(); // tgen
};
//SIG(-1 S6446C2) C1{ v1 v2 v3}


void  S6446C2 ::v10(){vfunc_called(this, "_ZN7S6446C23v10Ev");}
void  S6446C2 ::v11(){vfunc_called(this, "_ZN7S6446C23v11Ev");}
void  S6446C2 ::v12(){vfunc_called(this, "_ZN7S6446C23v12Ev");}
S6446C2 ::~S6446C2(){ note_dtor("S6446C2", this);} // tgen
S6446C2 ::S6446C2(){ note_ctor("S6446C2", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S6446C2C1Ev();
extern void _ZN7S6446C2D1Ev();
Name_Map name_map_S6446C2[] = {
  NSPAIR(_ZN7S6446C2C1Ev),
  NSPAIR(_ZN7S6446C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6446C2[];
extern void _ZN7S6446C23v10Ev();
extern void _ZN7S6446C23v11Ev();
extern void _ZN7S6446C23v12Ev();
static  VTBL_ENTRY vtc_S6446C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6446C2[0]),
  (VTBL_ENTRY)&_ZN7S6446C23v10Ev,
  (VTBL_ENTRY)&_ZN7S6446C23v11Ev,
  (VTBL_ENTRY)&_ZN7S6446C23v12Ev,
};
extern VTBL_ENTRY _ZTI7S6446C2[];
extern  VTBL_ENTRY _ZTV7S6446C2[];
Class_Descriptor cd_S6446C2 = {  "S6446C2", // class name
  0,0,//no base classes
  &(vtc_S6446C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S6446C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6446C2),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  S6446C1  : S6446C2 {
  virtual  ~S6446C1(); // _ZN7S6446C1D1Ev
  virtual void  v1(); // _ZN7S6446C12v1Ev
  virtual void  v2(); // _ZN7S6446C12v2Ev
  virtual void  v3(); // _ZN7S6446C12v3Ev
  virtual void  v4(); // _ZN7S6446C12v4Ev
  virtual void  v5(); // _ZN7S6446C12v5Ev
  virtual void  v6(); // _ZN7S6446C12v6Ev
  virtual void  v7(); // _ZN7S6446C12v7Ev
  virtual void  v8(); // _ZN7S6446C12v8Ev
  virtual void  v9(); // _ZN7S6446C12v9Ev
  S6446C1(); // tgen
};
//SIG(1 S6446C1) C1{ BC2{ v10 v11 v12} vd v1 v2 v3 v4 v5 v6 v7 v8 v9}


 S6446C1 ::~S6446C1(){ note_dtor("S6446C1", this);}
void  S6446C1 ::v1(){vfunc_called(this, "_ZN7S6446C12v1Ev");}
void  S6446C1 ::v2(){vfunc_called(this, "_ZN7S6446C12v2Ev");}
void  S6446C1 ::v3(){vfunc_called(this, "_ZN7S6446C12v3Ev");}
void  S6446C1 ::v4(){vfunc_called(this, "_ZN7S6446C12v4Ev");}
void  S6446C1 ::v5(){vfunc_called(this, "_ZN7S6446C12v5Ev");}
void  S6446C1 ::v6(){vfunc_called(this, "_ZN7S6446C12v6Ev");}
void  S6446C1 ::v7(){vfunc_called(this, "_ZN7S6446C12v7Ev");}
void  S6446C1 ::v8(){vfunc_called(this, "_ZN7S6446C12v8Ev");}
void  S6446C1 ::v9(){vfunc_called(this, "_ZN7S6446C12v9Ev");}
S6446C1 ::S6446C1(){ note_ctor("S6446C1", this);} // tgen

static void Test_S6446C1()
{
  extern Class_Descriptor cd_S6446C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S6446C1, buf);
    S6446C1 *dp, &lv = *(dp=new (buf) S6446C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S6446C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6446C1)");
    check_base_class_offset(lv, (S6446C2*), 0, "S6446C1");
    test_class_info(&lv, &cd_S6446C1);
    dp->~S6446C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6446C1(Test_S6446C1, "S6446C1", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S6446C1C1Ev();
extern void _ZN7S6446C1D1Ev();
Name_Map name_map_S6446C1[] = {
  NSPAIR(_ZN7S6446C1C1Ev),
  NSPAIR(_ZN7S6446C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6446C2;
extern VTBL_ENTRY _ZTI7S6446C2[];
extern  VTBL_ENTRY _ZTV7S6446C2[];
static Base_Class bases_S6446C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6446C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6446C1[];
extern void _ZN7S6446C23v10Ev();
extern void _ZN7S6446C23v11Ev();
extern void _ZN7S6446C23v12Ev();
extern void _ZN7S6446C1D1Ev();
extern void _ZN7S6446C1D0Ev();
extern void _ZN7S6446C12v1Ev();
extern void _ZN7S6446C12v2Ev();
extern void _ZN7S6446C12v3Ev();
extern void _ZN7S6446C12v4Ev();
extern void _ZN7S6446C12v5Ev();
extern void _ZN7S6446C12v6Ev();
extern void _ZN7S6446C12v7Ev();
extern void _ZN7S6446C12v8Ev();
extern void _ZN7S6446C12v9Ev();
static  VTBL_ENTRY vtc_S6446C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6446C1[0]),
  (VTBL_ENTRY)&_ZN7S6446C23v10Ev,
  (VTBL_ENTRY)&_ZN7S6446C23v11Ev,
  (VTBL_ENTRY)&_ZN7S6446C23v12Ev,
  (VTBL_ENTRY)&_ZN7S6446C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6446C1D0Ev,
  (VTBL_ENTRY)&_ZN7S6446C12v1Ev,
  (VTBL_ENTRY)&_ZN7S6446C12v2Ev,
  (VTBL_ENTRY)&_ZN7S6446C12v3Ev,
  (VTBL_ENTRY)&_ZN7S6446C12v4Ev,
  (VTBL_ENTRY)&_ZN7S6446C12v5Ev,
  (VTBL_ENTRY)&_ZN7S6446C12v6Ev,
  (VTBL_ENTRY)&_ZN7S6446C12v7Ev,
  (VTBL_ENTRY)&_ZN7S6446C12v8Ev,
  (VTBL_ENTRY)&_ZN7S6446C12v9Ev,
};
extern VTBL_ENTRY _ZTI7S6446C1[];
extern  VTBL_ENTRY _ZTV7S6446C1[];
Class_Descriptor cd_S6446C1 = {  "S6446C1", // class name
  bases_S6446C1, 1,
  &(vtc_S6446C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S6446C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6446C1),16, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8148C1  : S8087C2_nt {
  void *s8148c1f0;
  char s8148c1f1[2];
  void *s8148c1f2[2];
  virtual  ~S8148C1(); // _ZN7S8148C1D1Ev
  virtual void  v1(); // _ZN7S8148C12v1Ev
  virtual void  v2(); // _ZN7S8148C12v2Ev
  virtual void  v3(); // _ZN7S8148C12v3Ev
  virtual void  v4(); // _ZN7S8148C12v4Ev
  virtual void  v5(); // _ZN7S8148C12v5Ev
  S8148C1(); // tgen
};
//SIG(1 S8148C1) C1{ BC2{ vd m Fi} vd v1 v2 v3 v4 v5 Fp Fc[2] Fp[2]}


 S8148C1 ::~S8148C1(){ note_dtor("S8148C1", this);}
void  S8148C1 ::v1(){vfunc_called(this, "_ZN7S8148C12v1Ev");}
void  S8148C1 ::v2(){vfunc_called(this, "_ZN7S8148C12v2Ev");}
void  S8148C1 ::v3(){vfunc_called(this, "_ZN7S8148C12v3Ev");}
void  S8148C1 ::v4(){vfunc_called(this, "_ZN7S8148C12v4Ev");}
void  S8148C1 ::v5(){vfunc_called(this, "_ZN7S8148C12v5Ev");}
S8148C1 ::S8148C1(){ note_ctor("S8148C1", this);} // tgen

static void Test_S8148C1()
{
  extern Class_Descriptor cd_S8148C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[7];
    init_test(&cd_S8148C1, buf);
    S8148C1 *dp, &lv = *(dp=new (buf) S8148C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S8148C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8148C1)");
    check_base_class_offset(lv, (S8087C2_nt*), 0, "S8148C1");
    check_field_offset(lv, s8148c1f0, ABISELECT(16,8), "S8148C1.s8148c1f0");
    check_field_offset(lv, s8148c1f1, ABISELECT(24,12), "S8148C1.s8148c1f1");
    check_field_offset(lv, s8148c1f2, ABISELECT(32,16), "S8148C1.s8148c1f2");
    test_class_info(&lv, &cd_S8148C1);
    dp->~S8148C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8148C1(Test_S8148C1, "S8148C1", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN7S8148C1C1Ev();
extern void _ZN7S8148C1D1Ev();
Name_Map name_map_S8148C1[] = {
  NSPAIR(_ZN7S8148C1C1Ev),
  NSPAIR(_ZN7S8148C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8087C2_nt;
extern VTBL_ENTRY _ZTI10S8087C2_nt[];
extern  VTBL_ENTRY _ZTV10S8087C2_nt[];
static Base_Class bases_S8148C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8087C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8148C1[];
extern void _ZN7S8148C1D1Ev();
extern void _ZN7S8148C1D0Ev();
extern void _ZN7S8148C12v1Ev();
extern void _ZN7S8148C12v2Ev();
extern void _ZN7S8148C12v3Ev();
extern void _ZN7S8148C12v4Ev();
extern void _ZN7S8148C12v5Ev();
static  VTBL_ENTRY vtc_S8148C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8148C1[0]),
  (VTBL_ENTRY)&_ZN7S8148C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8148C1D0Ev,
  (VTBL_ENTRY)&_ZN7S8148C12v1Ev,
  (VTBL_ENTRY)&_ZN7S8148C12v2Ev,
  (VTBL_ENTRY)&_ZN7S8148C12v3Ev,
  (VTBL_ENTRY)&_ZN7S8148C12v4Ev,
  (VTBL_ENTRY)&_ZN7S8148C12v5Ev,
};
extern VTBL_ENTRY _ZTI7S8148C1[];
extern  VTBL_ENTRY _ZTV7S8148C1[];
Class_Descriptor cd_S8148C1 = {  "S8148C1", // class name
  bases_S8148C1, 1,
  &(vtc_S8148C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI7S8148C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8148C1),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S14118C2_nt  {
  int s14118c2f0[5];
};
//SIG(-1 S14118C2_nt) C1{ Fi[5]}



//skip512 S14118C2_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S14118C4_nt  {
  void *s14118c4f0[4];
};
//SIG(-1 S14118C4_nt) C1{ Fp[4]}



//skip512 S14118C4_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S14118C3  {
  void *s14118c3f0[3];
  ::S14118C4_nt s14118c3f1;
};
//SIG(-1 S14118C3) C1{ Fp[3] FC2{ Fp[4]}}



static void Test_S14118C3()
{
  {
    init_simple_test("S14118C3");
    S14118C3 lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S14118C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14118C3)");
    check_field_offset(lv, s14118c3f0, 0, "S14118C3.s14118c3f0");
    check_field_offset(lv, s14118c3f1, ABISELECT(24,12), "S14118C3.s14118c3f1");
  }
}
static Arrange_To_Call_Me vS14118C3(Test_S14118C3, "S14118C3", ABISELECT(56,28));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S14118C1  {
  void *s14118c1f0;
  ::S14118C2_nt s14118c1f1;
  ::S14118C3 s14118c1f2;
  ::S13685C21 s14118c1f3;
};
//SIG(1 S14118C1) C1{ Fp FC2{ Fi[5]} FC3{ Fp[3] FC4{ Fp[4]}} FC5{ FL Fp}}



static void Test_S14118C1()
{
  {
    init_simple_test("S14118C1");
    S14118C1 lv;
    check2(sizeof(lv), ABISELECT(104,64), "sizeof(S14118C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14118C1)");
    check_field_offset(lv, s14118c1f0, 0, "S14118C1.s14118c1f0");
    check_field_offset(lv, s14118c1f1, ABISELECT(8,4), "S14118C1.s14118c1f1");
    check_field_offset(lv, s14118c1f2, ABISELECT(32,24), "S14118C1.s14118c1f2");
    check_field_offset(lv, s14118c1f3, ABISELECT(88,52), "S14118C1.s14118c1f3");
  }
}
static Arrange_To_Call_Me vS14118C1(Test_S14118C1, "S14118C1", ABISELECT(104,64));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4345C3  {
  void *s4345c3f0[3];
  virtual  ~S4345C3(); // _ZN7S4345C3D1Ev
  virtual void  v2(); // _ZN7S4345C32v2Ev
  virtual void  v3(); // _ZN7S4345C32v3Ev
  S4345C3(); // tgen
};
//SIG(-1 S4345C3) C1{ vd v1 v2 Fp[3]}


 S4345C3 ::~S4345C3(){ note_dtor("S4345C3", this);}
void  S4345C3 ::v2(){vfunc_called(this, "_ZN7S4345C32v2Ev");}
void  S4345C3 ::v3(){vfunc_called(this, "_ZN7S4345C32v3Ev");}
S4345C3 ::S4345C3(){ note_ctor("S4345C3", this);} // tgen

static void Test_S4345C3()
{
  extern Class_Descriptor cd_S4345C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S4345C3, buf);
    S4345C3 *dp, &lv = *(dp=new (buf) S4345C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S4345C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4345C3)");
    check_field_offset(lv, s4345c3f0, ABISELECT(8,4), "S4345C3.s4345c3f0");
    test_class_info(&lv, &cd_S4345C3);
    dp->~S4345C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4345C3(Test_S4345C3, "S4345C3", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S4345C3C1Ev();
extern void _ZN7S4345C3D1Ev();
Name_Map name_map_S4345C3[] = {
  NSPAIR(_ZN7S4345C3C1Ev),
  NSPAIR(_ZN7S4345C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4345C3[];
extern void _ZN7S4345C3D1Ev();
extern void _ZN7S4345C3D0Ev();
extern void _ZN7S4345C32v2Ev();
extern void _ZN7S4345C32v3Ev();
static  VTBL_ENTRY vtc_S4345C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4345C3[0]),
  (VTBL_ENTRY)&_ZN7S4345C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4345C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4345C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4345C32v3Ev,
};
extern VTBL_ENTRY _ZTI7S4345C3[];
extern  VTBL_ENTRY _ZTV7S4345C3[];
Class_Descriptor cd_S4345C3 = {  "S4345C3", // class name
  0,0,//no base classes
  &(vtc_S4345C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S4345C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4345C3),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  S4345C2  : S4345C3 {
  int s4345c2f0;
  void *s4345c2f1[2];
  virtual  ~S4345C2(); // _ZN7S4345C2D1Ev
  virtual void  v4(); // _ZN7S4345C22v4Ev
  S4345C2(); // tgen
};
//SIG(-1 S4345C2) C1{ BC2{ vd v2 v3 Fp[3]} vd v1 Fi Fp[2]}


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

static void Test_S4345C2()
{
  extern Class_Descriptor cd_S4345C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[8];
    init_test(&cd_S4345C2, buf);
    S4345C2 *dp, &lv = *(dp=new (buf) S4345C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S4345C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4345C2)");
    check_base_class_offset(lv, (S4345C3*), 0, "S4345C2");
    check_field_offset(lv, s4345c2f0, ABISELECT(32,16), "S4345C2.s4345c2f0");
    check_field_offset(lv, s4345c2f1, ABISELECT(40,20), "S4345C2.s4345c2f1");
    test_class_info(&lv, &cd_S4345C2);
    dp->~S4345C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4345C2(Test_S4345C2, "S4345C2", ABISELECT(56,28));

#else // __cplusplus

extern void _ZN7S4345C2C1Ev();
extern void _ZN7S4345C2D1Ev();
Name_Map name_map_S4345C2[] = {
  NSPAIR(_ZN7S4345C2C1Ev),
  NSPAIR(_ZN7S4345C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4345C3;
extern VTBL_ENTRY _ZTI7S4345C3[];
extern  VTBL_ENTRY _ZTV7S4345C3[];
static Base_Class bases_S4345C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4345C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4345C2[];
extern void _ZN7S4345C2D1Ev();
extern void _ZN7S4345C2D0Ev();
extern void _ZN7S4345C32v2Ev();
extern void _ZN7S4345C32v3Ev();
extern void _ZN7S4345C22v4Ev();
static  VTBL_ENTRY vtc_S4345C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4345C2[0]),
  (VTBL_ENTRY)&_ZN7S4345C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4345C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4345C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4345C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4345C22v4Ev,
};
extern VTBL_ENTRY _ZTI7S4345C2[];
extern  VTBL_ENTRY _ZTV7S4345C2[];
Class_Descriptor cd_S4345C2 = {  "S4345C2", // class name
  bases_S4345C2, 1,
  &(vtc_S4345C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,28), // object size
  NSPAIRA(_ZTI7S4345C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4345C2),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4345C1  : S4345C2 {
  virtual  ~S4345C1(); // _ZN7S4345C1D1Ev
  virtual void  v1(); // _ZN7S4345C12v1Ev
  S4345C1(); // tgen
};
//SIG(1 S4345C1) C1{ BC2{ BC3{ vd v2 v3 Fp[3]} vd v4 Fi Fp[2]} vd v1}


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

static void Test_S4345C1()
{
  extern Class_Descriptor cd_S4345C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[8];
    init_test(&cd_S4345C1, buf);
    S4345C1 *dp, &lv = *(dp=new (buf) S4345C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S4345C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4345C1)");
    check_base_class_offset(lv, (S4345C3*)(S4345C2*), 0, "S4345C1");
    check_base_class_offset(lv, (S4345C2*), 0, "S4345C1");
    test_class_info(&lv, &cd_S4345C1);
    dp->~S4345C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4345C1(Test_S4345C1, "S4345C1", ABISELECT(56,28));

#else // __cplusplus

extern void _ZN7S4345C1C1Ev();
extern void _ZN7S4345C1D1Ev();
Name_Map name_map_S4345C1[] = {
  NSPAIR(_ZN7S4345C1C1Ev),
  NSPAIR(_ZN7S4345C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4345C3;
extern VTBL_ENTRY _ZTI7S4345C3[];
extern  VTBL_ENTRY _ZTV7S4345C3[];
extern Class_Descriptor cd_S4345C2;
extern VTBL_ENTRY _ZTI7S4345C2[];
extern  VTBL_ENTRY _ZTV7S4345C2[];
static Base_Class bases_S4345C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4345C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4345C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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 _ZTI7S4345C1[];
extern void _ZN7S4345C1D1Ev();
extern void _ZN7S4345C1D0Ev();
extern void _ZN7S4345C32v2Ev();
extern void _ZN7S4345C32v3Ev();
extern void _ZN7S4345C22v4Ev();
extern void _ZN7S4345C12v1Ev();
static  VTBL_ENTRY vtc_S4345C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4345C1[0]),
  (VTBL_ENTRY)&_ZN7S4345C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4345C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4345C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4345C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4345C22v4Ev,
  (VTBL_ENTRY)&_ZN7S4345C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4345C1[];
extern  VTBL_ENTRY _ZTV7S4345C1[];
Class_Descriptor cd_S4345C1 = {  "S4345C1", // class name
  bases_S4345C1, 2,
  &(vtc_S4345C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,28), // object size
  NSPAIRA(_ZTI7S4345C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4345C1),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

union  S15000C2_nt  {
  int s15000c2f0;
  char s15000c2f1[4];
  void  mf15000c2(); // _ZN11S15000C2_nt9mf15000c2Ev
};
//SIG(1 S15000C2_nt) U1{ m Fi Fc[4]}

#endif // __cplusplus
#ifdef __cplusplus

struct  S15000C1  {
  ::S15000C2_nt s15000c1f0;
  ::S601C36 s15000c1f1;
  int s15000c1f2;
  char s15000c1f3;
};
//SIG(1 S15000C1) C1{ FU2{ m Fi Fc[4]} FC3{ m Fp Fi Fi FC4{ m}} Fi Fc}



static void Test_S15000C1()
{
  {
    init_simple_test("S15000C1");
    S15000C1 lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S15000C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15000C1)");
    check_field_offset(lv, s15000c1f0, 0, "S15000C1.s15000c1f0");
    check_field_offset(lv, s15000c1f1, ABISELECT(8,4), "S15000C1.s15000c1f1");
    check_field_offset(lv, s15000c1f2, ABISELECT(32,20), "S15000C1.s15000c1f2");
    check_field_offset(lv, s15000c1f3, ABISELECT(36,24), "S15000C1.s15000c1f3");
  }
}
static Arrange_To_Call_Me vS15000C1(Test_S15000C1, "S15000C1", ABISELECT(40,28));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13640C3_nt  {
  __tsi64 s13640c3f0;
  __tsi64 s13640c3f1;
};
//SIG(1 S13640C3_nt) C1{ FL[2]}



//skip512 S13640C3_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

union  S13640C2  {
  ::S13640C3_nt s13640c2f0;
  ::S13685C9 s13640c2f1;
};
//SIG(1 S13640C2) U1{ FC2{ FL FL} FC3{ Fp FL}}

#endif // __cplusplus
#ifdef __cplusplus

struct  S13640C1  {
  long s13640c1f0;
  char s13640c1f1;
  short s13640c1f2[2];
  int s13640c1f3;
  ::S13640C2 s13640c1f4;
  void *s13640c1f5;
};
//SIG(1 S13640C1) C1{ Fl Fc Fs[2] Fi FU2{ FC3{ FL FL} FC4{ Fp FL}} Fp}



static void Test_S13640C1()
{
  {
    init_simple_test("S13640C1");
    S13640C1 lv;
    check2(sizeof(lv), ABISELECT(48,36), "sizeof(S13640C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13640C1)");
    check_field_offset(lv, s13640c1f0, 0, "S13640C1.s13640c1f0");
    check_field_offset(lv, s13640c1f1, ABISELECT(8,4), "S13640C1.s13640c1f1");
    check_field_offset(lv, s13640c1f2, ABISELECT(10,6), "S13640C1.s13640c1f2");
    check_field_offset(lv, s13640c1f3, ABISELECT(16,12), "S13640C1.s13640c1f3");
    check_field_offset(lv, s13640c1f4, ABISELECT(24,16), "S13640C1.s13640c1f4");
    check_field_offset(lv, s13640c1f5, ABISELECT(40,32), "S13640C1.s13640c1f5");
  }
}
static Arrange_To_Call_Me vS13640C1(Test_S13640C1, "S13640C1", ABISELECT(48,36));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11712C2  {
  long s11712c2f0;
  short s11712c2f1[2];
  long s11712c2f2;
};
//SIG(-1 S11712C2) C1{ Fl Fs[2] Fl}



static void Test_S11712C2()
{
  {
    init_simple_test("S11712C2");
    S11712C2 lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S11712C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11712C2)");
    check_field_offset(lv, s11712c2f0, 0, "S11712C2.s11712c2f0");
    check_field_offset(lv, s11712c2f1, ABISELECT(8,4), "S11712C2.s11712c2f1");
    check_field_offset(lv, s11712c2f2, ABISELECT(16,8), "S11712C2.s11712c2f2");
  }
}
static Arrange_To_Call_Me vS11712C2(Test_S11712C2, "S11712C2", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11712C1  {
  ::S11712C2 s11712c1f0;
  ::S12626C6 s11712c1f1;
  void *s11712c1f2[2];
};
//SIG(1 S11712C1) C1{ FC2{ Fl Fs[2] Fl} FC3{ FC4{ Fp FL} Fp FC4} Fp[2]}



static void Test_S11712C1()
{
  {
    init_simple_test("S11712C1");
    S11712C1 lv;
    check2(sizeof(lv), ABISELECT(80,48), "sizeof(S11712C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11712C1)");
    check_field_offset(lv, s11712c1f0, 0, "S11712C1.s11712c1f0");
    check_field_offset(lv, s11712c1f1, ABISELECT(24,12), "S11712C1.s11712c1f1");
    check_field_offset(lv, s11712c1f2, ABISELECT(64,40), "S11712C1.s11712c1f2");
  }
}
static Arrange_To_Call_Me vS11712C1(Test_S11712C1, "S11712C1", ABISELECT(80,48));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8778C2  {
  void *s8778c2f0;
  int s8778c2f1;
  void *s8778c2f2[2];
  virtual  ~S8778C2(); // _ZN7S8778C2D1Ev
  virtual void  v2(); // _ZN7S8778C22v2Ev
  S8778C2(); // tgen
};
//SIG(-1 S8778C2) C1{ vd v1 Fp Fi Fp[2]}


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

static void Test_S8778C2()
{
  extern Class_Descriptor cd_S8778C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S8778C2, buf);
    S8778C2 *dp, &lv = *(dp=new (buf) S8778C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S8778C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8778C2)");
    check_field_offset(lv, s8778c2f0, ABISELECT(8,4), "S8778C2.s8778c2f0");
    check_field_offset(lv, s8778c2f1, ABISELECT(16,8), "S8778C2.s8778c2f1");
    check_field_offset(lv, s8778c2f2, ABISELECT(24,12), "S8778C2.s8778c2f2");
    test_class_info(&lv, &cd_S8778C2);
    dp->~S8778C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8778C2(Test_S8778C2, "S8778C2", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S8778C2C1Ev();
extern void _ZN7S8778C2D1Ev();
Name_Map name_map_S8778C2[] = {
  NSPAIR(_ZN7S8778C2C1Ev),
  NSPAIR(_ZN7S8778C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S8778C2[];
extern void _ZN7S8778C2D1Ev();
extern void _ZN7S8778C2D0Ev();
extern void _ZN7S8778C22v2Ev();
static  VTBL_ENTRY vtc_S8778C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8778C2[0]),
  (VTBL_ENTRY)&_ZN7S8778C2D1Ev,
  (VTBL_ENTRY)&_ZN7S8778C2D0Ev,
  (VTBL_ENTRY)&_ZN7S8778C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S8778C2[];
extern  VTBL_ENTRY _ZTV7S8778C2[];
Class_Descriptor cd_S8778C2 = {  "S8778C2", // class name
  0,0,//no base classes
  &(vtc_S8778C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S8778C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S8778C2),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  S8778C1  : S8778C2 {
  void *s8778c1f0;
  int s8778c1f1;
  void *s8778c1f2[2];
  int s8778c1f3;
  virtual  ~S8778C1(); // _ZN7S8778C1D1Ev
  virtual void  v1(); // _ZN7S8778C12v1Ev
  S8778C1(); // tgen
};
//SIG(1 S8778C1) C1{ BC2{ vd v2 Fp Fi Fp[2]} vd v1 Fp Fi Fp[2] Fi}


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

static void Test_S8778C1()
{
  extern Class_Descriptor cd_S8778C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[11];
    init_test(&cd_S8778C1, buf);
    S8778C1 *dp, &lv = *(dp=new (buf) S8778C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,40), "sizeof(S8778C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8778C1)");
    check_base_class_offset(lv, (S8778C2*), 0, "S8778C1");
    check_field_offset(lv, s8778c1f0, ABISELECT(40,20), "S8778C1.s8778c1f0");
    check_field_offset(lv, s8778c1f1, ABISELECT(48,24), "S8778C1.s8778c1f1");
    check_field_offset(lv, s8778c1f2, ABISELECT(56,28), "S8778C1.s8778c1f2");
    check_field_offset(lv, s8778c1f3, ABISELECT(72,36), "S8778C1.s8778c1f3");
    test_class_info(&lv, &cd_S8778C1);
    dp->~S8778C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8778C1(Test_S8778C1, "S8778C1", ABISELECT(80,40));

#else // __cplusplus

extern void _ZN7S8778C1C1Ev();
extern void _ZN7S8778C1D1Ev();
Name_Map name_map_S8778C1[] = {
  NSPAIR(_ZN7S8778C1C1Ev),
  NSPAIR(_ZN7S8778C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8778C2;
extern VTBL_ENTRY _ZTI7S8778C2[];
extern  VTBL_ENTRY _ZTV7S8778C2[];
static Base_Class bases_S8778C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8778C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8778C1[];
extern void _ZN7S8778C1D1Ev();
extern void _ZN7S8778C1D0Ev();
extern void _ZN7S8778C22v2Ev();
extern void _ZN7S8778C12v1Ev();
static  VTBL_ENTRY vtc_S8778C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8778C1[0]),
  (VTBL_ENTRY)&_ZN7S8778C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8778C1D0Ev,
  (VTBL_ENTRY)&_ZN7S8778C22v2Ev,
  (VTBL_ENTRY)&_ZN7S8778C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S8778C1[];
extern  VTBL_ENTRY _ZTV7S8778C1[];
Class_Descriptor cd_S8778C1 = {  "S8778C1", // class name
  bases_S8778C1, 1,
  &(vtc_S8778C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,40), // object size
  NSPAIRA(_ZTI7S8778C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8778C1),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10694C4_nt  {
  short s10694c4f0;
  short s10694c4f1;
};
//SIG(1 S10694C4_nt) C1{ Fs[2]}



//skip512 S10694C4_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

union  S10694C2  {
  ::S601C41 s10694c2f0;
  int s10694c2f1;
  short s10694c2f2;
  ::S10694C4_nt s10694c2f3;
};
//SIG(1 S10694C2) U1{ FC2{ Fs Fs} Fi Fs FC3{ Fs Fs}}

#endif // __cplusplus
#ifdef __cplusplus

struct  S10694C1  {
  char s10694c1f0[2];
  short s10694c1f1;
  ::S10694C2 s10694c1f2;
};
//SIG(1 S10694C1) C1{ Fc[2] Fs FU2{ FC3{ Fs Fs} Fi Fs FC4{ Fs Fs}}}



static void Test_S10694C1()
{
  {
    init_simple_test("S10694C1");
    S10694C1 lv;
    check2(sizeof(lv), 8, "sizeof(S10694C1)");
    check2(__alignof__(lv), 4, "__alignof__(S10694C1)");
    check_field_offset(lv, s10694c1f0, 0, "S10694C1.s10694c1f0");
    check_field_offset(lv, s10694c1f1, 2, "S10694C1.s10694c1f1");
    check_field_offset(lv, s10694c1f2, 4, "S10694C1.s10694c1f2");
  }
}
static Arrange_To_Call_Me vS10694C1(Test_S10694C1, "S10694C1", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8781C2  {
  void *s8781c2f0;
  int s8781c2f1;
  void *s8781c2f2[2];
  virtual  ~S8781C2(); // _ZN7S8781C2D1Ev
  virtual void  v2(); // _ZN7S8781C22v2Ev
  S8781C2(); // tgen
};
//SIG(-1 S8781C2) C1{ vd v1 Fp Fi Fp[2]}


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

static void Test_S8781C2()
{
  extern Class_Descriptor cd_S8781C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S8781C2, buf);
    S8781C2 *dp, &lv = *(dp=new (buf) S8781C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S8781C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8781C2)");
    check_field_offset(lv, s8781c2f0, ABISELECT(8,4), "S8781C2.s8781c2f0");
    check_field_offset(lv, s8781c2f1, ABISELECT(16,8), "S8781C2.s8781c2f1");
    check_field_offset(lv, s8781c2f2, ABISELECT(24,12), "S8781C2.s8781c2f2");
    test_class_info(&lv, &cd_S8781C2);
    dp->~S8781C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8781C2(Test_S8781C2, "S8781C2", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S8781C2C1Ev();
extern void _ZN7S8781C2D1Ev();
Name_Map name_map_S8781C2[] = {
  NSPAIR(_ZN7S8781C2C1Ev),
  NSPAIR(_ZN7S8781C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S8781C2[];
extern void _ZN7S8781C2D1Ev();
extern void _ZN7S8781C2D0Ev();
extern void _ZN7S8781C22v2Ev();
static  VTBL_ENTRY vtc_S8781C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8781C2[0]),
  (VTBL_ENTRY)&_ZN7S8781C2D1Ev,
  (VTBL_ENTRY)&_ZN7S8781C2D0Ev,
  (VTBL_ENTRY)&_ZN7S8781C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S8781C2[];
extern  VTBL_ENTRY _ZTV7S8781C2[];
Class_Descriptor cd_S8781C2 = {  "S8781C2", // class name
  0,0,//no base classes
  &(vtc_S8781C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S8781C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S8781C2),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  S8781C1  : S8781C2 {
  void *s8781c1f0[2];
  int s8781c1f1[4];
  virtual  ~S8781C1(); // _ZN7S8781C1D1Ev
  virtual void  v1(); // _ZN7S8781C12v1Ev
  S8781C1(); // tgen
};
//SIG(1 S8781C1) C1{ BC2{ vd v2 Fp Fi Fp[2]} vd v1 Fp[2] Fi[4]}


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

static void Test_S8781C1()
{
  extern Class_Descriptor cd_S8781C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,12)];
    init_test(&cd_S8781C1, buf);
    S8781C1 *dp, &lv = *(dp=new (buf) S8781C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,44), "sizeof(S8781C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8781C1)");
    check_base_class_offset(lv, (S8781C2*), 0, "S8781C1");
    check_field_offset(lv, s8781c1f0, ABISELECT(40,20), "S8781C1.s8781c1f0");
    check_field_offset(lv, s8781c1f1, ABISELECT(56,28), "S8781C1.s8781c1f1");
    test_class_info(&lv, &cd_S8781C1);
    dp->~S8781C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8781C1(Test_S8781C1, "S8781C1", ABISELECT(72,44));

#else // __cplusplus

extern void _ZN7S8781C1C1Ev();
extern void _ZN7S8781C1D1Ev();
Name_Map name_map_S8781C1[] = {
  NSPAIR(_ZN7S8781C1C1Ev),
  NSPAIR(_ZN7S8781C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8781C2;
extern VTBL_ENTRY _ZTI7S8781C2[];
extern  VTBL_ENTRY _ZTV7S8781C2[];
static Base_Class bases_S8781C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8781C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8781C1[];
extern void _ZN7S8781C1D1Ev();
extern void _ZN7S8781C1D0Ev();
extern void _ZN7S8781C22v2Ev();
extern void _ZN7S8781C12v1Ev();
static  VTBL_ENTRY vtc_S8781C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8781C1[0]),
  (VTBL_ENTRY)&_ZN7S8781C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8781C1D0Ev,
  (VTBL_ENTRY)&_ZN7S8781C22v2Ev,
  (VTBL_ENTRY)&_ZN7S8781C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S8781C1[];
extern  VTBL_ENTRY _ZTV7S8781C1[];
Class_Descriptor cd_S8781C1 = {  "S8781C1", // class name
  bases_S8781C1, 1,
  &(vtc_S8781C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,44), // object size
  NSPAIRA(_ZTI7S8781C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8781C1),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

union  S12888C2  {
  void *s12888c2f0;
  void *s12888c2f1;
  void *s12888c2f2;
  int s12888c2f3;
  int s12888c2f4;
  int s12888c2f5;
  ::S11720C18 s12888c2f6;
  void *s12888c2f7;
};
//SIG(1 S12888C2) U1{ Fp Fp Fp Fi Fi Fi FC2{ Fp Fp} Fp}

#endif // __cplusplus
#ifdef __cplusplus

struct  S12888C1  {
  int s12888c1f0;
  ::S12888C2 s12888c1f1;
};
//SIG(1 S12888C1) C1{ Fi FU2{ Fp Fp Fp Fi Fi Fi FC3{ Fp Fp} Fp}}



static void Test_S12888C1()
{
  {
    init_simple_test("S12888C1");
    S12888C1 lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S12888C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12888C1)");
    check_field_offset(lv, s12888c1f0, 0, "S12888C1.s12888c1f0");
    check_field_offset(lv, s12888c1f1, ABISELECT(8,4), "S12888C1.s12888c1f1");
  }
}
static Arrange_To_Call_Me vS12888C1(Test_S12888C1, "S12888C1", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16888C2  {
  ::S6962C17_nt s16888c2f0;
  ::S3352C13_nt s16888c2f1;
};
//SIG(-1 S16888C2) C1{ FC2{ m Fi[3]} FC3{ m Fi[3]}}



static void Test_S16888C2()
{
  {
    init_simple_test("S16888C2");
    S16888C2 lv;
    check2(sizeof(lv), 24, "sizeof(S16888C2)");
    check2(__alignof__(lv), 4, "__alignof__(S16888C2)");
    check_field_offset(lv, s16888c2f0, 0, "S16888C2.s16888c2f0");
    check_field_offset(lv, s16888c2f1, 12, "S16888C2.s16888c2f1");
  }
}
static Arrange_To_Call_Me vS16888C2(Test_S16888C2, "S16888C2", 24);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16888C1  {
  int s16888c1f0;
  void *s16888c1f1;
  ::S16888C2 s16888c1f2;
  void  mf16888c1(); // _ZN8S16888C19mf16888c1Ev
};
//SIG(1 S16888C1) C1{ m Fi Fp FC2{ FC3{ m Fi[3]} FC4{ m Fi[3]}}}


void  S16888C1 ::mf16888c1(){}

static void Test_S16888C1()
{
  {
    init_simple_test("S16888C1");
    S16888C1 lv;
    check2(sizeof(lv), ABISELECT(40,32), "sizeof(S16888C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16888C1)");
    check_field_offset(lv, s16888c1f0, 0, "S16888C1.s16888c1f0");
    check_field_offset(lv, s16888c1f1, ABISELECT(8,4), "S16888C1.s16888c1f1");
    check_field_offset(lv, s16888c1f2, ABISELECT(16,8), "S16888C1.s16888c1f2");
  }
}
static Arrange_To_Call_Me vS16888C1(Test_S16888C1, "S16888C1", ABISELECT(40,32));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

union  S10693C2  {
  ::S10694C4_nt s10693c2f0;
  int s10693c2f1;
  ::S601C41 s10693c2f2;
};
//SIG(1 S10693C2) U1{ FC2{ Fs Fs} Fi FC3{ Fs Fs}}

#endif // __cplusplus
#ifdef __cplusplus

struct  S10693C1  {
  char s10693c1f0[2];
  short s10693c1f1;
  ::S10693C2 s10693c1f2;
};
//SIG(1 S10693C1) C1{ Fc[2] Fs FU2{ FC3{ Fs Fs} Fi FC4{ Fs Fs}}}



static void Test_S10693C1()
{
  {
    init_simple_test("S10693C1");
    S10693C1 lv;
    check2(sizeof(lv), 8, "sizeof(S10693C1)");
    check2(__alignof__(lv), 4, "__alignof__(S10693C1)");
    check_field_offset(lv, s10693c1f0, 0, "S10693C1.s10693c1f0");
    check_field_offset(lv, s10693c1f1, 2, "S10693C1.s10693c1f1");
    check_field_offset(lv, s10693c1f2, 4, "S10693C1.s10693c1f2");
  }
}
static Arrange_To_Call_Me vS10693C1(Test_S10693C1, "S10693C1", 8);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13893C3  {
  ::S13685C9 s13893c3f0;
  ::S13685C9 s13893c3f1;
};
//SIG(1 S13893C3) C1{ FC2{ Fp FL} FC2}



static void Test_S13893C3()
{
  {
    init_simple_test("S13893C3");
    S13893C3 lv;
    check2(sizeof(lv), ABISELECT(32,24), "sizeof(S13893C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13893C3)");
    check_field_offset(lv, s13893c3f0, 0, "S13893C3.s13893c3f0");
    check_field_offset(lv, s13893c3f1, ABISELECT(16,12), "S13893C3.s13893c3f1");
  }
}
static Arrange_To_Call_Me vS13893C3(Test_S13893C3, "S13893C3", ABISELECT(32,24));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13893C5  {
  ::S13685C9 s13893c5f0;
};
//SIG(1 S13893C5) C1{ FC2{ Fp FL}}



static void Test_S13893C5()
{
  {
    init_simple_test("S13893C5");
    S13893C5 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S13893C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13893C5)");
    check_field_offset(lv, s13893c5f0, 0, "S13893C5.s13893c5f0");
  }
}
static Arrange_To_Call_Me vS13893C5(Test_S13893C5, "S13893C5", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

union  S13893C2  {
  ::S13893C3 s13893c2f0;
  ::S13893C5 s13893c2f1;
};
//SIG(1 S13893C2) U1{ FC2{ FC3{ Fp FL} FC3} FC4{ FC3}}

#endif // __cplusplus
#ifdef __cplusplus

struct  S13893C1  {
  long s13893c1f0;
  ::S13893C2 s13893c1f1;
  void *s13893c1f2;
};
//SIG(1 S13893C1) C1{ Fl FU2{ FC3{ FC4{ Fp FL} FC4} FC5{ FC4}} Fp}



static void Test_S13893C1()
{
  {
    init_simple_test("S13893C1");
    S13893C1 lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S13893C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13893C1)");
    check_field_offset(lv, s13893c1f0, 0, "S13893C1.s13893c1f0");
    check_field_offset(lv, s13893c1f1, ABISELECT(8,4), "S13893C1.s13893c1f1");
    check_field_offset(lv, s13893c1f2, ABISELECT(40,28), "S13893C1.s13893c1f2");
  }
}
static Arrange_To_Call_Me vS13893C1(Test_S13893C1, "S13893C1", ABISELECT(48,32));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8779C2  {
  void *s8779c2f0;
  int s8779c2f1;
  void *s8779c2f2[2];
  virtual  ~S8779C2(); // _ZN7S8779C2D1Ev
  virtual void  v2(); // _ZN7S8779C22v2Ev
  S8779C2(); // tgen
};
//SIG(-1 S8779C2) C1{ vd v1 Fp Fi Fp[2]}


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

static void Test_S8779C2()
{
  extern Class_Descriptor cd_S8779C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S8779C2, buf);
    S8779C2 *dp, &lv = *(dp=new (buf) S8779C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S8779C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8779C2)");
    check_field_offset(lv, s8779c2f0, ABISELECT(8,4), "S8779C2.s8779c2f0");
    check_field_offset(lv, s8779c2f1, ABISELECT(16,8), "S8779C2.s8779c2f1");
    check_field_offset(lv, s8779c2f2, ABISELECT(24,12), "S8779C2.s8779c2f2");
    test_class_info(&lv, &cd_S8779C2);
    dp->~S8779C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8779C2(Test_S8779C2, "S8779C2", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S8779C2C1Ev();
extern void _ZN7S8779C2D1Ev();
Name_Map name_map_S8779C2[] = {
  NSPAIR(_ZN7S8779C2C1Ev),
  NSPAIR(_ZN7S8779C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S8779C2[];
extern void _ZN7S8779C2D1Ev();
extern void _ZN7S8779C2D0Ev();
extern void _ZN7S8779C22v2Ev();
static  VTBL_ENTRY vtc_S8779C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8779C2[0]),
  (VTBL_ENTRY)&_ZN7S8779C2D1Ev,
  (VTBL_ENTRY)&_ZN7S8779C2D0Ev,
  (VTBL_ENTRY)&_ZN7S8779C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S8779C2[];
extern  VTBL_ENTRY _ZTV7S8779C2[];
Class_Descriptor cd_S8779C2 = {  "S8779C2", // class name
  0,0,//no base classes
  &(vtc_S8779C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S8779C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S8779C2),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  S8779C1  : S8779C2 {
  void *s8779c1f0;
  int s8779c1f1[2];
  virtual  ~S8779C1(); // _ZN7S8779C1D1Ev
  virtual void  v1(); // _ZN7S8779C12v1Ev
  S8779C1(); // tgen
};
//SIG(1 S8779C1) C1{ BC2{ vd v2 Fp Fi Fp[2]} vd v1 Fp Fi[2]}


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

static void Test_S8779C1()
{
  extern Class_Descriptor cd_S8779C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,9)];
    init_test(&cd_S8779C1, buf);
    S8779C1 *dp, &lv = *(dp=new (buf) S8779C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,32), "sizeof(S8779C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8779C1)");
    check_base_class_offset(lv, (S8779C2*), 0, "S8779C1");
    check_field_offset(lv, s8779c1f0, ABISELECT(40,20), "S8779C1.s8779c1f0");
    check_field_offset(lv, s8779c1f1, ABISELECT(48,24), "S8779C1.s8779c1f1");
    test_class_info(&lv, &cd_S8779C1);
    dp->~S8779C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8779C1(Test_S8779C1, "S8779C1", ABISELECT(56,32));

#else // __cplusplus

extern void _ZN7S8779C1C1Ev();
extern void _ZN7S8779C1D1Ev();
Name_Map name_map_S8779C1[] = {
  NSPAIR(_ZN7S8779C1C1Ev),
  NSPAIR(_ZN7S8779C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8779C2;
extern VTBL_ENTRY _ZTI7S8779C2[];
extern  VTBL_ENTRY _ZTV7S8779C2[];
static Base_Class bases_S8779C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8779C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8779C1[];
extern void _ZN7S8779C1D1Ev();
extern void _ZN7S8779C1D0Ev();
extern void _ZN7S8779C22v2Ev();
extern void _ZN7S8779C12v1Ev();
static  VTBL_ENTRY vtc_S8779C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8779C1[0]),
  (VTBL_ENTRY)&_ZN7S8779C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8779C1D0Ev,
  (VTBL_ENTRY)&_ZN7S8779C22v2Ev,
  (VTBL_ENTRY)&_ZN7S8779C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S8779C1[];
extern  VTBL_ENTRY _ZTV7S8779C1[];
Class_Descriptor cd_S8779C1 = {  "S8779C1", // class name
  bases_S8779C1, 1,
  &(vtc_S8779C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,32), // object size
  NSPAIRA(_ZTI7S8779C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8779C1),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18029C1  {
  void *s18029c1f0[2];
  ::S2120C37 s18029c1f1;
  void *s18029c1f2[3];
  void  mf18029c1(); // _ZN8S18029C19mf18029c1Ev
};
//SIG(1 S18029C1) C1{ m Fp[2] FC2{ m Fp Fi[2] FC3{ m}} Fp[3]}


void  S18029C1 ::mf18029c1(){}

static void Test_S18029C1()
{
  {
    init_simple_test("S18029C1");
    S18029C1 lv;
    check2(sizeof(lv), ABISELECT(64,36), "sizeof(S18029C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18029C1)");
    check_field_offset(lv, s18029c1f0, 0, "S18029C1.s18029c1f0");
    check_field_offset(lv, s18029c1f1, ABISELECT(16,8), "S18029C1.s18029c1f1");
    check_field_offset(lv, s18029c1f2, ABISELECT(40,24), "S18029C1.s18029c1f2");
  }
}
static Arrange_To_Call_Me vS18029C1(Test_S18029C1, "S18029C1", ABISELECT(64,36));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15994C1  {
  ::S3352C4_nt s15994c1f0;
  ::S3352C18 s15994c1f1;
  void  mf15994c1(); // _ZN8S15994C19mf15994c1Ev
};
//SIG(1 S15994C1) C1{ m FC2{ m Fi[2]} FC3{ BC4{ m Fp Fi[2]}}}


void  S15994C1 ::mf15994c1(){}

static void Test_S15994C1()
{
  {
    init_simple_test("S15994C1");
    S15994C1 lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(S15994C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15994C1)");
    check_field_offset(lv, s15994c1f0, 0, "S15994C1.s15994c1f0");
    check_field_offset(lv, s15994c1f1, 8, "S15994C1.s15994c1f1");
  }
}
static Arrange_To_Call_Me vS15994C1(Test_S15994C1, "S15994C1", ABISELECT(24,20));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8783C2  {
  void *s8783c2f0;
  int s8783c2f1;
  void *s8783c2f2[2];
  virtual  ~S8783C2(); // _ZN7S8783C2D1Ev
  virtual void  v2(); // _ZN7S8783C22v2Ev
  S8783C2(); // tgen
};
//SIG(-1 S8783C2) C1{ vd v1 Fp Fi Fp[2]}


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

static void Test_S8783C2()
{
  extern Class_Descriptor cd_S8783C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S8783C2, buf);
    S8783C2 *dp, &lv = *(dp=new (buf) S8783C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S8783C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8783C2)");
    check_field_offset(lv, s8783c2f0, ABISELECT(8,4), "S8783C2.s8783c2f0");
    check_field_offset(lv, s8783c2f1, ABISELECT(16,8), "S8783C2.s8783c2f1");
    check_field_offset(lv, s8783c2f2, ABISELECT(24,12), "S8783C2.s8783c2f2");
    test_class_info(&lv, &cd_S8783C2);
    dp->~S8783C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8783C2(Test_S8783C2, "S8783C2", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S8783C2C1Ev();
extern void _ZN7S8783C2D1Ev();
Name_Map name_map_S8783C2[] = {
  NSPAIR(_ZN7S8783C2C1Ev),
  NSPAIR(_ZN7S8783C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S8783C2[];
extern void _ZN7S8783C2D1Ev();
extern void _ZN7S8783C2D0Ev();
extern void _ZN7S8783C22v2Ev();
static  VTBL_ENTRY vtc_S8783C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8783C2[0]),
  (VTBL_ENTRY)&_ZN7S8783C2D1Ev,
  (VTBL_ENTRY)&_ZN7S8783C2D0Ev,
  (VTBL_ENTRY)&_ZN7S8783C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S8783C2[];
extern  VTBL_ENTRY _ZTV7S8783C2[];
Class_Descriptor cd_S8783C2 = {  "S8783C2", // class name
  0,0,//no base classes
  &(vtc_S8783C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S8783C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S8783C2),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  S8783C1  : S8783C2 {
  void *s8783c1f0[3];
  virtual  ~S8783C1(); // _ZN7S8783C1D1Ev
  virtual void  v1(); // _ZN7S8783C12v1Ev
  S8783C1(); // tgen
};
//SIG(1 S8783C1) C1{ BC2{ vd v2 Fp Fi Fp[2]} vd v1 Fp[3]}


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

static void Test_S8783C1()
{
  extern Class_Descriptor cd_S8783C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[9];
    init_test(&cd_S8783C1, buf);
    S8783C1 *dp, &lv = *(dp=new (buf) S8783C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S8783C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8783C1)");
    check_base_class_offset(lv, (S8783C2*), 0, "S8783C1");
    check_field_offset(lv, s8783c1f0, ABISELECT(40,20), "S8783C1.s8783c1f0");
    test_class_info(&lv, &cd_S8783C1);
    dp->~S8783C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8783C1(Test_S8783C1, "S8783C1", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN7S8783C1C1Ev();
extern void _ZN7S8783C1D1Ev();
Name_Map name_map_S8783C1[] = {
  NSPAIR(_ZN7S8783C1C1Ev),
  NSPAIR(_ZN7S8783C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8783C2;
extern VTBL_ENTRY _ZTI7S8783C2[];
extern  VTBL_ENTRY _ZTV7S8783C2[];
static Base_Class bases_S8783C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8783C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8783C1[];
extern void _ZN7S8783C1D1Ev();
extern void _ZN7S8783C1D0Ev();
extern void _ZN7S8783C22v2Ev();
extern void _ZN7S8783C12v1Ev();
static  VTBL_ENTRY vtc_S8783C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8783C1[0]),
  (VTBL_ENTRY)&_ZN7S8783C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8783C1D0Ev,
  (VTBL_ENTRY)&_ZN7S8783C22v2Ev,
  (VTBL_ENTRY)&_ZN7S8783C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S8783C1[];
extern  VTBL_ENTRY _ZTV7S8783C1[];
Class_Descriptor cd_S8783C1 = {  "S8783C1", // class name
  bases_S8783C1, 1,
  &(vtc_S8783C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI7S8783C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8783C1),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8782C2  {
  void *s8782c2f0;
  int s8782c2f1;
  void *s8782c2f2[2];
  virtual  ~S8782C2(); // _ZN7S8782C2D1Ev
  virtual void  v2(); // _ZN7S8782C22v2Ev
  S8782C2(); // tgen
};
//SIG(-1 S8782C2) C1{ vd v1 Fp Fi Fp[2]}


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

static void Test_S8782C2()
{
  extern Class_Descriptor cd_S8782C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S8782C2, buf);
    S8782C2 *dp, &lv = *(dp=new (buf) S8782C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S8782C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8782C2)");
    check_field_offset(lv, s8782c2f0, ABISELECT(8,4), "S8782C2.s8782c2f0");
    check_field_offset(lv, s8782c2f1, ABISELECT(16,8), "S8782C2.s8782c2f1");
    check_field_offset(lv, s8782c2f2, ABISELECT(24,12), "S8782C2.s8782c2f2");
    test_class_info(&lv, &cd_S8782C2);
    dp->~S8782C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8782C2(Test_S8782C2, "S8782C2", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S8782C2C1Ev();
extern void _ZN7S8782C2D1Ev();
Name_Map name_map_S8782C2[] = {
  NSPAIR(_ZN7S8782C2C1Ev),
  NSPAIR(_ZN7S8782C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S8782C2[];
extern void _ZN7S8782C2D1Ev();
extern void _ZN7S8782C2D0Ev();
extern void _ZN7S8782C22v2Ev();
static  VTBL_ENTRY vtc_S8782C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8782C2[0]),
  (VTBL_ENTRY)&_ZN7S8782C2D1Ev,
  (VTBL_ENTRY)&_ZN7S8782C2D0Ev,
  (VTBL_ENTRY)&_ZN7S8782C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S8782C2[];
extern  VTBL_ENTRY _ZTV7S8782C2[];
Class_Descriptor cd_S8782C2 = {  "S8782C2", // class name
  0,0,//no base classes
  &(vtc_S8782C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S8782C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S8782C2),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  S8782C1  : S8782C2 {
  void *s8782c1f0[2];
  virtual  ~S8782C1(); // _ZN7S8782C1D1Ev
  virtual void  v1(); // _ZN7S8782C12v1Ev
  S8782C1(); // tgen
};
//SIG(1 S8782C1) C1{ BC2{ vd v2 Fp Fi Fp[2]} vd v1 Fp[2]}


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

static void Test_S8782C1()
{
  extern Class_Descriptor cd_S8782C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[8];
    init_test(&cd_S8782C1, buf);
    S8782C1 *dp, &lv = *(dp=new (buf) S8782C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S8782C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8782C1)");
    check_base_class_offset(lv, (S8782C2*), 0, "S8782C1");
    check_field_offset(lv, s8782c1f0, ABISELECT(40,20), "S8782C1.s8782c1f0");
    test_class_info(&lv, &cd_S8782C1);
    dp->~S8782C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8782C1(Test_S8782C1, "S8782C1", ABISELECT(56,28));

#else // __cplusplus

extern void _ZN7S8782C1C1Ev();
extern void _ZN7S8782C1D1Ev();
Name_Map name_map_S8782C1[] = {
  NSPAIR(_ZN7S8782C1C1Ev),
  NSPAIR(_ZN7S8782C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8782C2;
extern VTBL_ENTRY _ZTI7S8782C2[];
extern  VTBL_ENTRY _ZTV7S8782C2[];
static Base_Class bases_S8782C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8782C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8782C1[];
extern void _ZN7S8782C1D1Ev();
extern void _ZN7S8782C1D0Ev();
extern void _ZN7S8782C22v2Ev();
extern void _ZN7S8782C12v1Ev();
static  VTBL_ENTRY vtc_S8782C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8782C1[0]),
  (VTBL_ENTRY)&_ZN7S8782C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8782C1D0Ev,
  (VTBL_ENTRY)&_ZN7S8782C22v2Ev,
  (VTBL_ENTRY)&_ZN7S8782C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S8782C1[];
extern  VTBL_ENTRY _ZTV7S8782C1[];
Class_Descriptor cd_S8782C1 = {  "S8782C1", // class name
  bases_S8782C1, 1,
  &(vtc_S8782C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,28), // object size
  NSPAIRA(_ZTI7S8782C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8782C1),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S14447C1  {
  void *s14447c1f0[2];
  char s14447c1f1;
  void *s14447c1f2;
  char s14447c1f3;
  void *s14447c1f4[2];
  int s14447c1f5;
  void *s14447c1f6;
  int s14447c1f7[2];
};
//SIG(1 S14447C1) C1{ Fp[2] Fc Fp Fc Fp[2] Fi Fp Fi[2]}



static void Test_S14447C1()
{
  {
    init_simple_test("S14447C1");
    S14447C1 lv;
    check2(sizeof(lv), ABISELECT(80,44), "sizeof(S14447C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14447C1)");
    check_field_offset(lv, s14447c1f0, 0, "S14447C1.s14447c1f0");
    check_field_offset(lv, s14447c1f1, ABISELECT(16,8), "S14447C1.s14447c1f1");
    check_field_offset(lv, s14447c1f2, ABISELECT(24,12), "S14447C1.s14447c1f2");
    check_field_offset(lv, s14447c1f3, ABISELECT(32,16), "S14447C1.s14447c1f3");
    check_field_offset(lv, s14447c1f4, ABISELECT(40,20), "S14447C1.s14447c1f4");
    check_field_offset(lv, s14447c1f5, ABISELECT(56,28), "S14447C1.s14447c1f5");
    check_field_offset(lv, s14447c1f6, ABISELECT(64,32), "S14447C1.s14447c1f6");
    check_field_offset(lv, s14447c1f7, ABISELECT(72,36), "S14447C1.s14447c1f7");
  }
}
static Arrange_To_Call_Me vS14447C1(Test_S14447C1, "S14447C1", ABISELECT(80,44));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16911C1  {
  int s16911c1f0;
  void *s16911c1f1;
  ::S885C13_nt s16911c1f2;
  ::S18191C5 s16911c1f3;
  void  mf16911c1(); // _ZN8S16911C19mf16911c1Ev
};
//SIG(1 S16911C1) C1{ m Fi Fp FC2{ m Fp} FC3{ m FC4{} FC4}}


void  S16911C1 ::mf16911c1(){}

static void Test_S16911C1()
{
  {
    init_simple_test("S16911C1");
    S16911C1 lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S16911C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16911C1)");
    check_field_offset(lv, s16911c1f0, 0, "S16911C1.s16911c1f0");
    check_field_offset(lv, s16911c1f1, ABISELECT(8,4), "S16911C1.s16911c1f1");
    check_field_offset(lv, s16911c1f2, ABISELECT(16,8), "S16911C1.s16911c1f2");
    check_field_offset(lv, s16911c1f3, ABISELECT(24,12), "S16911C1.s16911c1f3");
  }
}
static Arrange_To_Call_Me vS16911C1(Test_S16911C1, "S16911C1", ABISELECT(32,16));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17232C1  {
  int s17232c1f0[4];
  ::S885C13_nt s17232c1f1;
  void *s17232c1f2;
  char s17232c1f3[2];
  void *s17232c1f4[2];
  void  mf17232c1(); // _ZN8S17232C19mf17232c1Ev
};
//SIG(1 S17232C1) C1{ m Fi[4] FC2{ m Fp} Fp Fc[2] Fp[2]}


void  S17232C1 ::mf17232c1(){}

static void Test_S17232C1()
{
  {
    init_simple_test("S17232C1");
    S17232C1 lv;
    check2(sizeof(lv), ABISELECT(56,36), "sizeof(S17232C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17232C1)");
    check_field_offset(lv, s17232c1f0, 0, "S17232C1.s17232c1f0");
    check_field_offset(lv, s17232c1f1, 16, "S17232C1.s17232c1f1");
    check_field_offset(lv, s17232c1f2, ABISELECT(24,20), "S17232C1.s17232c1f2");
    check_field_offset(lv, s17232c1f3, ABISELECT(32,24), "S17232C1.s17232c1f3");
    check_field_offset(lv, s17232c1f4, ABISELECT(40,28), "S17232C1.s17232c1f4");
  }
}
static Arrange_To_Call_Me vS17232C1(Test_S17232C1, "S17232C1", ABISELECT(56,36));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11989C1  {
  ::S601C12 s11989c1f0;
  int s11989c1f1;
};
//SIG(1 S11989C1) C1{ FC2{ m FC3{ m FC4{ m FL[2]}} FC3} Fi}



static void Test_S11989C1()
{
  {
    init_simple_test("S11989C1");
    S11989C1 lv;
    check2(sizeof(lv), ABISELECT(40,36), "sizeof(S11989C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11989C1)");
    check_field_offset(lv, s11989c1f0, 0, "S11989C1.s11989c1f0");
    check_field_offset(lv, s11989c1f1, 32, "S11989C1.s11989c1f1");
  }
}
static Arrange_To_Call_Me vS11989C1(Test_S11989C1, "S11989C1", ABISELECT(40,36));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8784C2  {
  void *s8784c2f0;
  int s8784c2f1;
  void *s8784c2f2[2];
  virtual  ~S8784C2(); // _ZN7S8784C2D1Ev
  virtual void  v2(); // _ZN7S8784C22v2Ev
  S8784C2(); // tgen
};
//SIG(-1 S8784C2) C1{ vd v1 Fp Fi Fp[2]}


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

static void Test_S8784C2()
{
  extern Class_Descriptor cd_S8784C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S8784C2, buf);
    S8784C2 *dp, &lv = *(dp=new (buf) S8784C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S8784C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8784C2)");
    check_field_offset(lv, s8784c2f0, ABISELECT(8,4), "S8784C2.s8784c2f0");
    check_field_offset(lv, s8784c2f1, ABISELECT(16,8), "S8784C2.s8784c2f1");
    check_field_offset(lv, s8784c2f2, ABISELECT(24,12), "S8784C2.s8784c2f2");
    test_class_info(&lv, &cd_S8784C2);
    dp->~S8784C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8784C2(Test_S8784C2, "S8784C2", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S8784C2C1Ev();
extern void _ZN7S8784C2D1Ev();
Name_Map name_map_S8784C2[] = {
  NSPAIR(_ZN7S8784C2C1Ev),
  NSPAIR(_ZN7S8784C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S8784C2[];
extern void _ZN7S8784C2D1Ev();
extern void _ZN7S8784C2D0Ev();
extern void _ZN7S8784C22v2Ev();
static  VTBL_ENTRY vtc_S8784C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8784C2[0]),
  (VTBL_ENTRY)&_ZN7S8784C2D1Ev,
  (VTBL_ENTRY)&_ZN7S8784C2D0Ev,
  (VTBL_ENTRY)&_ZN7S8784C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S8784C2[];
extern  VTBL_ENTRY _ZTV7S8784C2[];
Class_Descriptor cd_S8784C2 = {  "S8784C2", // class name
  0,0,//no base classes
  &(vtc_S8784C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S8784C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S8784C2),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  S8784C1  : S8784C2 {
  void *s8784c1f0;
  virtual  ~S8784C1(); // _ZN7S8784C1D1Ev
  virtual void  v1(); // _ZN7S8784C12v1Ev
  S8784C1(); // tgen
};
//SIG(1 S8784C1) C1{ BC2{ vd v2 Fp Fi Fp[2]} vd v1 Fp}


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

static void Test_S8784C1()
{
  extern Class_Descriptor cd_S8784C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[7];
    init_test(&cd_S8784C1, buf);
    S8784C1 *dp, &lv = *(dp=new (buf) S8784C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S8784C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8784C1)");
    check_base_class_offset(lv, (S8784C2*), 0, "S8784C1");
    check_field_offset(lv, s8784c1f0, ABISELECT(40,20), "S8784C1.s8784c1f0");
    test_class_info(&lv, &cd_S8784C1);
    dp->~S8784C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8784C1(Test_S8784C1, "S8784C1", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN7S8784C1C1Ev();
extern void _ZN7S8784C1D1Ev();
Name_Map name_map_S8784C1[] = {
  NSPAIR(_ZN7S8784C1C1Ev),
  NSPAIR(_ZN7S8784C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8784C2;
extern VTBL_ENTRY _ZTI7S8784C2[];
extern  VTBL_ENTRY _ZTV7S8784C2[];
static Base_Class bases_S8784C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8784C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8784C1[];
extern void _ZN7S8784C1D1Ev();
extern void _ZN7S8784C1D0Ev();
extern void _ZN7S8784C22v2Ev();
extern void _ZN7S8784C12v1Ev();
static  VTBL_ENTRY vtc_S8784C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8784C1[0]),
  (VTBL_ENTRY)&_ZN7S8784C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8784C1D0Ev,
  (VTBL_ENTRY)&_ZN7S8784C22v2Ev,
  (VTBL_ENTRY)&_ZN7S8784C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S8784C1[];
extern  VTBL_ENTRY _ZTV7S8784C1[];
Class_Descriptor cd_S8784C1 = {  "S8784C1", // class name
  bases_S8784C1, 1,
  &(vtc_S8784C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI7S8784C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8784C1),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11927C1  {
  ::S12627C18 s11927c1f0;
  void *s11927c1f1[3];
};
//SIG(1 S11927C1) C1{ FC2{ Fs FC3{ Fp FL} FC3 FC3} Fp[3]}



static void Test_S11927C1()
{
  {
    init_simple_test("S11927C1");
    S11927C1 lv;
    check2(sizeof(lv), ABISELECT(80,52), "sizeof(S11927C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11927C1)");
    check_field_offset(lv, s11927c1f0, 0, "S11927C1.s11927c1f0");
    check_field_offset(lv, s11927c1f1, ABISELECT(56,40), "S11927C1.s11927c1f1");
  }
}
static Arrange_To_Call_Me vS11927C1(Test_S11927C1, "S11927C1", ABISELECT(80,52));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11018C1  {
  char s11018c1f0[8];
  int s11018c1f1[8];
  char s11018c1f2[4];
  int s11018c1f3[2];
  short s11018c1f4[4];
};
//SIG(1 S11018C1) C1{ Fc[8] Fi[8] Fc[4] Fi[2] Fs[4]}



static void Test_S11018C1()
{
  {
    init_simple_test("S11018C1");
    S11018C1 lv;
    check2(sizeof(lv), 60, "sizeof(S11018C1)");
    check2(__alignof__(lv), 4, "__alignof__(S11018C1)");
    check_field_offset(lv, s11018c1f0, 0, "S11018C1.s11018c1f0");
    check_field_offset(lv, s11018c1f1, 8, "S11018C1.s11018c1f1");
    check_field_offset(lv, s11018c1f2, 40, "S11018C1.s11018c1f2");
    check_field_offset(lv, s11018c1f3, 44, "S11018C1.s11018c1f3");
    check_field_offset(lv, s11018c1f4, 52, "S11018C1.s11018c1f4");
  }
}
static Arrange_To_Call_Me vS11018C1(Test_S11018C1, "S11018C1", 60);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11730C1  {
  ::S11727C2_nt s11730c1f0;
  ::S11727C2_nt s11730c1f1;
  ::S13685C9 s11730c1f2;
  void *s11730c1f3[3];
};
//SIG(1 S11730C1) C1{ FC2{ FL[2]} FC2 FC3{ Fp FL} Fp[3]}



static void Test_S11730C1()
{
  {
    init_simple_test("S11730C1");
    S11730C1 lv;
    check2(sizeof(lv), ABISELECT(72,56), "sizeof(S11730C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11730C1)");
    check_field_offset(lv, s11730c1f0, 0, "S11730C1.s11730c1f0");
    check_field_offset(lv, s11730c1f1, 16, "S11730C1.s11730c1f1");
    check_field_offset(lv, s11730c1f2, 32, "S11730C1.s11730c1f2");
    check_field_offset(lv, s11730c1f3, ABISELECT(48,44), "S11730C1.s11730c1f3");
  }
}
static Arrange_To_Call_Me vS11730C1(Test_S11730C1, "S11730C1", ABISELECT(72,56));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18141C1  {
  void *s18141c1f0[3];
  ::S3352C18 s18141c1f1;
  void  mf18141c1(); // _ZN8S18141C19mf18141c1Ev
};
//SIG(1 S18141C1) C1{ m Fp[3] FC2{ BC3{ m Fp Fi[2]}}}


void  S18141C1 ::mf18141c1(){}

static void Test_S18141C1()
{
  {
    init_simple_test("S18141C1");
    S18141C1 lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S18141C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18141C1)");
    check_field_offset(lv, s18141c1f0, 0, "S18141C1.s18141c1f0");
    check_field_offset(lv, s18141c1f1, ABISELECT(24,12), "S18141C1.s18141c1f1");
  }
}
static Arrange_To_Call_Me vS18141C1(Test_S18141C1, "S18141C1", ABISELECT(40,24));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9569C2  {
  virtual  ~S9569C2(); // _ZN7S9569C2D1Ev
  virtual void  v3(); // _ZN7S9569C22v3Ev
  virtual void  v4(); // _ZN7S9569C22v4Ev
  S9569C2(); // tgen
};
//SIG(-1 S9569C2) C1{ vd v1 v2}


 S9569C2 ::~S9569C2(){ note_dtor("S9569C2", this);}
void  S9569C2 ::v3(){vfunc_called(this, "_ZN7S9569C22v3Ev");}
void  S9569C2 ::v4(){vfunc_called(this, "_ZN7S9569C22v4Ev");}
S9569C2 ::S9569C2(){ note_ctor("S9569C2", this);} // tgen

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

#else // __cplusplus

extern void _ZN7S9569C2C1Ev();
extern void _ZN7S9569C2D1Ev();
Name_Map name_map_S9569C2[] = {
  NSPAIR(_ZN7S9569C2C1Ev),
  NSPAIR(_ZN7S9569C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9569C2[];
extern void _ZN7S9569C2D1Ev();
extern void _ZN7S9569C2D0Ev();
extern void _ZN7S9569C22v3Ev();
extern void _ZN7S9569C22v4Ev();
static  VTBL_ENTRY vtc_S9569C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9569C2[0]),
  (VTBL_ENTRY)&_ZN7S9569C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9569C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9569C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9569C22v4Ev,
};
extern VTBL_ENTRY _ZTI7S9569C2[];
extern  VTBL_ENTRY _ZTV7S9569C2[];
Class_Descriptor cd_S9569C2 = {  "S9569C2", // class name
  0,0,//no base classes
  &(vtc_S9569C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S9569C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9569C2),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  S9569C1  : S9569C2 {
  void *s9569c1f0;
  int s9569c1f1[2];
  virtual void  v1(); // _ZN7S9569C12v1Ev
  virtual void  v2(); // _ZN7S9569C12v2Ev
  ~S9569C1(); // tgen
  S9569C1(); // tgen
};
//SIG(1 S9569C1) C1{ BC2{ vd v3 v4} v1 v2 Fp Fi[2]}


void  S9569C1 ::v1(){vfunc_called(this, "_ZN7S9569C12v1Ev");}
void  S9569C1 ::v2(){vfunc_called(this, "_ZN7S9569C12v2Ev");}
S9569C1 ::~S9569C1(){ note_dtor("S9569C1", this);} // tgen
S9569C1 ::S9569C1(){ note_ctor("S9569C1", this);} // tgen

static void Test_S9569C1()
{
  extern Class_Descriptor cd_S9569C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S9569C1, buf);
    S9569C1 *dp, &lv = *(dp=new (buf) S9569C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S9569C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9569C1)");
    check_base_class_offset(lv, (S9569C2*), 0, "S9569C1");
    check_field_offset(lv, s9569c1f0, ABISELECT(8,4), "S9569C1.s9569c1f0");
    check_field_offset(lv, s9569c1f1, ABISELECT(16,8), "S9569C1.s9569c1f1");
    test_class_info(&lv, &cd_S9569C1);
    dp->~S9569C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9569C1(Test_S9569C1, "S9569C1", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S9569C1C1Ev();
extern void _ZN7S9569C1D1Ev();
Name_Map name_map_S9569C1[] = {
  NSPAIR(_ZN7S9569C1C1Ev),
  NSPAIR(_ZN7S9569C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9569C2;
extern VTBL_ENTRY _ZTI7S9569C2[];
extern  VTBL_ENTRY _ZTV7S9569C2[];
static Base_Class bases_S9569C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9569C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9569C1[];
extern void _ZN7S9569C1D1Ev();
extern void _ZN7S9569C1D0Ev();
extern void _ZN7S9569C22v3Ev();
extern void _ZN7S9569C22v4Ev();
extern void _ZN7S9569C12v1Ev();
extern void _ZN7S9569C12v2Ev();
static  VTBL_ENTRY vtc_S9569C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9569C1[0]),
  (VTBL_ENTRY)&_ZN7S9569C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9569C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9569C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9569C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9569C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9569C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9569C1[];
extern  VTBL_ENTRY _ZTV7S9569C1[];
Class_Descriptor cd_S9569C1 = {  "S9569C1", // class name
  bases_S9569C1, 1,
  &(vtc_S9569C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S9569C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9569C1),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13219C1  {
  int s13219c1f0[2];
  void *s13219c1f1[2];
  ::S12626C20 s13219c1f2;
  void *s13219c1f3[4];
  int s13219c1f4;
};
//SIG(1 S13219C1) C1{ Fi[2] Fp[2] FC2{ Fl} Fp[4] Fi}



static void Test_S13219C1()
{
  {
    init_simple_test("S13219C1");
    S13219C1 lv;
    check2(sizeof(lv), ABISELECT(72,40), "sizeof(S13219C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13219C1)");
    check_field_offset(lv, s13219c1f0, 0, "S13219C1.s13219c1f0");
    check_field_offset(lv, s13219c1f1, 8, "S13219C1.s13219c1f1");
    check_field_offset(lv, s13219c1f2, ABISELECT(24,16), "S13219C1.s13219c1f2");
    check_field_offset(lv, s13219c1f3, ABISELECT(32,20), "S13219C1.s13219c1f3");
    check_field_offset(lv, s13219c1f4, ABISELECT(64,36), "S13219C1.s13219c1f4");
  }
}
static Arrange_To_Call_Me vS13219C1(Test_S13219C1, "S13219C1", ABISELECT(72,40));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11180C1  {
  ::S13861C3 s11180c1f0;
  ::S13685C9 s11180c1f1;
};
//SIG(1 S11180C1) C1{ FC2{ Fc[3] Fl[3]} FC3{ Fp FL}}



static void Test_S11180C1()
{
  {
    init_simple_test("S11180C1");
    S11180C1 lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S11180C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11180C1)");
    check_field_offset(lv, s11180c1f0, 0, "S11180C1.s11180c1f0");
    check_field_offset(lv, s11180c1f1, ABISELECT(32,16), "S11180C1.s11180c1f1");
  }
}
static Arrange_To_Call_Me vS11180C1(Test_S11180C1, "S11180C1", ABISELECT(48,28));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18773C1  {
  __tsi64 s18773c1f0[2];
  int s18773c1f1;
  virtual void  v1(); // _ZN8S18773C12v1Ev
  virtual void  v2(); // _ZN8S18773C12v2Ev
  virtual void  v3(); // _ZN8S18773C12v3Ev
  virtual void  v4(); // _ZN8S18773C12v4Ev
  virtual void  v5(); // _ZN8S18773C12v5Ev
  virtual void  v6(); // _ZN8S18773C12v6Ev
  ~S18773C1(); // tgen
  S18773C1(); // tgen
};
//SIG(1 S18773C1) C1{ v1 v2 v3 v4 v5 v6 FL[2] Fi}


void  S18773C1 ::v1(){vfunc_called(this, "_ZN8S18773C12v1Ev");}
void  S18773C1 ::v2(){vfunc_called(this, "_ZN8S18773C12v2Ev");}
void  S18773C1 ::v3(){vfunc_called(this, "_ZN8S18773C12v3Ev");}
void  S18773C1 ::v4(){vfunc_called(this, "_ZN8S18773C12v4Ev");}
void  S18773C1 ::v5(){vfunc_called(this, "_ZN8S18773C12v5Ev");}
void  S18773C1 ::v6(){vfunc_called(this, "_ZN8S18773C12v6Ev");}
S18773C1 ::~S18773C1(){ note_dtor("S18773C1", this);} // tgen
S18773C1 ::S18773C1(){ note_ctor("S18773C1", this);} // tgen

static void Test_S18773C1()
{
  extern Class_Descriptor cd_S18773C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,7)];
    init_test(&cd_S18773C1, buf);
    S18773C1 *dp, &lv = *(dp=new (buf) S18773C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,24), "sizeof(S18773C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18773C1)");
    check_field_offset(lv, s18773c1f0, ABISELECT(8,4), "S18773C1.s18773c1f0");
    check_field_offset(lv, s18773c1f1, ABISELECT(24,20), "S18773C1.s18773c1f1");
    test_class_info(&lv, &cd_S18773C1);
    dp->~S18773C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18773C1(Test_S18773C1, "S18773C1", ABISELECT(32,24));

#else // __cplusplus

extern void _ZN8S18773C1C1Ev();
extern void _ZN8S18773C1D1Ev();
Name_Map name_map_S18773C1[] = {
  NSPAIR(_ZN8S18773C1C1Ev),
  NSPAIR(_ZN8S18773C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18773C1[];
extern void _ZN8S18773C12v1Ev();
extern void _ZN8S18773C12v2Ev();
extern void _ZN8S18773C12v3Ev();
extern void _ZN8S18773C12v4Ev();
extern void _ZN8S18773C12v5Ev();
extern void _ZN8S18773C12v6Ev();
static  VTBL_ENTRY vtc_S18773C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18773C1[0]),
  (VTBL_ENTRY)&_ZN8S18773C12v1Ev,
  (VTBL_ENTRY)&_ZN8S18773C12v2Ev,
  (VTBL_ENTRY)&_ZN8S18773C12v3Ev,
  (VTBL_ENTRY)&_ZN8S18773C12v4Ev,
  (VTBL_ENTRY)&_ZN8S18773C12v5Ev,
  (VTBL_ENTRY)&_ZN8S18773C12v6Ev,
};
extern VTBL_ENTRY _ZTI8S18773C1[];
extern  VTBL_ENTRY _ZTV8S18773C1[];
Class_Descriptor cd_S18773C1 = {  "S18773C1", // class name
  0,0,//no base classes
  &(vtc_S18773C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,24), // object size
  NSPAIRA(_ZTI8S18773C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18773C1),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2660C2  : S3352C8_nt {
};
//SIG(-1 S2660C2) C1{ BC2{ m Fi}}



static void Test_S2660C2()
{
  extern Class_Descriptor cd_S2660C2;
  void *lvp;
  {
    int buf[2];
    init_test(&cd_S2660C2, buf);
    S2660C2 &lv = *(new (buf) S2660C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), 4, "sizeof(S2660C2)");
    check2(__alignof__(lv), 4, "__alignof__(S2660C2)");
    check_base_class_offset(lv, (S3352C8_nt*), 0, "S2660C2");
    test_class_info(&lv, &cd_S2660C2);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2660C2(Test_S2660C2, "S2660C2", 4);

#else // __cplusplus

extern Class_Descriptor cd_S3352C8_nt;
extern VTBL_ENTRY _ZTI10S3352C8_nt[];
static Base_Class bases_S2660C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3352C8_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S2660C2 = {  "S2660C2", // class name
  bases_S2660C2, 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  S2660C1  : S2660C2 {
  ::S885C13_nt s2660c1f0;
  char s2660c1f1;
};
//SIG(1 S2660C1) C1{ BC2{ BC3{ m Fi}} FC4{ m Fp} Fc}



static void Test_S2660C1()
{
  extern Class_Descriptor cd_S2660C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S2660C1, buf);
    S2660C1 &lv = *(new (buf) S2660C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S2660C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2660C1)");
    check_base_class_offset(lv, (S3352C8_nt*)(S2660C2*), 0, "S2660C1");
    check_base_class_offset(lv, (S2660C2*), 0, "S2660C1");
    check_field_offset(lv, s2660c1f0, ABISELECT(8,4), "S2660C1.s2660c1f0");
    check_field_offset(lv, s2660c1f1, ABISELECT(16,8), "S2660C1.s2660c1f1");
    test_class_info(&lv, &cd_S2660C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2660C1(Test_S2660C1, "S2660C1", ABISELECT(24,12));

#else // __cplusplus

extern Class_Descriptor cd_S3352C8_nt;
extern VTBL_ENTRY _ZTI10S3352C8_nt[];
extern Class_Descriptor cd_S2660C2;
static Base_Class bases_S2660C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3352C8_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2660C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //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_S2660C1 = {  "S2660C1", // class name
  bases_S2660C1, 2,
  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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17651C1  {
  void *s17651c1f0;
  ::S21755C5 s17651c1f1;
  int s17651c1f2;
  char s17651c1f3;
  void *s17651c1f4;
  void  mf17651c1(); // _ZN8S17651C19mf17651c1Ev
};
//SIG(1 S17651C1) C1{ m Fp FC2{ m Fp[2]} Fi Fc Fp}


void  S17651C1 ::mf17651c1(){}

static void Test_S17651C1()
{
  {
    init_simple_test("S17651C1");
    S17651C1 lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S17651C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17651C1)");
    check_field_offset(lv, s17651c1f0, 0, "S17651C1.s17651c1f0");
    check_field_offset(lv, s17651c1f1, ABISELECT(8,4), "S17651C1.s17651c1f1");
    check_field_offset(lv, s17651c1f2, ABISELECT(24,12), "S17651C1.s17651c1f2");
    check_field_offset(lv, s17651c1f3, ABISELECT(28,16), "S17651C1.s17651c1f3");
    check_field_offset(lv, s17651c1f4, ABISELECT(32,20), "S17651C1.s17651c1f4");
  }
}
static Arrange_To_Call_Me vS17651C1(Test_S17651C1, "S17651C1", ABISELECT(40,24));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12906C1  {
  unsigned int s12906c1f0:1;
  int s12906c1f1:5;
  int s12906c1f2:2;
  int s12906c1f3:8;
  int s12906c1f4:8;
};
//SIG(1 S12906C1) C1{ Fi:1 Fi:5 Fi:2 Fi:8 Fi:8}



static void Test_S12906C1()
{
  {
    init_simple_test("S12906C1");
    static S12906C1 lv;
    check2(sizeof(lv), 4, "sizeof(S12906C1)");
    check2(__alignof__(lv), 4, "__alignof__(S12906C1)");
    set_bf_and_test(lv, s12906c1f0, 0, 0, 1, 1, "S12906C1");
    set_bf_and_test(lv, s12906c1f1, 0, 1, 5, 1, "S12906C1");
    set_bf_and_test(lv, s12906c1f1, 0, 1, 5, hide_sll(1LL<<4), "S12906C1");
    set_bf_and_test(lv, s12906c1f2, 0, 6, 2, 1, "S12906C1");
    set_bf_and_test(lv, s12906c1f2, 0, 6, 2, hide_sll(1LL<<1), "S12906C1");
    set_bf_and_test(lv, s12906c1f3, 1, 0, 8, 1, "S12906C1");
    set_bf_and_test(lv, s12906c1f3, 1, 0, 8, hide_sll(1LL<<7), "S12906C1");
    set_bf_and_test(lv, s12906c1f4, 2, 0, 8, 1, "S12906C1");
    set_bf_and_test(lv, s12906c1f4, 2, 0, 8, hide_sll(1LL<<7), "S12906C1");
  }
}
static Arrange_To_Call_Me vS12906C1(Test_S12906C1, "S12906C1", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

union  S12887C2  {
  void *s12887c2f0;
  void *s12887c2f1;
  ::S11720C18 s12887c2f2;
};
//SIG(1 S12887C2) U1{ Fp Fp FC2{ Fp Fp}}

#endif // __cplusplus
#ifdef __cplusplus

struct  S12887C1  {
  int s12887c1f0;
  ::S12887C2 s12887c1f1;
};
//SIG(1 S12887C1) C1{ Fi FU2{ Fp Fp FC3{ Fp Fp}}}



static void Test_S12887C1()
{
  {
    init_simple_test("S12887C1");
    S12887C1 lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S12887C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12887C1)");
    check_field_offset(lv, s12887c1f0, 0, "S12887C1.s12887c1f0");
    check_field_offset(lv, s12887c1f1, ABISELECT(8,4), "S12887C1.s12887c1f1");
  }
}
static Arrange_To_Call_Me vS12887C1(Test_S12887C1, "S12887C1", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11852C3  {
  int s11852c3f0;
  __tsi64 s11852c3f1[4];
};
//SIG(-1 S11852C3) C1{ Fi FL[4]}



static void Test_S11852C3()
{
  {
    init_simple_test("S11852C3");
    S11852C3 lv;
    check2(sizeof(lv), ABISELECT(40,36), "sizeof(S11852C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11852C3)");
    check_field_offset(lv, s11852c3f0, 0, "S11852C3.s11852c3f0");
    check_field_offset(lv, s11852c3f1, ABISELECT(8,4), "S11852C3.s11852c3f1");
  }
}
static Arrange_To_Call_Me vS11852C3(Test_S11852C3, "S11852C3", ABISELECT(40,36));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11852C1  {
  ::S21830C2 s11852c1f0;
  ::S11852C3 s11852c1f1;
};
//SIG(1 S11852C1) C1{ FC2{ Fp[14]} FC3{ Fi FL[4]}}



static void Test_S11852C1()
{
  {
    init_simple_test("S11852C1");
    S11852C1 lv;
    check2(sizeof(lv), ABISELECT(152,92), "sizeof(S11852C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11852C1)");
    check_field_offset(lv, s11852c1f0, 0, "S11852C1.s11852c1f0");
    check_field_offset(lv, s11852c1f1, ABISELECT(112,56), "S11852C1.s11852c1f1");
  }
}
static Arrange_To_Call_Me vS11852C1(Test_S11852C1, "S11852C1", ABISELECT(152,92));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13638C1  {
  long s13638c1f0;
  char s13638c1f1;
  short s13638c1f2[2];
  ::S13685C9 s13638c1f3;
  void *s13638c1f4;
};
//SIG(1 S13638C1) C1{ Fl Fc Fs[2] FC2{ Fp FL} Fp}



static void Test_S13638C1()
{
  {
    init_simple_test("S13638C1");
    S13638C1 lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S13638C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13638C1)");
    check_field_offset(lv, s13638c1f0, 0, "S13638C1.s13638c1f0");
    check_field_offset(lv, s13638c1f1, ABISELECT(8,4), "S13638C1.s13638c1f1");
    check_field_offset(lv, s13638c1f2, ABISELECT(10,6), "S13638C1.s13638c1f2");
    check_field_offset(lv, s13638c1f3, ABISELECT(16,12), "S13638C1.s13638c1f3");
    check_field_offset(lv, s13638c1f4, ABISELECT(32,24), "S13638C1.s13638c1f4");
  }
}
static Arrange_To_Call_Me vS13638C1(Test_S13638C1, "S13638C1", ABISELECT(40,28));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12092C1  {
  ::S6962C17_nt s12092c1f0;
  ::S3352C21_nt s12092c1f1;
  int s12092c1f2[4];
};
//SIG(1 S12092C1) C1{ FC2{ m Fi[3]} FC3{ m} Fi[4]}



static void Test_S12092C1()
{
  {
    init_simple_test("S12092C1");
    S12092C1 lv;
    check2(sizeof(lv), 32, "sizeof(S12092C1)");
    check2(__alignof__(lv), 4, "__alignof__(S12092C1)");
    check_field_offset(lv, s12092c1f0, 0, "S12092C1.s12092c1f0");
    check_field_offset(lv, s12092c1f1, 12, "S12092C1.s12092c1f1");
    check_field_offset(lv, s12092c1f2, 16, "S12092C1.s12092c1f2");
  }
}
static Arrange_To_Call_Me vS12092C1(Test_S12092C1, "S12092C1", 32);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18449C1  {
  short s18449c1f0[6];
  void *s18449c1f1;
  short s18449c1f2[2];
  int s18449c1f3[3];
  void  mf18449c1(); // _ZN8S18449C19mf18449c1Ev
};
//SIG(1 S18449C1) C1{ m Fs[6] Fp Fs[2] Fi[3]}


void  S18449C1 ::mf18449c1(){}

static void Test_S18449C1()
{
  {
    init_simple_test("S18449C1");
    S18449C1 lv;
    check2(sizeof(lv), ABISELECT(40,32), "sizeof(S18449C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18449C1)");
    check_field_offset(lv, s18449c1f0, 0, "S18449C1.s18449c1f0");
    check_field_offset(lv, s18449c1f1, ABISELECT(16,12), "S18449C1.s18449c1f1");
    check_field_offset(lv, s18449c1f2, ABISELECT(24,16), "S18449C1.s18449c1f2");
    check_field_offset(lv, s18449c1f3, ABISELECT(28,20), "S18449C1.s18449c1f3");
  }
}
static Arrange_To_Call_Me vS18449C1(Test_S18449C1, "S18449C1", ABISELECT(40,32));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15224C1  {
  char s15224c1f0[257];
  void *s15224c1f1[4];
  int s15224c1f2[2];
  void  mf15224c1(); // _ZN8S15224C19mf15224c1Ev
};
//SIG(1 S15224C1) C1{ m Fc[257] Fp[4] Fi[2]}


void  S15224C1 ::mf15224c1(){}

static void Test_S15224C1()
{
  {
    init_simple_test("S15224C1");
    S15224C1 lv;
    check2(sizeof(lv), ABISELECT(304,284), "sizeof(S15224C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15224C1)");
    check_field_offset(lv, s15224c1f0, 0, "S15224C1.s15224c1f0");
    check_field_offset(lv, s15224c1f1, ABISELECT(264,260), "S15224C1.s15224c1f1");
    check_field_offset(lv, s15224c1f2, ABISELECT(296,276), "S15224C1.s15224c1f2");
  }
}
static Arrange_To_Call_Me vS15224C1(Test_S15224C1, "S15224C1", ABISELECT(304,284));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

union  S13269C2  {
  ::S11720C18 s13269c2f0;
};
//SIG(1 S13269C2) U1{ FC2{ Fp Fp}}

#endif // __cplusplus
#ifdef __cplusplus

struct  S13269C1  {
  int s13269c1f0[2];
  ::S13269C2 s13269c1f1;
};
//SIG(1 S13269C1) C1{ Fi[2] FU2{ FC3{ Fp Fp}}}



static void Test_S13269C1()
{
  {
    init_simple_test("S13269C1");
    S13269C1 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S13269C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13269C1)");
    check_field_offset(lv, s13269c1f0, 0, "S13269C1.s13269c1f0");
    check_field_offset(lv, s13269c1f1, 8, "S13269C1.s13269c1f1");
  }
}
static Arrange_To_Call_Me vS13269C1(Test_S13269C1, "S13269C1", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8450C2  {
  void *s8450c2f0[3];
  virtual  ~S8450C2(); // _ZN7S8450C2D1Ev
  virtual void  v1(); // _ZN7S8450C22v1Ev
  virtual void  v2(); // _ZN7S8450C22v2Ev
  S8450C2(); // tgen
};
//SIG(-1 S8450C2) C1{ vd v1 v2 Fp[3]}


 S8450C2 ::~S8450C2(){ note_dtor("S8450C2", this);}
void  S8450C2 ::v1(){vfunc_called(this, "_ZN7S8450C22v1Ev");}
void  S8450C2 ::v2(){vfunc_called(this, "_ZN7S8450C22v2Ev");}
S8450C2 ::S8450C2(){ note_ctor("S8450C2", this);} // tgen

static void Test_S8450C2()
{
  extern Class_Descriptor cd_S8450C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S8450C2, buf);
    S8450C2 *dp, &lv = *(dp=new (buf) S8450C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S8450C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8450C2)");
    check_field_offset(lv, s8450c2f0, ABISELECT(8,4), "S8450C2.s8450c2f0");
    test_class_info(&lv, &cd_S8450C2);
    dp->~S8450C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8450C2(Test_S8450C2, "S8450C2", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S8450C2C1Ev();
extern void _ZN7S8450C2D1Ev();
Name_Map name_map_S8450C2[] = {
  NSPAIR(_ZN7S8450C2C1Ev),
  NSPAIR(_ZN7S8450C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S8450C2[];
extern void _ZN7S8450C2D1Ev();
extern void _ZN7S8450C2D0Ev();
extern void _ZN7S8450C22v1Ev();
extern void _ZN7S8450C22v2Ev();
static  VTBL_ENTRY vtc_S8450C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8450C2[0]),
  (VTBL_ENTRY)&_ZN7S8450C2D1Ev,
  (VTBL_ENTRY)&_ZN7S8450C2D0Ev,
  (VTBL_ENTRY)&_ZN7S8450C22v1Ev,
  (VTBL_ENTRY)&_ZN7S8450C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S8450C2[];
extern  VTBL_ENTRY _ZTV7S8450C2[];
Class_Descriptor cd_S8450C2 = {  "S8450C2", // class name
  0,0,//no base classes
  &(vtc_S8450C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S8450C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S8450C2),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  S8450C1  : S8450C2 {
  virtual  ~S8450C1(); // _ZN7S8450C1D1Ev
  S8450C1(); // tgen
};
//SIG(1 S8450C1) C1{ BC2{ vd v1 v2 Fp[3]} vd}


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

static void Test_S8450C1()
{
  extern Class_Descriptor cd_S8450C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S8450C1, buf);
    S8450C1 *dp, &lv = *(dp=new (buf) S8450C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S8450C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8450C1)");
    check_base_class_offset(lv, (S8450C2*), 0, "S8450C1");
    test_class_info(&lv, &cd_S8450C1);
    dp->~S8450C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8450C1(Test_S8450C1, "S8450C1", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN7S8450C1C1Ev();
extern void _ZN7S8450C1D1Ev();
Name_Map name_map_S8450C1[] = {
  NSPAIR(_ZN7S8450C1C1Ev),
  NSPAIR(_ZN7S8450C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8450C2;
extern VTBL_ENTRY _ZTI7S8450C2[];
extern  VTBL_ENTRY _ZTV7S8450C2[];
static Base_Class bases_S8450C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8450C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8450C1[];
extern void _ZN7S8450C1D1Ev();
extern void _ZN7S8450C1D0Ev();
extern void _ZN7S8450C22v1Ev();
extern void _ZN7S8450C22v2Ev();
static  VTBL_ENTRY vtc_S8450C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8450C1[0]),
  (VTBL_ENTRY)&_ZN7S8450C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8450C1D0Ev,
  (VTBL_ENTRY)&_ZN7S8450C22v1Ev,
  (VTBL_ENTRY)&_ZN7S8450C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S8450C1[];
extern  VTBL_ENTRY _ZTV7S8450C1[];
Class_Descriptor cd_S8450C1 = {  "S8450C1", // class name
  bases_S8450C1, 1,
  &(vtc_S8450C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI7S8450C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8450C1),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13875C1  {
  long s13875c1f0;
  short s13875c1f1[2];
  ::S13685C9 s13875c1f2;
  void *s13875c1f3;
};
//SIG(1 S13875C1) C1{ Fl Fs[2] FC2{ Fp FL} Fp}



static void Test_S13875C1()
{
  {
    init_simple_test("S13875C1");
    S13875C1 lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S13875C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13875C1)");
    check_field_offset(lv, s13875c1f0, 0, "S13875C1.s13875c1f0");
    check_field_offset(lv, s13875c1f1, ABISELECT(8,4), "S13875C1.s13875c1f1");
    check_field_offset(lv, s13875c1f2, ABISELECT(16,8), "S13875C1.s13875c1f2");
    check_field_offset(lv, s13875c1f3, ABISELECT(32,20), "S13875C1.s13875c1f3");
  }
}
static Arrange_To_Call_Me vS13875C1(Test_S13875C1, "S13875C1", ABISELECT(40,24));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12705C1  {
  int s12705c1f0;
  void *s12705c1f1;
  int s12705c1f2[2];
  void *s12705c1f3[2];
  int s12705c1f4;
};
//SIG(1 S12705C1) C1{ Fi Fp Fi[2] Fp[2] Fi}



static void Test_S12705C1()
{
  {
    init_simple_test("S12705C1");
    S12705C1 lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S12705C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12705C1)");
    check_field_offset(lv, s12705c1f0, 0, "S12705C1.s12705c1f0");
    check_field_offset(lv, s12705c1f1, ABISELECT(8,4), "S12705C1.s12705c1f1");
    check_field_offset(lv, s12705c1f2, ABISELECT(16,8), "S12705C1.s12705c1f2");
    check_field_offset(lv, s12705c1f3, ABISELECT(24,16), "S12705C1.s12705c1f3");
    check_field_offset(lv, s12705c1f4, ABISELECT(40,24), "S12705C1.s12705c1f4");
  }
}
static Arrange_To_Call_Me vS12705C1(Test_S12705C1, "S12705C1", ABISELECT(48,28));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S14474C1  {
  void *s14474c1f0[2];
  ::S13685C21 s14474c1f1;
  ::S13685C21 s14474c1f2;
};
//SIG(1 S14474C1) C1{ Fp[2] FC2{ FL Fp} FC2}



static void Test_S14474C1()
{
  {
    init_simple_test("S14474C1");
    S14474C1 lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S14474C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14474C1)");
    check_field_offset(lv, s14474c1f0, 0, "S14474C1.s14474c1f0");
    check_field_offset(lv, s14474c1f1, ABISELECT(16,8), "S14474C1.s14474c1f1");
    check_field_offset(lv, s14474c1f2, ABISELECT(32,20), "S14474C1.s14474c1f2");
  }
}
static Arrange_To_Call_Me vS14474C1(Test_S14474C1, "S14474C1", ABISELECT(48,32));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17214C1  {
  int s17214c1f0[4];
  char s17214c1f1;
  int s17214c1f2;
  __tsi64 s17214c1f3[2];
  void  mf17214c1(); // _ZN8S17214C19mf17214c1Ev
};
//SIG(1 S17214C1) C1{ m Fi[4] Fc Fi FL[2]}


void  S17214C1 ::mf17214c1(){}

static void Test_S17214C1()
{
  {
    init_simple_test("S17214C1");
    S17214C1 lv;
    check2(sizeof(lv), 40, "sizeof(S17214C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17214C1)");
    check_field_offset(lv, s17214c1f0, 0, "S17214C1.s17214c1f0");
    check_field_offset(lv, s17214c1f1, 16, "S17214C1.s17214c1f1");
    check_field_offset(lv, s17214c1f2, 20, "S17214C1.s17214c1f2");
    check_field_offset(lv, s17214c1f3, 24, "S17214C1.s17214c1f3");
  }
}
static Arrange_To_Call_Me vS17214C1(Test_S17214C1, "S17214C1", 40);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5934C1  : S601C30_nt , S3352C8_nt {
};
//SIG(1 S5934C1) C1{ BC2{ m FL} BC3{ m Fi}}



static void Test_S5934C1()
{
  extern Class_Descriptor cd_S5934C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S5934C1, buf);
    S5934C1 &lv = *(new (buf) S5934C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S5934C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5934C1)");
    check_base_class_offset(lv, (S601C30_nt*), 0, "S5934C1");
    check_base_class_offset(lv, (S3352C8_nt*), 8, "S5934C1");
    test_class_info(&lv, &cd_S5934C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5934C1(Test_S5934C1, "S5934C1", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S601C30_nt;
extern Class_Descriptor cd_S3352C8_nt;
extern VTBL_ENTRY _ZTI10S3352C8_nt[];
static Base_Class bases_S5934C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S601C30_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S3352C8_nt,    8, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S5934C1 = {  "S5934C1", // class name
  bases_S5934C1, 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  S13027C1  {
  int s13027c1f0[2];
  char s13027c1f1[32];
  int s13027c1f2[3];
};
//SIG(1 S13027C1) C1{ Fi[2] Fc[32] Fi[3]}



static void Test_S13027C1()
{
  {
    init_simple_test("S13027C1");
    S13027C1 lv;
    check2(sizeof(lv), 52, "sizeof(S13027C1)");
    check2(__alignof__(lv), 4, "__alignof__(S13027C1)");
    check_field_offset(lv, s13027c1f0, 0, "S13027C1.s13027c1f0");
    check_field_offset(lv, s13027c1f1, 8, "S13027C1.s13027c1f1");
    check_field_offset(lv, s13027c1f2, 40, "S13027C1.s13027c1f2");
  }
}
static Arrange_To_Call_Me vS13027C1(Test_S13027C1, "S13027C1", 52);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10503C1  {
  char s10503c1f0;
  short s10503c1f1;
  ::S13685C9 s10503c1f2;
  void *s10503c1f3;
};
//SIG(1 S10503C1) C1{ Fc Fs FC2{ Fp FL} Fp}



static void Test_S10503C1()
{
  {
    init_simple_test("S10503C1");
    S10503C1 lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S10503C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10503C1)");
    check_field_offset(lv, s10503c1f0, 0, "S10503C1.s10503c1f0");
    check_field_offset(lv, s10503c1f1, 2, "S10503C1.s10503c1f1");
    check_field_offset(lv, s10503c1f2, ABISELECT(8,4), "S10503C1.s10503c1f2");
    check_field_offset(lv, s10503c1f3, ABISELECT(24,16), "S10503C1.s10503c1f3");
  }
}
static Arrange_To_Call_Me vS10503C1(Test_S10503C1, "S10503C1", ABISELECT(32,20));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12868C1  {
  int s12868c1f0;
  ::S13269C2 s12868c1f1;
};
//SIG(1 S12868C1) C1{ Fi FU2{ FC3{ Fp Fp}}}



static void Test_S12868C1()
{
  {
    init_simple_test("S12868C1");
    S12868C1 lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S12868C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12868C1)");
    check_field_offset(lv, s12868c1f0, 0, "S12868C1.s12868c1f0");
    check_field_offset(lv, s12868c1f1, ABISELECT(8,4), "S12868C1.s12868c1f1");
  }
}
static Arrange_To_Call_Me vS12868C1(Test_S12868C1, "S12868C1", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13156C1  {
  int s13156c1f0[2];
  long s13156c1f1;
  int s13156c1f2;
  void *s13156c1f3;
  int s13156c1f4;
};
//SIG(1 S13156C1) C1{ Fi[2] Fl Fi Fp Fi}



static void Test_S13156C1()
{
  {
    init_simple_test("S13156C1");
    S13156C1 lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S13156C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13156C1)");
    check_field_offset(lv, s13156c1f0, 0, "S13156C1.s13156c1f0");
    check_field_offset(lv, s13156c1f1, 8, "S13156C1.s13156c1f1");
    check_field_offset(lv, s13156c1f2, ABISELECT(16,12), "S13156C1.s13156c1f2");
    check_field_offset(lv, s13156c1f3, ABISELECT(24,16), "S13156C1.s13156c1f3");
    check_field_offset(lv, s13156c1f4, ABISELECT(32,20), "S13156C1.s13156c1f4");
  }
}
static Arrange_To_Call_Me vS13156C1(Test_S13156C1, "S13156C1", ABISELECT(40,24));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21855C1  {
  void *s21855c1f0[4];
  int s21855c1f1[2];
  void  mf21855c1(); // _ZN8S21855C19mf21855c1Ev
  virtual  ~S21855C1(); // _ZN8S21855C1D1Ev
  S21855C1(); // tgen
};
//SIG(1 S21855C1) C1{ vd m Fp[4] Fi[2]}


void  S21855C1 ::mf21855c1(){}
 S21855C1 ::~S21855C1(){ note_dtor("S21855C1", this);}
S21855C1 ::S21855C1(){ note_ctor("S21855C1", this);} // tgen

static void Test_S21855C1()
{
  extern Class_Descriptor cd_S21855C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S21855C1, buf);
    S21855C1 *dp, &lv = *(dp=new (buf) S21855C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S21855C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21855C1)");
    check_field_offset(lv, s21855c1f0, ABISELECT(8,4), "S21855C1.s21855c1f0");
    check_field_offset(lv, s21855c1f1, ABISELECT(40,20), "S21855C1.s21855c1f1");
    test_class_info(&lv, &cd_S21855C1);
    dp->~S21855C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21855C1(Test_S21855C1, "S21855C1", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN8S21855C1C1Ev();
extern void _ZN8S21855C1D1Ev();
Name_Map name_map_S21855C1[] = {
  NSPAIR(_ZN8S21855C1C1Ev),
  NSPAIR(_ZN8S21855C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21855C1[];
extern void _ZN8S21855C1D1Ev();
extern void _ZN8S21855C1D0Ev();
static  VTBL_ENTRY vtc_S21855C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21855C1[0]),
  (VTBL_ENTRY)&_ZN8S21855C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21855C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21855C1[];
extern  VTBL_ENTRY _ZTV8S21855C1[];
Class_Descriptor cd_S21855C1 = {  "S21855C1", // class name
  0,0,//no base classes
  &(vtc_S21855C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI8S21855C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21855C1),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  S10504C1  {
  char s10504c1f0;
  short s10504c1f1;
  ::S13685C9 s10504c1f2;
};
//SIG(1 S10504C1) C1{ Fc Fs FC2{ Fp FL}}



static void Test_S10504C1()
{
  {
    init_simple_test("S10504C1");
    S10504C1 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S10504C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10504C1)");
    check_field_offset(lv, s10504c1f0, 0, "S10504C1.s10504c1f0");
    check_field_offset(lv, s10504c1f1, 2, "S10504C1.s10504c1f1");
    check_field_offset(lv, s10504c1f2, ABISELECT(8,4), "S10504C1.s10504c1f2");
  }
}
static Arrange_To_Call_Me vS10504C1(Test_S10504C1, "S10504C1", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10489C1  {
  char s10489c1f0;
  long s10489c1f1;
  ::S13685C9 s10489c1f2;
};
//SIG(1 S10489C1) C1{ Fc Fl FC2{ Fp FL}}



static void Test_S10489C1()
{
  {
    init_simple_test("S10489C1");
    S10489C1 lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S10489C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10489C1)");
    check_field_offset(lv, s10489c1f0, 0, "S10489C1.s10489c1f0");
    check_field_offset(lv, s10489c1f1, ABISELECT(8,4), "S10489C1.s10489c1f1");
    check_field_offset(lv, s10489c1f2, ABISELECT(16,8), "S10489C1.s10489c1f2");
  }
}
static Arrange_To_Call_Me vS10489C1(Test_S10489C1, "S10489C1", ABISELECT(32,20));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13722C1  {
  __tsi64 s13722c1f0;
  ::S13685C9 s13722c1f1;
  void *s13722c1f2;
};
//SIG(1 S13722C1) C1{ FL FC2{ Fp FL} Fp}



static void Test_S13722C1()
{
  {
    init_simple_test("S13722C1");
    S13722C1 lv;
    check2(sizeof(lv), ABISELECT(32,24), "sizeof(S13722C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13722C1)");
    check_field_offset(lv, s13722c1f0, 0, "S13722C1.s13722c1f0");
    check_field_offset(lv, s13722c1f1, 8, "S13722C1.s13722c1f1");
    check_field_offset(lv, s13722c1f2, ABISELECT(24,20), "S13722C1.s13722c1f2");
  }
}
static Arrange_To_Call_Me vS13722C1(Test_S13722C1, "S13722C1", ABISELECT(32,24));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11845C1  {
  ::S13685C9 s11845c1f0;
  void *s11845c1f1[2];
};
//SIG(1 S11845C1) C1{ FC2{ Fp FL} Fp[2]}



static void Test_S11845C1()
{
  {
    init_simple_test("S11845C1");
    S11845C1 lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S11845C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11845C1)");
    check_field_offset(lv, s11845c1f0, 0, "S11845C1.s11845c1f0");
    check_field_offset(lv, s11845c1f1, ABISELECT(16,12), "S11845C1.s11845c1f1");
  }
}
static Arrange_To_Call_Me vS11845C1(Test_S11845C1, "S11845C1", ABISELECT(32,20));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13942C1  {
  long s13942c1f0[2];
  __tsi64 s13942c1f1;
  long s13942c1f2[4];
};
//SIG(1 S13942C1) C1{ Fl[2] FL Fl[4]}



static void Test_S13942C1()
{
  {
    init_simple_test("S13942C1");
    S13942C1 lv;
    check2(sizeof(lv), ABISELECT(56,32), "sizeof(S13942C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13942C1)");
    check_field_offset(lv, s13942c1f0, 0, "S13942C1.s13942c1f0");
    check_field_offset(lv, s13942c1f1, ABISELECT(16,8), "S13942C1.s13942c1f1");
    check_field_offset(lv, s13942c1f2, ABISELECT(24,16), "S13942C1.s13942c1f2");
  }
}
static Arrange_To_Call_Me vS13942C1(Test_S13942C1, "S13942C1", ABISELECT(56,32));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12239C1  {
  int s12239c1f0;
  char s12239c1f1[2];
  int s12239c1f2[2];
};
//SIG(1 S12239C1) C1{ Fi Fc[2] Fi[2]}



static void Test_S12239C1()
{
  {
    init_simple_test("S12239C1");
    S12239C1 lv;
    check2(sizeof(lv), 16, "sizeof(S12239C1)");
    check2(__alignof__(lv), 4, "__alignof__(S12239C1)");
    check_field_offset(lv, s12239c1f0, 0, "S12239C1.s12239c1f0");
    check_field_offset(lv, s12239c1f1, 4, "S12239C1.s12239c1f1");
    check_field_offset(lv, s12239c1f2, 8, "S12239C1.s12239c1f2");
  }
}
static Arrange_To_Call_Me vS12239C1(Test_S12239C1, "S12239C1", 16);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10447C1  {
  char s10447c1f0;
  ::S11720C3_nt s10447c1f1;
};
//SIG(1 S10447C1) C1{ Fc FC2{ Fp[2]}}



static void Test_S10447C1()
{
  {
    init_simple_test("S10447C1");
    S10447C1 lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S10447C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10447C1)");
    check_field_offset(lv, s10447c1f0, 0, "S10447C1.s10447c1f0");
    check_field_offset(lv, s10447c1f1, ABISELECT(8,4), "S10447C1.s10447c1f1");
  }
}
static Arrange_To_Call_Me vS10447C1(Test_S10447C1, "S10447C1", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10640C1  {
  char s10640c1f0[162];
  void *s10640c1f1[2];
};
//SIG(1 S10640C1) C1{ Fc[162] Fp[2]}



static void Test_S10640C1()
{
  {
    init_simple_test("S10640C1");
    S10640C1 lv;
    check2(sizeof(lv), ABISELECT(184,172), "sizeof(S10640C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10640C1)");
    check_field_offset(lv, s10640c1f0, 0, "S10640C1.s10640c1f0");
    check_field_offset(lv, s10640c1f1, ABISELECT(168,164), "S10640C1.s10640c1f1");
  }
}
static Arrange_To_Call_Me vS10640C1(Test_S10640C1, "S10640C1", ABISELECT(184,172));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12508C1  {
  int s12508c1f0;
  ::S12626C20 s12508c1f1;
  int s12508c1f2;
};
//SIG(1 S12508C1) C1{ Fi FC2{ Fl} Fi}



static void Test_S12508C1()
{
  {
    init_simple_test("S12508C1");
    S12508C1 lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S12508C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12508C1)");
    check_field_offset(lv, s12508c1f0, 0, "S12508C1.s12508c1f0");
    check_field_offset(lv, s12508c1f1, ABISELECT(8,4), "S12508C1.s12508c1f1");
    check_field_offset(lv, s12508c1f2, ABISELECT(16,8), "S12508C1.s12508c1f2");
  }
}
static Arrange_To_Call_Me vS12508C1(Test_S12508C1, "S12508C1", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11846C1  {
  ::S13685C9 s11846c1f0;
  void *s11846c1f1;
};
//SIG(1 S11846C1) C1{ FC2{ Fp FL} Fp}



static void Test_S11846C1()
{
  {
    init_simple_test("S11846C1");
    S11846C1 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S11846C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11846C1)");
    check_field_offset(lv, s11846c1f0, 0, "S11846C1.s11846c1f0");
    check_field_offset(lv, s11846c1f1, ABISELECT(16,12), "S11846C1.s11846c1f1");
  }
}
static Arrange_To_Call_Me vS11846C1(Test_S11846C1, "S11846C1", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S14075C1  {
  void *s14075c1f0;
  char s14075c1f1[4];
  int s14075c1f2;
};
//SIG(1 S14075C1) C1{ Fp Fc[4] Fi}



static void Test_S14075C1()
{
  {
    init_simple_test("S14075C1");
    S14075C1 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S14075C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14075C1)");
    check_field_offset(lv, s14075c1f0, 0, "S14075C1.s14075c1f0");
    check_field_offset(lv, s14075c1f1, ABISELECT(8,4), "S14075C1.s14075c1f1");
    check_field_offset(lv, s14075c1f2, ABISELECT(12,8), "S14075C1.s14075c1f2");
  }
}
static Arrange_To_Call_Me vS14075C1(Test_S14075C1, "S14075C1", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10918C1  {
  char s10918c1f0[4];
  long s10918c1f1;
  void *s10918c1f2;
};
//SIG(1 S10918C1) C1{ Fc[4] Fl Fp}



static void Test_S10918C1()
{
  {
    init_simple_test("S10918C1");
    S10918C1 lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S10918C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10918C1)");
    check_field_offset(lv, s10918c1f0, 0, "S10918C1.s10918c1f0");
    check_field_offset(lv, s10918c1f1, ABISELECT(8,4), "S10918C1.s10918c1f1");
    check_field_offset(lv, s10918c1f2, ABISELECT(16,8), "S10918C1.s10918c1f2");
  }
}
static Arrange_To_Call_Me vS10918C1(Test_S10918C1, "S10918C1", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15010C1  {
  __tsi64 s15010c1f0;
  int s15010c1f1;
  void  mf15010c1(); // _ZN8S15010C19mf15010c1Ev
};
//SIG(1 S15010C1) C1{ m FL Fi}


void  S15010C1 ::mf15010c1(){}

static void Test_S15010C1()
{
  {
    init_simple_test("S15010C1");
    S15010C1 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S15010C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15010C1)");
    check_field_offset(lv, s15010c1f0, 0, "S15010C1.s15010c1f0");
    check_field_offset(lv, s15010c1f1, 8, "S15010C1.s15010c1f1");
  }
}
static Arrange_To_Call_Me vS15010C1(Test_S15010C1, "S15010C1", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10636C1  {
  char s10636c1f0[160];
  void *s10636c1f1;
};
//SIG(1 S10636C1) C1{ Fc[160] Fp}



static void Test_S10636C1()
{
  {
    init_simple_test("S10636C1");
    S10636C1 lv;
    check2(sizeof(lv), ABISELECT(168,164), "sizeof(S10636C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10636C1)");
    check_field_offset(lv, s10636c1f0, 0, "S10636C1.s10636c1f0");
    check_field_offset(lv, s10636c1f1, 160, "S10636C1.s10636c1f1");
  }
}
static Arrange_To_Call_Me vS10636C1(Test_S10636C1, "S10636C1", ABISELECT(168,164));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S12308C1  {
  int s12308c1f0;
  char s12308c1f1[450];
};
//SIG(1 S12308C1) C1{ Fi Fc[450]}



static void Test_S12308C1()
{
  {
    init_simple_test("S12308C1");
    S12308C1 lv;
    check2(sizeof(lv), 456, "sizeof(S12308C1)");
    check2(__alignof__(lv), 4, "__alignof__(S12308C1)");
    check_field_offset(lv, s12308c1f0, 0, "S12308C1.s12308c1f0");
    check_field_offset(lv, s12308c1f1, 4, "S12308C1.s12308c1f1");
  }
}
static Arrange_To_Call_Me vS12308C1(Test_S12308C1, "S12308C1", 456);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13987C1  {
  long s13987c1f0[3];
  __tsi64 s13987c1f1;
};
//SIG(1 S13987C1) C1{ Fl[3] FL}



static void Test_S13987C1()
{
  {
    init_simple_test("S13987C1");
    S13987C1 lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S13987C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13987C1)");
    check_field_offset(lv, s13987c1f0, 0, "S13987C1.s13987c1f0");
    check_field_offset(lv, s13987c1f1, ABISELECT(24,12), "S13987C1.s13987c1f1");
  }
}
static Arrange_To_Call_Me vS13987C1(Test_S13987C1, "S13987C1", ABISELECT(32,20));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17857C1  {
  void *s17857c1f0[19];
  void  mf17857c1(); // _ZN8S17857C19mf17857c1Ev
};
//SIG(1 S17857C1) C1{ m Fp[19]}


void  S17857C1 ::mf17857c1(){}

static void Test_S17857C1()
{
  {
    init_simple_test("S17857C1");
    S17857C1 lv;
    check2(sizeof(lv), ABISELECT(152,76), "sizeof(S17857C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17857C1)");
    check_field_offset(lv, s17857c1f0, 0, "S17857C1.s17857c1f0");
  }
}
static Arrange_To_Call_Me vS17857C1(Test_S17857C1, "S17857C1", ABISELECT(152,76));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S10641C1  {
  char s10641c1f0[162];
};
//SIG(1 S10641C1) C1{ Fc[162]}



static void Test_S10641C1()
{
  {
    init_simple_test("S10641C1");
    S10641C1 lv;
    check2(sizeof(lv), 162, "sizeof(S10641C1)");
    check2(__alignof__(lv), 1, "__alignof__(S10641C1)");
    check_field_offset(lv, s10641c1f0, 0, "S10641C1.s10641c1f0");
  }
}
static Arrange_To_Call_Me vS10641C1(Test_S10641C1, "S10641C1", 162);

#else // __cplusplus

#endif // __cplusplus

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

